JSP

부트캠프47일(pw찾기 , 비밀번호수정폼)

동곤일상 2025. 4. 9. 11:30
반응형

 

1) pw찾기에 유효성검사를 추가

2)updateForm.jsp의 비밀번호수정 폼 생성


1) pw찾기에 유효성검사를 추가

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- /webapp/member/pwForm.jsp--%>    
<!DOCTYPE html>
<html>
<!-- 비밀번호찾기버튼 클릭시 유효성검사 실시 추가 -->
<head>
<meta charset="UTF-8">
<title>비밀번호찾기</title>
<link rel="stylesheet" href="../css/main.css">
</head><body><h3>비밀번호찾기</h3>
<form action="pw.jsp" method="post" onsubmit="return input_check(this)">
  <table>
     <tr><th>아이디</th><td><input type="text" name="id"></td></tr>
     <tr><th>이메일</th><td><input type="text" name="email"></td></tr>
     <tr><th>전화번호</th><td><input type="text" name="tel"></td></tr>
     <tr><td colspan="2"><input type="submit" value="비밀번호찾기"></td></tr>
     <!-- submit을 누르면 pw.jsp로 넘어간다 -->
  </table>	
</form></body>
<script>
function input_check(f){
	if(f.id.value.trim() == ""){
		alert("ID입력바람")
		return false;
	}
	else if(f.email.value.trim() == ""){
		alert("Email입력바람")
		return false;
	}
	else if(f.tel.value.trim() == ""){
		alert("전화번호입력바람")
		return false;
	}
	else if(!isValidEmail(f.email.value.trim())){
		alert("올바르지않은 이메일형식")
		f.email.focus()
		return false;
	}
	else if(!isValidTel(f.tel.value.trim())){
		alert("올바르지않은 전화번호형식")
		f.tel.focus()
		return false;
	}
	else{
		return true;
	}
	
	function isValidEmail(email){
		const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9._]+\.[a-zA-Z]{2,}$/;
		return regex.test(email);
		/*
		   /^  .... $/ => 정규표현식 시작과 끝
		   [a-zA-Z0-9._%+-]+ : 대소문자 숫자 . - % + - 중  1개이상
		   @[a-zA-Z0-9._]+ : @ 문자뒤에 대소문자 숫자.  _ 중 한개이상
		   \. : .문자
		[a-zA-Z]{2,} : 대소문자 2개이상
		*/
	}
	
	
	function isValidTel(tel){
		const regex = /^(02|01[0126789])-?\d{3,4}-?\d{4}$/;
		return regex.test(tel);
/*
	(02|01[0126789])  : 02 or 010 011 ...019
	-?  : - 가 0 또는 1개
	\d{3,4}  : 숫자 3개or4개	
	\d{4} : 숫자4개
*/
	}
	
}
</script>
</html>

f.id : form하위의 name='id'인 태그

f.id.value.trim() : id태그의 값을 가져와 공백을 없앤다.

 


2) updateForm.jsp의 비밀번호수정 폼 생성

이 비밀번호수정버튼클릭시 발생되는 페이지들

passwordForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>비번수정폼</title>
<%
String login =  (String)session.getAttribute("login");
String id = request.getParameter("id");
String msg = "";
String url = "";
if(login==null){ 
	msg = "로그인하세요";
	url = "loginForm.jsp";

%>
<script type="text/javascript">
alert("<%=msg%>");
opener.location.href = "<%=url%>";
self.close();
</script>
<% }else{%>
<link rel="stylesheet" href="../css/main.css">
</head>
<body>
<form action="password.jsp" method="post" name="f" onsubmit="return input_check(this)">
<table><caption>비밀번호변경</caption>
<tr><th>현재 비밀번호</th>
	<td><input type="password" name="pass"></td></tr>
<tr><th>변경 비밀번호</th>
	<td><input type="password" name="chgpass"></td></tr>
<tr><th>재입력</th>
	<td><input type="password" name="chgpass2"></td></tr>
<tr><td colspan="2">
	<input type="submit" value="비밀번호변경">
	<input type= "reset" value="초기화"></td></tr>
</table>
</form>
<script type="text/javascript">
function input_check(f){
	if(f.chgpass.value != f.chgpass2.value){
		alert("변경할비밀번호 제대로 재입력하세요");
		f.chgpass2.value="";
		f.chgpass2.focus();
		return false;
	}
	return true;
}
</script>
<%} %>


</body>
</html>

 

MemberDto클래스의 updatePass()메서드 (DB에 반영하는 메서드)

public boolean updatePass(String id , String pass) {
		Connection conn = DBConnection.getConnection();
		PreparedStatement psmt = null;
        //입력된아이디의 레코드의비밀번호를
        //입력된 pass로 변경하는 쿼리문
		String sql = "update member set pass=? where id=?";
		try {
			psmt = conn.prepareStatement(sql);
			psmt.setString(1, pass);
			psmt.setString(2, id);
			if(psmt.executeUpdate()>0) {
				conn.commit();
				return true;
			}
			return false;
			
		}
		catch(Exception e) {
			e.printStackTrace();
		}
		finally {
			DBConnection.close(conn, psmt, null);
		}
		return false;
	}

password.jsp (비밀번호변경을 처리하는곳)

<%@page import="model.member.Member"%>
<%@page import="model.member.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<!-- 
	1.파라미터저장
	2.로그인한 사용자의 비밀번호변경만 가능 
	로그아웃상태 : 로그인하세요 출력 후 opener창을 loginForm.jsp로 이동후 현재페이지닫기
	3.비밀번호 검증 : 현재비밀번호로비교
	비밀번호 오류 : 비밀번호 오류 메시지 출력 후 현재페이지를 passwordForm.jsp로이동
	4.db에 비밀번호수정
		boolean MemberDto.updatePass(id,비번)
		수정성공 : 성공메시지 출력 후
			(로그아웃되었습니다. 변경된 비밀번호로 다시로그인하세요_
			opener페이지 loginForm.jsp로 이동,현재페이지닫기
		수정실패 : 수정실패 메시지 출력후 현재페이지 닫기
 -->
<html>
<head>
<%
String login = (String)session.getAttribute("login");
String pass = request.getParameter("pass");
String chgpass = request.getParameter("chgpass");
Member mem = new MemberDto().selectOne(login);
String myPass = mem.getPass();

if(login==null || login==""){
%>
<script type="text/javascript">
alert("로그인하세요");
opener.location.href = "loginForm.jsp"
self.close();
</script>

<!-- 입력한비번과 DB상의 비번이 맞지않는다면 -->
<%} else if(!pass.equals(myPass)){%> 
<script>
alert("비밀번호오류")
location.href = "passwordForm.jsp";
</script>

<%}else{ 
	MemberDto dto = new MemberDto();
if(dto.updatePass(login, chgpass)){ //비밀번호성공
//세선정보 초기화
	session.invalidate();
%>
<script type="text/javascript">
alert("로그아웃되었습니다. 변경된 비밀번호로 다시로그인하세요");
opener.location.href = "loginForm.jsp"
self.close();
</script>
<%}else{ %>
<script type="text/javascript">
alert("실패");
self.close();
</script>
<%}} %>