JSP_4강_1_Member테이블_DAO_전체 회원 목록

열라뽕따히·2024년 3월 18일

JSP

목록 보기
18/43

JSP_3강과 비슷한 방식으로 전체 회원 목록창을 띄워보자!

이전에는 DAO 객체를 생성하여 새로운 DB연동 객체를 만들었다면
이번에는 DAO가 연동 될 메서드를 만들어 호출하는 방식으로 작성해보자!



Java Resources 패키지에 com.member.model, com.member.controller 패키지 두 개를 생성

com.member.model 패키지에 MemberDTO 클래스 생성


=============================코드=============================

package com.member.model;

// DB상의 member 테이블의 컬러명과 유사하게 멤버변수 선언

public class MemberDTO {

		private int num;
		private String memid;
		private String memname;
		private String pwd;
		private int age;
		private int mileage;
		private String job;
		private String addr;
		private String regdate;
		
		
		public int getNum() {
			return num;
		}
		
		public void setNum(int num) {
			this.num = num;
		}
		
		public String getMemid() {
			return memid;
		}
		
		public void setMemid(String memid) {
			this.memid = memid;
		}
		
		public String getMemname() {
			return memname;
		}
		
		public void setMemname(String memname) {
			this.memname = memname;
		}
		
		public String getPwd() {
			return pwd;
		}
		
		public void setPwd(String pwd) {
			this.pwd = pwd;
		}
		
		public int getAge() {
			return age;
		}
		
		public void setAge(int age) {
			this.age = age;
		}
		
		public int getMileage() {
			return mileage;
		}
		
		public void setMileage(int mileage) {
			this.mileage = mileage;
		}
		
		public String getJob() {
			return job;
		}
		
		public void setJob(String job) {
			this.job = job;
		}
		
		public String getAddr() {
			return addr;
		}
		
		public void setAddr(String addr) {
			this.addr = addr;
		}
		
		public String getRegdate() {
			return regdate;
		}
		
		public void setRegdate(String regdate) {
			this.regdate = regdate;
		}
		
		
}



MemberDAO 클래스 생성


=============================코드=============================

package com.member.model;

import java.sql.*;

public class MemberDAO {
	
	// DB와 연결하는 객체
	Connection con = null;
	
	// DB에 SQL문을 전송하는 객체
	PreparedStatement pstmt = null;
	
	// SQL문을 실행한 후에 결과값을 가지고 있는 객체
	ResultSet rs = null;
	
	// SQL문을 저장할 객체
	String sql = null;
	
	// MemberDAO 객체를 싱글턴 방식으로 만들어보자
	// 1단계 : MemberDAO 객체를 정적(static) 멤버로 선언을 해주어야 함
	private static MemberDAO instance = null;  // instance 는 참조변수
	
	// 2단계 : 싱글턴 방식으로 객체를 만들기 위해서는 
	// 			우선적으로 기본생성자의 접근지정자를 public이 아닌 private으로 변경해주어야 함
	//				즉, 외부에서 직접적으로 기본생성자에 접근하여 호출하지 못하도록 하는 방법
	
	private MemberDAO() { }  // 기본 생성자
	
