💡 핵심 요약 (TL;DR)
Servlet쇼핑몰5: 회원정보수정의 동작 원리를 이해하고 실제 프로젝트에 적용하기 위한 실무 가이드다.
* ` href속성 .me`로 작성작성을 적용할 수 있다.
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");//object를 string으로 다운캐스팅 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
| }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(); } }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(); } }else if(command.equals("/MemberUpdatePro.me")){ System.out.println("@@@@ Controller : 가상주소 MemberUpdatePro/.me 실제주소: ./member/updateForm.jsp"); 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() 실행됨"); req.setCharacterEncoding("UTF-8"); HttpSession session = req.getSession(); String id = (String) session.getAttribute("id"); ActionForward forward = new ActionForward(); if(id == null){ forward.setPath("./MemberLogin.me"); forward.setRedirect(true); return forward; } MemberDAO mdao = new MemberDAO();
MemberBean mb = mdao.getMember(id); req.setAttribute("mb", mb); forward.setPath("./member/updateForm.jsp"); forward.setRedirect(false); System.out.println("@@@@ 모델 : DB에서 회원정보 가져와서 저장 후 updateForm.jsp페이지이동"); return forward; } }
|
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() 실행됨"); req.setCharacterEncoding("UTF-8"); HttpSession session = req.getSession(); String id = (String) session.getAttribute("id"); ActionForward forward = new ActionForward(); if(id == null){ forward.setPath("./MemberLogin.me"); forward.setRedirect(true); return forward; } 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); MemberDAO mdao = new MemberDAO(); int result = mdao.updateMember(mb); if(result == 0){ 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; }else if(result == -1){ 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; } 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
| public int updateMember(MemberBean mb){ int result = -1;
try { con = getCon(); sql = "select pw from itwill_member where id=?"; pstmt = con.prepareStatement(sql); pstmt.setString(1, mb.getId()); rs = pstmt.executeQuery(); if(rs.next()){ if(mb.getPw().equals(rs.getString("pw"))){ 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()); pstmt.executeUpdate(); System.out.println("회원정보수정성공"); result = 1; }else{ result = 0; System.out.println("아디일치,비번불일치 - 회원정보수정실패"); } }else{ result = -1; System.out.println("존재하지않는아이디 - 회원정보수정실패"); } } catch (Exception e) { e.printStackTrace(); } finally{ closeDB(); } return result; }
|
#TILITWILL(JAVA)