Java(Example)_MEMBER2

2024. 12. 23. 19:06·JSP/기초 내용 정리

2024-12-19

 

MemberDAO

 

MemberDAO

 

MemberDAO

 

 

 

====================================== 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
'JSP/기초 내용 정리' 카테고리의 다른 글
  • JSP(Example)_FileUpload
  • JSP(Example)_BOARD
  • JSP(JSTL)_04
  • JSP(JSTL)_03
mw41817
mw41817
일생의 개발 기록 저장소
  • mw41817
    IT 개발 일지
    mw41817
    • Index (487)
      • HTML (36)
        • 기초 내용 정리 (36)
      • CSS (29)
        • 기초 내용 정리 (29)
      • JavaScript (60)
        • 기초 내용 정리 (60)
      • JQuery (38)
        • 기초 내용 정리 (38)
      • Java (232)
        • 기초 내용 정리 (232)
      • JSP (46)
        • 기초 내용 정리 (46)
      • Spring, Boot (31)
        • 기초 내용 정리 (31)
      • DB (5)
        • Oracle SQL (5)
      • Code WorkBook (6)
        • programmers (6)
        • Baekjoon (0)
      • 기타 (1)
        • 유용한 사이트 (3)
  • 전체
    오늘
    어제
  • 글쓰기 관리
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 카테고리
    • 주인장 GitHub
  • 공지사항

  • 인기 글

  • 태그

    html #코딩 #프로그래밍 #기초
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
mw41817
Java(Example)_MEMBER2
상단으로

티스토리툴바