JSP_basic. 게시판 테이블 만들어서 조회해보기(DAO, VO, servlet)

dwanGim·2022년 4월 15일
0

JSP_basic

목록 보기
12/15

VO, DAO, servlet

여태껏 공부한 VO, DAO, servlet을 총동원해서

MySQL의 DB와 연동한 게시판 테이블을 만들어보겠습니다.

먼저 MySQL에서 boardTbl을 CREATE TABLE했습니다.

2개 정도만 만들어두고 VO와 DAO를 작성하러 eclipse로 돌아갑니다.

BoardVO 작성

// BoardVO 코드 전문입니다.

package kr.co.ict.domain;

import java.sql.Date;

public class BoardVO {


	private int boardNum;
	private String title;
	private String content;
	private String writer;
	private Date bDate;
	private Date mDate;
	private int hit;
	
	@Override
	public String toString() {
		return "BoardVO [boardNum=" + boardNum + ", title=" + title + ", content=" + content + ", writer=" + writer
				+ ", bDate=" + bDate + ", mDate=" + mDate + ", hit=" + hit + "]";
	}
	
	public int getBoardNum() {
		return boardNum;
	}
	public void setBoardNum(int boardNum) {
		this.boardNum = boardNum;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public Date getbDate() {
		return bDate;
	}
	public void setbDate(Date bDate) {
		this.bDate = bDate;
	}
	public Date getmDate() {
		return mDate;
	}
	public void setmDate(Date mDate) {
		this.mDate = mDate;
	}
	public int getHit() {
		return hit;
	}
	public void setHit(int hit) {
		this.hit = hit;
	}
	
	
	
}

datetime 자료형을 갖는 컬럼은 date 자료형(java.sql.Date)를 선언하면 됩니다.

boardTbl 테이블에 맞는 VO를 만들기 위해 컬럼별로 변수를 선언했습니다.

그리고 getter, sette, toString을 생성해서 BoardVO 완성입니다.

BoardDAO 작성

package kr.co.ict.domain;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class BoardDAO {

	private DataSource ds;
	
	public static BoardDAO dao = new BoardDAO();
	
	private BoardDAO() {
		try {
			Context ct = new InitialContext();
			ds = (DataSource)ct.lookup("java:comp/env/jdbc/mysql");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static BoardDAO getInstance() {
		if(dao == null) {
			dao = new BoardDAO();
		}
		return dao;
	}

	
	public List<BoardVO> getBoardList(){
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		List<BoardVO> boardList = new ArrayList<>();
		
		try {
			con = ds.getConnection();
			String sql = "SELECT * FROM boardTbl";
			pstmt = con.prepareStatement(sql);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				BoardVO board = new BoardVO();
				
				System.out.println("집어넣기 전 : " + board);
				board.setBoardNum(rs.getInt(1));
				board.setTitle(rs.getString(2));
				board.setContent(rs.getString(3));
				board.setWriter(rs.getString(4));
				board.setbDate(rs.getDate(5));
				board.setmDate(rs.getDate(6));
				board.setHit(rs.getInt(7));
				
				System.out.println("집어넣은 후 : " + board);
				boardList.add(board);
				
			}
			System.out.println("리스트에 쌓인 자료 체크 : " + boardList);
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			try {
				con.close();
				pstmt.close();
				rs.close();
			} catch(Exception e) {
				e.printStackTrace();
			}
		}
		
		return boardList;
		
		
	} // getBoardList() END.
	

}

private DataSource ds;를 BoardDAO 클래스의 전역변수로 선언한 후

커넥션 풀을 진행했습니다.

그리고 boardTbl의 모든 데이터를 가져오는 getBoardList()를 생성했습니다.

servlet 작성

servlet 역할을 할 getBoardList.java를 작성하겠습니다.

당연히 servlet 파일로 만들었습니다.

package kr.co.ict;

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 kr.co.ict.domain.BoardDAO;
import kr.co.ict.domain.BoardVO;

/**
 * Servlet implementation class getBoardList
 */
@WebServlet("/boardList")
public class getBoardList extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public getBoardList() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		BoardDAO dao = BoardDAO.getInstance();
		List<BoardVO> boardList = dao.getBoardList();
		
		System.out.println("데이터 받아오는지 확인 : " + boardList);
		request.setAttribute("boardList", boardList);
		
		RequestDispatcher dp = request.getRequestDispatcher("/board/getBoardList.jsp");
		
		dp.forward(request, response);
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher dp = request.getRequestDispatcher("/board/getBoardList.jsp");
		
		dp.forward(request, response);
	}

}

/boardList를 주소로 갖는 servlet이 생성되었습니다.

doGet() 메서드로 인해 get방식으로 데이터 접근이 감지되었을 때

BoardDAO dao = BoardDAO.getInstance();
List boardList = dao.getBoardList();

을 실행해서 BoardDAO와 BoardVO를 받아오게했습니다.

이후에
request.setAttribute("boardList", boardList);는

VO와 DAO를 통해 boardList 받아온 배열을 boardList라는 이름으로 저장합니다.

RequestDispatcher dp = request.getRequestDispatcher("/board/getBoardList.jsp");

RequestDispatcher 로 목적지를 결과 페이지인 getBoardList.jsp로 선언했습니다.

그러면

dp.forward(request, response);로 포워딩이 실행됩니다.

결과 페이지 테이블 형식 작성

getBoardList.jsp의 전문입니다.


<%@page import="kr.co.ict.getBoardList"%>
<%@page import="kr.co.ict.domain.BoardVO"%>
<%@page import="java.util.List"%>
<%@page import="kr.co.ict.domain.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="container">
	<div class="col-sm-12">
		<table class = "table table-primary table-striped">
			<thead>
				<tr>
					<th>글 번 호</th>
					<th>제 목</th>
					<th>글 쓴 이</th>
					<th>작성시간</th>
					<th>수정시간</th>
					<th>조 회 수</th>
				</tr>
			</thead>
			<tbody>
				<c:forEach var="board" items="${boardList}">
					<tr>
						<td>${board.boardNum}</td>
						<td>${board.title}</td>
						<td>${board.writer}</td>
						<td>${board.bDate}</td>
						<td>${board.mDate}</td>
						<td>${board.hit}</td>
					</tr>
				</c:forEach>
			</tbody>
		</table>
	</div>
</div>
</body>
</html>

스크립트릿없이 깔끔하게 servlet과 EL을 통해 jsp파일을 작성했습니다.

시작점을 이 페이지로 하면 아무런 데이터가 없어서

화면에 테이블이 제대로 구현되지 않지만

/boardList로 접속을 하면 JDBC, servlet을 이용해 DB에 연동된 데이터들이 EL 코드들에 대입되면서

테이블이 완성될 겁니다.

다행히 기대한 대로 결과가 나왔습니다.

VO의 getter와 setter들 toString들

DAO의 JDBC DB 연동구문들, return, 많은 메서드분들에게

정말 감사합니다.

일단은 여기까지 입니다.

profile
배울 게 참 많네요.

0개의 댓글