2024-12-19





====================================== MemberDTO.jave ======================================
package model;
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.jave ======================================
package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
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;
// 2단계 : 싱글턴 방식으로 객체를 만들기 위해서는 기본 생성자의 접근지정자를 public
// 에서 private 으로 변경해 주어야 함. 즉, 외부에서 직접적으로 기본 생성자에
// 접근하여 객체를 생성하거나 호출하지 못 하도록 해야 함.
private MemberDAO() {} // 기본 생성자
// 3단계 : 기본 생성자 대신에 싱글턴 객체를 return 해주는 getInstance() 라는
// 메서드를 만들어서 해당 getInstance() 메서드를 외부에서 접근이 가능하도록
// 해 주면 됨.
public static MemberDAO getInstance() {
if (instance == null) {
instance = new MemberDAO();
}
return instance;
} // getInstance() 메서드 end
// DB연동 작업을 하는 메서드(DBCP 방식 연동)
public void openConn() {
try {
// 1단계 : JNDI 서버 객체 생성
// 자바의 네이밍 서비스(JNDI)에서 이름과 실제 객체를 연결해 주는 개념이 Context 객체이며,
// InitialContext 객체는 네이밍 서비스를 이용하기 위한 시작점이 됨.
Context init = new InitialContext();
// 2단계 : Context 라는 객체를 얻어와야 함.
// "java:comp/env" 라는 이름의 인수로 Context 객체를 얻어옴. "java:comp/env" 는
// 현재 웹 애플리케이션에서 네이밍 서비스를 이용시 루트 디렉토리라고 생각하면 됨. 즉, 현재
// 웹 애플리케이션이 사용할 수 있는 모든 자원은 "java:comp/env" 아래에 위치하게 됨.
Context ctx = (Context)init.lookup("java:comp/env");
// 3단계 : lookup() 메서드를 이용하여 매칭되는 커넥션을 찾게 됨.
// "java:comp/env" 아래에 위치한 "jdbc/myoracle" 이라는 자원을 얻어오게 됨. 이 자원이 바로
// 데이터소스(커넥션 풀)임. 여기서 "jdbc/myoracle" 은 context.xml 파일에 추가했던 <Resource>
// 태그 안에 있던 name 속성의 값임.
DataSource ds = (DataSource)ctx.lookup("jdbc/myoracle");
// 4단계 : DataSource 객체를 이용하여 커넥션을 하나 가져오면 됨.
con = ds.getConnection();
} catch (Exception e) {
// TODO Auto-generated catch block
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // closeConn() 메서드 end
// DB에 연결되어 있던 자원 종료하기
public void closeConn(PreparedStatement pstmt, Connection con) {
try {
if (pstmt != null) pstmt.close();
if (con != null) con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // closeConn() 메서드 end
// member10 테이블에서 회원 전체 목록을 조회하는 메서드
public List<MemberDTO> getMemberList() {
List<MemberDTO> list = new ArrayList<MemberDTO>();
try {
// 1~2단계 : 오라클 드라이버 로딩 및 데이터베이스 연동 작업 진행
openConn();
// 3단계 : 데이터베이스에 전송할 SQL문 작성
sql = "select * from member10 order by num desc";
pstmt = con.prepareStatement(sql);
// 4단계 : SQL문을 데이터베이스에 전송 및 실행.
rs = pstmt.executeQuery();
while (rs.next()) {
MemberDTO dto = new MemberDTO();
dto.setNum(rs.getInt("num")); // 여기서 "num"은 컬럼명
dto.setMemid(rs.getString("memid"));
dto.setMemname(rs.getString("memname"));
dto.setPwd(rs.getString("pwd"));
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) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
// 5단계 : 데이터베이스와 연결되어 있던 자원 종료하기.
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (con != null) con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return list;
} // getMemberList() 메서드 end
}
====================================== 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>MEMBER10 테이블 메인 페이지</h3>
<hr width="30%" color="blue">
<br> <br>
<%-- request.getContextPath() : 현재 프로젝트명을 문자열로 반환해 주는 메서드. url에서 확인 가능 --%>
<a href="<%= request.getContextPath() %>/select.go">[전체 회원 목록]</a>
</div>
</body>
</html>
====================================== SelectServlet.jave ======================================
package controller;
import java.io.IOException;
import java.util.List;
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 model.MemberDAO;
import model.MemberDTO;
@WebServlet("/select.go")
public class SelectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public SelectServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 요청 : 전체 회원 목록을 화면에 보여달라고 클라이언트가 요청.
// 응답 : DB에서 member10 테이블의 회원 전체 리스르를 조회하여 전체 회원을 view page로 이동시키는 비지니스 로직.
// 1단계 : DB와 연동 작업 진행.
MemberDAO dao = MemberDAO.getInstance();
// 2단계 : member10 테이블의 회원 전체 목록 조회.
List<MemberDTO> memberList = dao.getMemberList();
// 3단계 : DB에서 가져온 회원 전체 목록을 view page로 이동시켜주면 됨.
// 바인딩 작업이 필요함
request.setAttribute("List", memberList);
// 4단계 : 페이지 이동 경로 및 페이지 이동 작업 진행
request.getRequestDispatcher("view/member_list.jsp").forward(request, response);
}
}
====================================== member_list.jsp ======================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- JSTL 라이브러리를 사용하겠다고 선언 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<hr width="30%" color="maroon">
<h3>MEMBER10 테이블 전체 회원 목록 페이지</h3>
<hr width="30%" color="maroon">
<br> <br>
<table border="1" width="500">
<tr>
<th>회원 No.</th> <th>회원이름</th> <th>회원직업</th> <th>회원등록일</th>
</tr>
<c:set var="list" value="${ List }"/>
<c:if test="${ !empty list }">
<c:forEach items="${ list }" var="dto">
<tr>
<td>${dto.getNum() }</td>
<td>${dto.getMemname() }</td>
<td>${dto.getJob() }</td>
<td>${dto.getRegdate().substring(0, 10) }</td>
</tr>
</c:forEach>
</c:if>
<%-- if문의 else 부분 --%>
<c:if test="${ empty list }">
<tr>
<td colspan="4" align="center">
<h3>전체 회원 리스트가 없습니다.</h3>
</td>
</tr>
</c:if>
</table>
</div>
</body>
</html>'JSP > 기초 내용 정리' 카테고리의 다른 글
| JSP(Example)_FileUpload (1) | 2024.12.27 |
|---|---|
| JSP(Example)_BOARD (0) | 2024.12.23 |
| JSP(JSTL)_04 (1) | 2024.12.19 |
| JSP(JSTL)_03 (1) | 2024.12.19 |
| JSP(JSTL)_02 (0) | 2024.12.19 |