	// 3단계 : 기본 생성자 대신에 싱글턴 객체를 return 해주는 getInstance() 메서드를 만들어서
	// 			해당 getInstance() 메서드를 외부에서 접근이 가능하도록 해주면 됨
	public static MemberDAO getInstance() {
		
		if(instance == null) {
			instance = new MemberDAO();
		}
		
		return instance;
		
	}  // getInstance() 메서드 end
	
	
	// DB 연동 작업을 하는 메서드
	public void openConn() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "goott";
		String password = "99229922";
		
		
		try {
			// 1단계 : 오라클 드라이버를 메모리로 로딩 작업 진행
			Class.forName(driver);
			
			// 2단계 : 오라클 DB와 연결 작업 진행
			con = DriverManager.getConnection(url, user, password);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}  // openConn() 메서드 end
	
	
	// DB에 연결되어 있던 자원을 종료하는 메서드
	public void closeConn(ResultSet rs, PreparedStatement pstmt, Connection con) {
		
			try {
				if(rs != null) {  	rs.close(); }
				if(pstmt != null) {   pstmt.close(); }
				if(con != null) {  	con.close(); }
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
		
	}
	
	// DB에 연결되어 있던 자원을 종료하는 메서드
	public void closeConn(PreparedStatement pstmt, Connection con) {
		
		try {
			if(pstmt != null) {  	pstmt.close(); }
			if(con != null) {  	con.close(); }
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	
	}

}



main.jsp에서 실행을 해보자


=============================코드=============================

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

		<div align = "center">
			<hr width = "30%" color = blue>
				<h3>Member 테이블 메인 페이지</h3>
			<hr width = "30%" color = blue>
			<br/> <br/>
			
			<%-- request.getContextPath() : 현재 프로젝트명을 문자열로 반환해주는 메서드 --%>
																		<%-- select는 별칭 --%>
			<a href = "<%=request.getContextPath() %>/select.go">[전체 회원 목록]</a>
		</div>

</body>
</html>

=============================실행=============================




com.member.controller 패키지에 select.go 로 mapping 된 서블릿 생성


=============================코드=============================

package com.member.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.member.model.MemberDAO;


@WebServlet("/select.go")
public class SelectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
    public SelectServlet() {
        super();
        
    }
	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 요청 : 전체 회원 목록을 화면에 보여달라고 클라이언트가 요청
		// 응답 : DB에서 member 테이블의 회원 전체 리스트를 조회하여 
		// 		 전체 회원을 view page로 이동시키는 비지니스 로직
		
		// 1단계 : DAO 객체와 연동
		MemberDAO dao = MemberDAO.getInstance();  // 싱글턴 방식으로 객체가 생성



MemberDAO 클래스로 다시 가자!


=============================코드=============================

package com.member.model;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class MemberDAO {
	
	// DB와 연결하는 객체
	Connection con = null;
	
	// DB에 SQL문을 전송하는 객체
	PreparedStatement pstmt = null;
	
	// SQL문을 실행한 후에 결과값을 가지고 있는 객체
	ResultSet rs = null;
	
	// SQL문을 저장할 객체
	String sql = null;
	
	// MemberDAO 객체를 싱글턴 방식으로 만들어보자
	// 1단계 : MemberDAO 객체를 정적(static) 멤버로 선언을 해주어야 함
	private static MemberDAO instance = null;  // instance 는 참조변수
	
	// 2단계 : 싱글턴 방식으로 객체를 만들기 위해서는 
	// 			우선적으로 기본생성자의 접근지정자를 public이 아닌 private으로 변경해주어야 함
	//				즉, 외부에서 직접적으로 기본생성자에 접근하여 호출하지 못하도록 하는 방법
	
	private MemberDAO() { }  // 기본 생성자
	
	// 3단계 : 기본 생성자 대신에 싱글턴 객체를 return 해주는 getInstance() 메서드를 만들어서
	// 			해당 getInstance() 메서드를 외부에서 접근이 가능하도록 해주면 됨
	public static MemberDAO getInstance() {
		
		if(instance == null) {
			instance = new MemberDAO();
		}
		
		return instance;
		
	}  // getInstance() 메서드 end
	
	
	// DB 연동 작업을 하는 메서드
	public void openConn() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "goott";
		String password = "99229922";
		
		
		try {
			// 1단계 : 오라클 드라이버를 메모리로 로딩 작업 진행
			Class.forName(driver);
			
			// 2단계 : 오라클 DB와 연결 작업 진행
			con = DriverManager.getConnection(url, user, password);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}  // openConn() 메서드 end
	
	
	// DB에 연결되어 있던 자원을 종료하는 메서드
	public void closeConn(ResultSet rs, PreparedStatement pstmt, Connection con) {
		
			try {
				if(rs != null) {  	rs.close(); }
				if(pstmt != null) {   pstmt.close(); }
				if(con != null) {  	con.close(); }
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
		
	}
	
	// DB에 연결되어 있던 자원을 종료하는 메서드
	public void closeConn(PreparedStatement pstmt, Connection con) {
		
		try {
			if(pstmt != null) {  	pstmt.close(); }
			if(con != null) {  	con.close(); }
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	
	}
    
// -----------------여기서부터 다시 작성-----------------
	
	// member 테이블에서 회원 전체 목록을 조회하는 메서드
	public List<MemberDTO> getMemberList() {
		List<MemberDTO> list = new ArrayList<MemberDTO>();
        
	// 1단계와 2단계를 같이 진행! : 오라클 드라이버 로딩 및 데이터베이스와 연결 진행
		openConn();
		
		try {
			// 3단계 : DB에 전송할 SQL문을 작성
			sql = "select * from member order by memno desc";
			
			// 4단계 : SQL문을 DB 전송 객체에 인자로 전달
			pstmt = con.prepareStatement(sql);
			
			// 5단계 : SQL문을 DB에 전송 및 실행
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				MemberDTO dto = new MemberDTO();
				
				dto.setNum(rs.getInt("memno"));
				dto.setMemid(rs.getString("memid"));
				dto.setMemname(rs.getString("memname"));
				dto.setPwd(rs.getString("mempwd"));
				dto.setAge(rs.getInt("age"));
				dto.setMileage(rs.getInt("mileage"));
				dto.setJob(rs.getString("job"));
				dto.setAddr(rs.getString("addr"));
				dto.setRegdate(rs.getString("regdate"));
				
				list.add(dto);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 6단계 : DB와 연결되어 있던 자원 종료
			closeConn(rs, pstmt, con);
		}
		return list;
	}

}



다시 SelectServlet 으로 가서 나머지 작성하자


=============================코드=============================

package com.member.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.member.model.MemberDAO;
import com.member.model.MemberDTO;


@WebServlet("/select.go")
public class SelectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
    public SelectServlet() {
        super();
        
    }
	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 요청 : 전체 회원 목록을 화면에 보여달라고 클라이언트가 요청
		// 응답 : DB에서 member 테이블의 회원 전체 리스트를 조회하여 
		// 		 전체 회원을 view page로 이동시키는 비지니스 로직
		
		// 1단계 : DAO 객체와 연동
		MemberDAO dao = MemberDAO.getInstance();  // 싱글턴 방식으로 객체가 생성
		
 // -----------------여기서부터 작성-----------------
		// 2단계 : member 테이블의 회원 전체 목록을 조회
		List<MemberDTO> memberList = dao.getMemberList();
		
		// 3단계 : DB에서 가져온 회원 전체 목록을 view page로 이동시켜야 함 => 바인딩 작업
		request.setAttribute("List", memberList);
		
		// 4단계 : 페이지 이동 경로 설정 및 페이지 이동 진행
		request.getRequestDispatcher("view/member_list.jsp").forward(request, response);
		
	}

}



wepapp 폴더에 view 폴더 생성 후 member_list 생성


=============================코드=============================

<%@page import="com.member.model.MemberDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	List<MemberDTO> members = (List<MemberDTO>)request.getAttribute("List");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<div align = "center">
		<hr width = "30%" color = "red">
			<h3>Member 테이블 전체 회원 목록 리스트</h3>
		<hr width = "30%" color = "red">
		<br/> <br/>
		
		<table border = "1" width = "400">
			<tr>
				<th>회원 No.</th> <th>회원 이름</th> <th>회원 직업</th>
				<th>회원 등록일</th> <th>상세정보</th>
			</tr>
			
			<%
				if(members.size() != 0) {     // 데이터가 있다면
					for(int i = 0; i < members.size(); i ++){
						
						MemberDTO member = members.get(i);
			%>		
				<tr>
					<td> <%=member.getNum() %> </td>
					<td> <%=member.getMemname() %> </td>
					<td> <%=member.getJob() %> </td>
					<td> <%=member.getRegdate().substring(0,10) %> </td>
					<td> 
						<input type = "button" value = "상세정보" onclick = "loaction.href='content.go?num=<%=member.getNum() %>'">
					</td>
				</tr>
			<%    } // for문의 end
				}else {
					// 회원 리스트가 없는 경우
			%>		
				<tr>
					<td colspan = "2" align = "center">
						<h3>회원 전체 목록이 없습니다...</h3>
					</td>
				</tr>
			<%	}
			%>
		
		</table>
        <br/> <br/>
		
		<input type = "button" value = "회원추가" onclick = "location.href='view/member_insert.jsp'">
		
		<br/> <br/>
		
		<%-- 검색 처리 --%>
		<form method = "post" action = "<%=request.getContextPath() %>/search.go">
		
			<select name = "field">
				<option value = "id">아이디</option>
				<option value = "name">이름</option>
				<option value = "job">직업</option>
				<option value = "addr">주소</option>
			</select>
		
			<input type = "text" name = "keyword">&nbsp;&nbsp;
			<input type = "submit" value = "검색">
		</form>
	
	</div>

</body>
</html>



main.jsp에 가서 실행해보자!


=============================실행=============================

전체 회원 목록 클릭!

0개의 댓글