Servlet쇼핑몰5: 회원정보수정

main.jsp 생성

  • <input type="button" value="회원정보수정" class="btn" onclick="location.href='./MemberUpdate.me'"> href속성 .me로 작성작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%//1.한글처리, 파라미터 
request.setCharacterEncoding("UTF-8");
String id = (String) session.getAttribute("id");//objectstring으로 다운캐스팅
String name = request.getParameter("name");
//1-1. id없이는 진입불가, id없는 경우 로그인페이지로 이동. 가상주소로 이동
if(id == null){
response.sendRedirect("./MemberLogin.me");
}
%>

<h3>아이디: <%=id %></h3>
<h3>아이디(session-EL표현식) : ${ sessionScope.id } </h3>

<input type="button" value="ITWILL게시판가기" class="btn" onclick="location.href='../board/boardList.jsp'">
<input type="button" value="회원정보조회" class="btn" onclick="location.href='./MemberInfo.me'">
<input type="button" value="회원정보수정" class="btn" onclick="location.href='./MemberUpdate.me'">
<input type="button" value="로그아웃" class="btn" onclick="location.href='./MemberLogout.me'">
<input type="button" value="회원탈퇴" class="btn" onclick="location.href='deleteForm.jsp'">

<!-- 관리자일때만 메뉴확인가능 -->
<% if(id != null){
if(id.equals("admin")){ %>
<input type="button" value="회원전체목록(관리자용)" class="btn" onclick="location.href='memberList.jsp'">
<%
}
}
%>




MemberFrontController.java의 doProcess()메서드 추가 코드작성

  • 회원정보수정페이지에 DB데이터 가져오기
  • 회원정보수정페이지에서 비밀번호 일치하면 DB업데이트하기
  • 위의 두가지를 해야한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
	//13. 회원정보조회
}else if(command.equals("/MemberInfo.me")){
System.out.println("@@@@ Controller : 가상주소 /MemberInfo.me 실제주소: ./member/memberinfo.jsp");
action = new MemberInfoAction();
try {
forward = action.execute(req, resp);
} catch (Exception e) {
e.printStackTrace();
}
//14. 회원정보 수정
//회원정보 수정의 경우 DB에서 정보를 불러오면서 또 DB에 다시 정보를 수정해야한다.
//14-1.DB에서 정보를 가지고와야함
}else if(command.equals("/MemberUpdate.me")){
System.out.println("@@@@ Controller : 가상주소 MemberUpdate/.me 실제주소: ./member/updateForm.jsp");
action = new MemberUpdateAction();
try {
forward = action.execute(req, resp);
} catch (Exception e) {
e.printStackTrace();
}
//14-2.비밀번호가 일치하면 회원정보를 수정
}else if(command.equals("/MemberUpdatePro.me")){
System.out.println("@@@@ Controller : 가상주소 MemberUpdatePro/.me 실제주소: ./member/updateForm.jsp");
//MemberUpdateProAction()객체생성
action = new MemberUpdateProAction();
try {
forward = action.execute(req, resp);
} catch (Exception e) {
e.printStackTrace();
}

}




MemberUpdateAction.java 생성

  • 회원정보가져오는 메서드 getMember()이미있으므로 생성 아닌 호출
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class MemberUpdateAction implements Action {

@Override
public ActionForward execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
System.out.println("@@@@ Action: MemberUpdateAction안의 execute() 실행됨");
//1. 한글처리
req.setCharacterEncoding("UTF-8");
//2. 세션값 제어(id) : 로그인유무 확인
HttpSession session = req.getSession();
String id = (String) session.getAttribute("id");

ActionForward forward = new ActionForward();
if(id == null){
//model2방식이므로 req.sendRedirect()가 아닌 ActionForward방식으로 이동
forward.setPath("./MemberLogin.me");
forward.setRedirect(true);
return forward;
}

//3.MemberDAO객체생성
MemberDAO mdao = new MemberDAO();

//4.회원정보가져오는 메서드 getMember()이미있으므로 생성 아닌 호출
MemberBean mb = mdao.getMember(id);

//5.회원정보를 req영역에 저장 (req안되면 session이나 application에 담아야함)
req.setAttribute("mb", mb); //되도록이면 key명과 value명 같이하면 안 헷갈림

//6.페이지이동(./member/updateForm.jsp) //.은 webcontent라고 생각할것
forward.setPath("./member/updateForm.jsp");
forward.setRedirect(false);//주소는 그대로인데 화면은 jsp이여야함 forward방ㅣㄱ
System.out.println("@@@@ 모델 : DB에서 회원정보 가져와서 저장 후 updateForm.jsp페이지이동");
return forward;
}//end of execute

}




updateForm.jsp 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%//1.로그인여부체크 (로그인x->로그인페이지로이동)
request.setCharacterEncoding("UTF-8");
String id = (String) session.getAttribute("id");//object이기에 형변환필수
if(id == null){
response.sendRedirect("./MemberLogin.me");
}
//2. 드라이브로드 & 디비연결 : 로그인한 사용자의 정보를 가져오기 => MemberUpdateAction.java에서 처리
MemberBean mb = (MemberBean) request.getAttribute("mb");

