[ITWILL : JSP]Javabean 5 : 관리자만 확인할 수 있는 회원목록페이지만들기

ITWILL학원 : 25강 JSP기초 BY 정규태강사

1. 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
<%//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("loginForm.jsp");
}
%>
<h2><%=id %>님 환영합니다.</h2>
<%=name %><br>

<input type="button" value="회원정보조회" onclick="location.href='memberinfo.jsp'">
<input type="button" value="회원정보수정" onclick="location.href='updateForm.jsp'">
<input type="button" value="로그아웃" onclick="location.href='logout.jsp'">
<input type="button" value="회원탈퇴" onclick="location.href='deleteForm.jsp'">

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

이때 관리자메뉴확인 if조건문을 아래 한줄짜리 코드로 바꿔보자

  • 잘 실행될까?
1
2
3
4
5
6
7
8
<!-- 관리자일때만 메뉴확인가능 -->
<%
if(id.equals("admin") && id != null){
%>
<input type="button" value="회원전체목록(관리자용)" onclick="location.href='memberList.jsp'">
<%
}
%>
  • NOPE : 코드는 왼쪽에서부터 순서대로 실행되기때문

  • 아래코드처럼 순서만 바꾼다면 잘 실행될까?

1
2
3
4
5
6
7
8
<!-- 관리자일때만 메뉴확인가능 -->
<%
if(id != null && id.equals("admin")){
%>
<input type="button" value="회원전체목록(관리자용)" onclick="location.href='memberList.jsp'">
<%
}
%>
  • YES! 이제 잘 실행된다

2. 회원전체페이지 출력하는 memberList.jsp 생성

DB에서 모든 회원의 정보를 가져와서 페이지에 출력한다
이때, 관리자는 목록에 제외되어야한다.

순서

  1. 로그인세션제어(관리자는 제외)
  2. DAO객체생성
  3. 회원목록을 가져오는 메서드 사용
    • ArrayList는 가변배열이므로 length가 없고 size가 존재한다.
    • size()메서드는 배열의 요소의 갯수를 리턴한다.
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
<%
//1. 로그인세션제어(관리자는 제외)
String id = (String) session.getAttribute("id");//다운캐스팅
if(id == null || !id.equals("admin")){ //순서바뀌면 에러발생하므로 항상 null 먼저 비교할 것
response.sendRedirect("loginForm.jsp");
}
//2. DAO객체생성
MemberDAO mdao = new MemberDAO();

//3. 회원목록을 가져오는 메서드 사용
mdao.getMemberList();//아래 4번에서 DAO객체에 만들 메서드
ArrayList memberList = mdao.getMemberList();
%>

<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>
%>

3. DAO객체에 getMemberList()메서드 생성

  1. DB연결메서드 불러오기
  2. SQL & pstmt 생성
  3. 실행 -> rs저장
  4. 데이터처리 :
    • 4-1. 회원이 몇명인지 알지 못하므로 가변길이 배열을 생성 : 배열안에 자바빈을 넣어서 가져 갈 예정이다. 근데 데이터갯수를 몰라서 배열을 못만든다. 따라서 데이터형태 ArrayList로 가져갈거다.
      • ArrayList<E> 여기서 e를 제네릭타입이라고 칭함
      • ArrayList<> 다이아몬드 오퍼레이터라고 칭함
      • mb는 MemberBean데이터타입인데 add(Object)가 들어가야한다 따라서 업캐스팅 (MemberBean -> Object)해서 넣어야한다.
      • add(mb)를 빼서 쓸때는 다운캐스팅을 해야지 사용할 수 있다.
    • 4-2. DB테이블 결과 1행의 정보 모두를 MemberBean데이터타입으로 저장
    • 4-3. 1행정보를 배열 한칸에 저장
  5. finally 로 자원해제
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
public ArrayList getMemberList(){

//가변길이 배열 생성
ArrayList memberList = new ArrayList();

try {
//8-1. DB연결메서드 불러오기
con = getCon();
//8-2. SQL & pstmt 생성
sql = "select * from itwill_member";
pstmt = con.prepareStatement(sql);
//8-3. 실행 -> rs저장
rs = pstmt.executeQuery();
//8-4. 데이터처리 :
//8-4-1. DB테이블 결과 1행의 정보 모두를 MemberBean데이터타입으로 저장
//8-4-2. 1행정보를 배열 한칸에 저장
while(rs.next()){
MemberBean mb = new MemberBean();//1.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.setReg_date(rs.getTimestamp("reg_date"));
//여기까지가 한 행의 데이터를 변수mb에 저장한 것임. while로 모든 행을 반복해서 변수mb에 저장

//가변배열(ArrayList)에 위의 데이터mb를 저장
//즉 배열 한 칸에 회원 1명의 정보를 저장함.
memberList.add(mb); //업캐스팅 (MemberBean -> Object)
//System.out.println(memberList); 배열한 칸에 잘 들어갔는지 콘솔로 확인
}

System.out.println("정보검색완료");
//System.out.println(memberList);

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
closeDB();
}
return memberList;
}