💡 핵심 요약 (TL;DR)
Servlet쇼핑몰7: 회원전체목록조회(관리자기능)의 동작 원리를 이해하고 실제 프로젝트에 적용하기 위한 실무 가이드다.
* 자바코드는 컴파일이 필요하지만 el태그가 훨씬 코드가 간결해진다을 적용할 수 있다.
main.jsp 생성
location.href='memberList.jsp' 에서 location.href='./MemberList.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='./MemberDelete.me'">
<% if(id != null){ if(id.equals("admin")){ %> <input type="button" value="회원전체목록(관리자용)" class="btn" onclick="location.href='./MemberList.me'"> <% } } %>
|
MemberFrontController.java의 doProcess()메서드 추가 코드 작성
1 2 3 4 5 6 7 8 9 10 11
| }else if(command.trim().equals("/MemberList.me")){ System.out.println("@@@@ Controller : 가상주소 /MemberList.me 실제주소: ./member/MemberList.jsp"); action = new MemberListAction(); try{ forward = action.execute(req, resp); } catch(Exception e){ e.printStackTrace(); } }
|
memberList.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 38 39 40 41 42 43 44
| <% //1. 로그인세션제어(관리자는 제외) String id = (String) session.getAttribute("id");//다운캐스팅 if(id == null || !id.equals("admin")){ //순서바뀌면 에러발생하므로 항상 null 먼저 비교할 것 response.sendRedirect("./LoginForm.me"); } //2. 회원정보를 저장 //request.setAttribute("memberList", memberList); List<MemberBean> memberList = (List<MemberBean>)request.getAttribute("memberList"); //다운캐스팅 %>
<h2>마이페이지</h2> <table border="1"> <tr> <td>아이디</td> <td>비밀번호</td> <td>이름</td> <td>나이</td> <td>성별</td> <td>이메일</td> <td>회원가입일</td> </tr> <%//반복문 //ArrayList는 가변배열이므로 length가 없고 size가 존재한다. //size()메서드는 배열의 요소의 갯수를 리턴 for(int i=0;i<memberList.size(); i++){ MemberBean mb = (MemberBean) memberList.get(i); %> <tr> <td><%=mb.getId() %></td> <td><%=mb.getPw() %></td> <td><%=mb.getName() %></td> <td><%=mb.getAge() %></td> <td><%=mb.getGender() %></td> <td><%=mb.getEmail() %></td> <td><%=mb.getReg_date() %></td> </tr> <% } %> </table> <input type="button" value="메인으로" class="btn" onclick="location.href='./Main.me'">
|
el표현식으로 위의 출력값을 나타내보자.
- 자바코드는 컴파일이 필요하지만 el태그가 훨씬 코드가 간결해진다
1 2 3
| <c:forEach items="${memberList}" var="mb"> <c:out value="${mb.email}"></c:out> </c:forEach> --%>
|
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
| <% //1. 로그인세션제어(관리자는 제외) String id = (String) session.getAttribute("id");//다운캐스팅 if(id == null || !id.equals("admin")){ //순서바뀌면 에러발생하므로 항상 null 먼저 비교할 것 response.sendRedirect("./LoginForm.me"); } //2. 회원정보를 저장 //request.setAttribute("memberList", memberList); List<MemberBean> memberList = (List<MemberBean>)request.getAttribute("memberList"); //다운캐스팅
%>
<h2 style="text-align: center;">회원목록</h2> <table border="1"> <tr> <td>아이디</td> <td>비밀번호</td> <td>이름</td> <td>나이</td> <td>성별</td> <td>이메일</td> <td>회원가입일</td> </tr>
<c:forEach items="${memberList}" var="mb"> <tr> <td><c:out value="${mb.email}"></c:out></td> <td><c:out value="${mb.pw}"></c:out></td> <td><c:out value="${mb.name}"></c:out></td> <td><c:out value="${mb.age}"></c:out></td> <td><c:out value="${mb.gender}"></c:out></td> <td><c:out value="${mb.email}"></c:out></td> <td><c:out value="${mb.reg_date}"></c:out></td> </tr> </c:forEach>
</table> <input type="button" value="메인으로" class="btn" onclick="location.href='./Main.me'">
|
MemberListAction.java 생성
- trim() : 가져 온 문자열 데이터의 앞뒤 공백을 제거 -> 정확도 향상
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
| public class MemberListAction implements Action {
@Override public ActionForward execute(HttpServletRequest req, HttpServletResponse resp) throws Exception { System.out.println("@@@@ Action: MemberListAction안의 execute() 실행됨"); req.setCharacterEncoding("UTF-8"); HttpSession session = req.getSession(); String id = (String) session.getAttribute("id"); ActionForward forward = new ActionForward(); if(id == null || id.equals("admin")){ forward.setPath("./MemberLogin.me"); forward.setRedirect(true); return forward; } MemberDAO mdao = new MemberDAO(); List<MemberBean> memberList = mdao.getMemberList(); req.setAttribute("memberList", memberList); forward.setPath("./member/memberList.jsp"); forward.setRedirect(false); return forward; } }
|
MemberDAO.java에 getMemberList()메서드 추가 코드 작성
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
|
public List<MemberBean> getMemberList(){ List<MemberBean> memberList = new ArrayList<MemberBean>();
try{ con = getCon(); sql = "select * from itwill_member"; pstmt = con.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()){ MemberBean mb = new MemberBean(); mb.setAge(rs.getInt("age")); mb.setEmail(rs.getString("email")); mb.setId(rs.getString("id")); mb.setName(rs.getString("name")); mb.setPw(rs.getString("pw")); mb.setGender(rs.getString("gender")); mb.setReg_date(rs.getTimestamp("reg_date")); memberList.add(mb); } System.out.println("memberList검색완료"); }catch(Exception e){ e.printStackTrace(); } return memberList; }
|
#TILITWILL(JAVA)