💡 핵심 요약 (TL;DR)
Servlet쇼핑몰5: 회원정보조회의 동작 원리를 이해하고 실제 프로젝트에 적용하기 위한 실무 가이드다.
- session에 담아써도 괜찮지만 데이터가 필요없는 순간에도 session 이 살아있는 한 데이터를 가지고 다녀야할수있다.
main.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 <%//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=''" > <input type ="button" value ="로그아웃" class ="btn" onclick ="location.href='./MemberLogout.me'" > <input type ="button" value ="회원탈퇴" class ="btn" onclick ="location.href=''" > <% if(id != null){ if(id.equals("admin")){ %> <input type ="button" value ="회원전체목록(관리자용)" class ="btn" onclick ="location.href=''" > <% } } %>
MemberFrontController.java의 doProcess()메서드 추가 코드작성
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 }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(); } } if (forward != null ){ System.out.println("@@@페이지이동@@@" ); if (forward.isRedirect()){ System.out.println("sendRedirect방식의 이동" +forward.getPath()); resp.sendRedirect(forward.getPath()); }else { System.out.println("RequestDispatcher방식의 이동" +forward.getPath()); RequestDispatcher dis = req.getRequestDispatcher(forward.getPath()); dis.forward(req, resp); } } }
MemberInfoAction.java 생성
우선순위 1. DB에서 정보가져오기
2. DB정보를 가지고 `.jsp`페이지로 이동
순서 1. 세션값을 가져오기
2. DAO객체 생성하여 DB정보가져오기 (MemberBean)
3. `.java` --request객체로 데이터를 전달--> `.jsp`
- session에 담아써도 괜찮지만 데이터가 필요없는 순간에도 session 이 살아있는 한 데이터를 가지고 다녀야할수있다.
- 따라서 request객체를 사용하는 것이 더 올바르다
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 public class MemberInfoAction implements Action { @Override public ActionForward execute (HttpServletRequest req, HttpServletResponse resp) throws Exception { System.out.println("@@@@ Action: MemberInfoAction안의 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("memberBean" , mb); forward.setPath("./member/memberinfo.jsp" ); forward.setRedirect(false ); return forward; } }
MemberInfo.jsp 생성
jsp표현식을 사용해도되고 EL표현식으로 사용해서 가져와도 됨.
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 <%//회원정보를 DB에서 가져와서 페이지에 출력 //1. 한글설정 & 변수생성 String id = (String) session.getAttribute("id");//object이기에 형변환필수 //1-1.id값확인 -없으면 로그인페이지로 이동 if(id == null){ response.sendRedirect("./MemberLogin.me"); } //2. 멤버DAO객체 생성 -> 회원정보 가져오는 메서드생성 MemberBean mb = (MemberBean) request.getAttribute("memberBean"); //3. 데이터처리 : 테이블로 표현 if(mb != null){ %> <h2 > 마이페이지</h2 > <table border ="1" > <tr > <td > 아이디</td > <td > ${memberBean.id }</td > </tr > <tr > <td > 비밀번호</td > <td > ${memberBean.pw }</td > </tr > <tr > <td > 이름</td > <td > ${memberBean.name }</td > </tr > <tr > <td > 나이</td > <td > ${memberBean.age }</td > </tr > <tr > <td > 성별</td > <td > ${memberBean.gender }</td > </tr > <tr > <td > 이메일</td > <td > ${ requestScope.memberBean.email }</td > </tr > <tr > <td > 회원가입일</td > <td > ${memberBean.reg_date }</td > </tr > </table > <% } %> <hr > <input type ="button" value ="뒤로가기" onclick ="location.href='./Main.me'" >
MemberDAO.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 public MemberBean getMember (String id) { MemberBean mb = null ; try { con = getCon(); sql = "select * from itwill_member where id=?" ; pstmt = con.prepareStatement(sql); pstmt.setString(1 , id); rs = pstmt.executeQuery(); if (rs.next()){ mb = new MemberBean (); mb.setId(rs.getString("id" )); mb.setPw(rs.getString("pw" )); mb.setName(rs.getString("name" )); mb.setAge(rs.getInt("age" )); mb.setEmail(rs.getString("email" )); mb.setGender(rs.getString("gender" )); mb.setReg_date(rs.getTimestamp("reg_date" )); } System.out.println("@@@@ DAO : 회원정보저장완료" +mb); }catch (Exception e) { e.printStackTrace(); } finally { closeDB(); } return mb; }
#TIL ITWILL(JAVA)