JSP_basic. 掲示板テーブルを作成して参照(DAO、VO、servlet)


VO, DAO, servlet
私たちが今まで学んだVO、DAO、servletを動員します.
MySQLデータベースに関連付けられた掲示板テーブルを作成します.

まずはMySQLでCREATE TABLEしたBoard TBL
2つだけ作成し、Eclipseに戻ってVOとDAOを作成します.
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)として宣言できます.
Board TBLテーブルに適したVOを作成するために、カラムごとに変数を作成することを宣言しました.
次にgetter、sett、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クラスとして宣言されるグローバル変数.
プールは正常に接続されました.
次に、getBoardList()を作成して、Board TBLのすべてのデータをインポートします.
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);
	}

}
/board Listをアドレスとするservletが作成されました.
doGet()メソッドは、get方式でデータアクセスが行われていることを検出する.
BoardDAO dao = BoardDAO.getInstance();
List boardList = dao.getBoardList();
BoardDAOとBoardVOを受信するために実行されます.
あとで
request.setAttribute("boardList", boardList);表示
VOとDAOで受信した基板リストを基板リストとして保存します.
RequestDispatcher dp = request.getRequestDispatcher("/board/getBoardList.jsp");
結果ページgetBoardListはRequestDispatcherとして宛先を指します.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/[email protected]/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ファイルを作成しました.
開始点をページとすると、データはありません.
表は画面上で正しく実装されていません.
/bordListに接続すると、JDBCとservletはデータベースのデータをELコードに挿入します.
テーブルが完成します.

幸いなことに、結果は予想通りでした.
VOのgetterとsetter to String
DAOのJDBC DBバインド構文return
どうもありがとうございます.
まずはここまで