System.out.println("@@@@ 뷰 : 액션페이지에서 정보 전달받음"+mb);
//3. 데이터처리 : 테이블형식으로 출력
//4. 비밀번호를 입력받은 뒤 수정하기 ->updatePro.jsp에서 진행
%>
<fieldset>
<legend>회원정보수정</legend>
<form action="./MemberUpdatePro.me" method="post" name="fr">
아이디 <input type="text" name="id" value="<%=mb.getId() %>" readonly><br>
비밀번호 <input type="password" name="pw" placeholder="비밀번호를 입력하세요" required><br>
이름 <input type="text" name="name" value="<%=mb.getName() %>"><br>
나이 <input type="text" name="age" value="<%=mb.getAge() %>"><br>
성별
<input type="radio" name="gender" value="여"
<% if(mb.getGender().equals("여")){ %>
checked
<%}%>
> 여성
<input type="radio" name="gender" value="남"
<% if(mb.getGender().equals("남")){ %>
checked
<%}%>
> 남성<br>
이메일 <input type="text" name="email" value="<%=mb.getEmail() %>"><br>
<input type="submit" class="btn" value="회원정보수정하기">
</form>
</fieldset>

<button class="btn" onclick="location.href='./Main.me'">뒤로가기</button>




MemberUpdateProAction.java 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
public class MemberUpdateProAction implements Action {

@Override
public ActionForward execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
System.out.println("@@@@ 모델: MemberUpdateProAction안의 execute() 실행됨");
//1. 한글처리
req.setCharacterEncoding("UTF-8");
//2. 세션값 제어(id) : 로그인유무 확인
HttpSession session = req.getSession();
String id = (String) session.getAttribute("id");

ActionForward forward = new ActionForward();
if(id == null){
//model2방식이므로 req.sendRedirect()가 아닌 ActionForward방식으로 이동
forward.setPath("./MemberLogin.me");
forward.setRedirect(true);
return forward;
}
//3.전달되는 정보 모두 저장
MemberBean mb = new MemberBean();
mb.setAge(Integer.parseInt(req.getParameter("age")));
mb.setEmail(req.getParameter("email"));
mb.setGender(req.getParameter("gender"));
mb.setId(req.getParameter("id"));
mb.setName(req.getParameter("name"));
mb.setPw(req.getParameter("pw"));
System.out.println("@@@@ Action : 전달받은 정보인 MemberBean객체 확인"+mb);

//4.MemberDAO객체생성 > updateMember()생성
MemberDAO mdao = new MemberDAO();
int result = mdao.updateMember(mb);

//5.페이지이동(js사용)
if(result == 0){ //로그인 비번오류
//자바스크립트사용하여 alert()창띄우기
resp.setContentType("text/html; charset=UTF-8");
PrintWriter out = resp.getWriter();
out.print("<script>");
out.print("alert('비밀번호오류');");
out.print("history.back();");
out.print("</script>");
System.out.println("@@@@ 모델 : 자바스크립트 페이지이동");
//자원해제
out.close();
return null; //null이란 Controller에서 페이지 이동하지않겠다는 의미
}else if(result == -1){
//자바스크립트사용하여 alert()창띄우기
resp.setContentType("text/html; charset=UTF-8");
PrintWriter out = resp.getWriter();
out.print("<script>");
out.print("alert('존재하지 않는 아이디입니다');");
out.print("history.back();");
out.print("</script>");
System.out.println("@@@@ 모델 : 자바스크립트 페이지이동");
//자원해제
out.close();
return null; //null이란 Controller에서 페이지 이동하지않겠다는 의미
}
//4-1. 정상 로그인처리
//result == 1 //정상 로그인처리
//자바스크립트사용하여 alert()창띄우기
resp.setContentType("text/html; charset=UTF-8");
PrintWriter out = resp.getWriter();
out.print("<script>");
out.print("alert('회원정보 수정이 정상 처리되었습니다');");
out.print("location.href='./Main.me'");
out.print("</script>");
System.out.println("@@@@ 모델 : 자바스크립트 페이지이동");
//자원해제
out.close();

return null;
}
}




MemberDAO.java의 updateMember()메서드 추가 코드 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//6. 회원정보 수정 메서드
public int updateMember(MemberBean mb){
int result = -1;

try {
//6-1. 드라이브로드 디비연결
con = getCon();
//6-2. SQL 구문작성 & pstmt 생성
sql = "select pw from itwill_member where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, mb.getId());
//6-3. 실행 -> rs저장
rs = pstmt.executeQuery();
//6-4. 데이터처리 : DB에 있는 회원인 경우 수정 아닌 경우 에러
if(rs.next()){//DB에 있는 회원
if(mb.getPw().equals(rs.getString("pw"))){//비번일치
//6-5. 비번일치하면 정보수정 작업
//6-5-1. SQL 구문작성 & pstmt 생성
sql = "update itwill_member set name=?,age=?,gender=?,email=? "
+ "where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, mb.getName());
pstmt.setInt(2, mb.getAge());
pstmt.setString(3, mb.getGender());
pstmt.setString(4, mb.getEmail());
pstmt.setString(5, mb.getId());
//6-5-2. 실행
pstmt.executeUpdate();
System.out.println("회원정보수정성공");
result = 1;
}else{
result = 0;
System.out.println("아디일치,비번불일치 - 회원정보수정실패");
}
}else{ //DB에 없는 회원
result = -1;
System.out.println("존재하지않는아이디 - 회원정보수정실패");
}
} catch (Exception e) {
e.printStackTrace();
} finally{
closeDB();
}
return result;
}//updateMember닫힘