JSP_basic. フォーラムの文章ビューを実現しましょう.


フォーラムの文章ビューを実現するために、まず考えなければならないのは
実現したい機能から始めましょう.
掲示板リストのタイトルをクリックして、「投稿」ページに移動します.
文章の内容が確認されていることを確認します.
最初の投稿を読み込むにはjspフォームファイルが必要です.
その後、servletがDBデータをjspに送信する必要があります.
servletはSQLからDBデータをインポートするDAOが必要です.
データベース・データ検索では、SQL Tableのプライマリ・キーboard numを使用して検索されます.この操作を実行するにはgetBoardDetailメソッドを作成する必要があります.
これにより、重複する投稿の検索や存在しないデータの検索を回避できます.
では.
このフォーム、servlet、DAOを作成することにしました.
DAOから始めよう
DAOの作成
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;
	}
まず,単一色調で接続プールを作成した.
本当に必要なのはgetBoardDetailメソッドです
board numを使用してrowを検索し、そのrowの資料を取得する方法が必要です.
bord numを必要とするgetBoardDetail()をさらに作成します.
	
	// boardTbl에서 row를 1개 가져오기(글 번호 존재 시), 안 가져옴(없는 글 번호 입력 시)
	public BoardVO getBoardDetail(int boardNum) {

		Connection con = null;
		ResultSet rs = null;
		PreparedStatement pstmt = null;
		
		BoardVO board = new BoardVO();
		
		try {
			con = ds.getConnection();
			String sql = "SELECT * FROM boardTbl WHERE board_num = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, boardNum);
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				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);
			} else {
				System.out.println("해당 계정이 없습니다.");
			}
			
			
			} catch(Exception e){
				e.printStackTrace();
			} finally {
				try {
					con.close();
					rs.close();
					pstmt.close();
				} catch(Exception e) {
					e.printStackTrace();
				}
			}
			return board;
	} // getBoardDetail END.
int bordNumを要求するgetBoardDetailが完了しました.
SELECT*FROM boardTbl WHERE board_num =?クエリ文
SQL DBに送信
if文とResultSetリソース名は、BoardVOボードに結果値をロードしました.
最後にboardに戻る方法です
こうしてDAOは完成した
次に、Boardを実行するservletを作成します.
@WebServlet("/boardDetail")
/bordDetailをアドレスとするサーブレットを作成します.
bord numはget方式で受信する.
package kr.co.ict;

import java.io.IOException;

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 getBoardDetail
 */
@WebServlet("/boardDetail")
public class getBoardDetail extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public getBoardDetail() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String boardNum = request.getParameter("board_num");
		
		BoardDAO dao = BoardDAO.getInstance();
	
		BoardVO board = dao.getBoardDetail(Integer.parseInt(boardNum));
		
		request.setAttribute("board", board);
		
		RequestDispatcher dp = request.getRequestDispatcher("/board/boardDetail.jsp");
		
		dp.forward(request, response);
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

}
サーブレットにProtected void doGet()を作成しました.
getParameterはStringデータ型を要求します.
String bordNumとしてbord numを受け入れる
BoardDAO dao = BoardDAO.getInstance()を使用したDAOの作成
BoardVO board = dao.getBoardDetailの使用
整数に変換されたBondNumを持つdaogetBoardDetail
BoardVO取締役会に加入
次に、ステップをバインドおよび転送します.
結果ページ/board/boardDetail.jspの使用
完了したボードを送信
結果ページ/board/boardDetail.jspの作成
<%@ 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>
				<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>
			</tbody>
		</table>
	</div>
	<br/>
	<div class="mb-12">
		<label for="textarea1" class="form-label"> 본 문 </label>
		<textarea class="form-control" name="content" id="textarea1" cols="40" rows="20" disabled readonly>${board.content}</textarea>
		<br/>
	</div>
		<br/>
		<a href="http://localhost:8181/MyFirstWeb/boardList"  class="btn btn-success btn-mb-3">목록으로</a>
		<a href="#"  class="btn btn-danger btn-mb-3">뒤로가기</a>
</div><!-- container end -->
</body>
</html>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core "prefix="c"%>
ELをアドレスに持ち込む.
ELでスクリプトレスページを設定.


これで、タイトルをクリックして投稿を読むことができます.
大変ですね.もっと上手になるためにはもっと努力しなければなりません.
まずはここまで