게시판 만들기 10

msriver·2020년 6월 7일
2

JSP&Servlet

목록 보기
11/13

🆗 현재까지 한것

  • DB에 board 테이블을 생성 및 샘플데이타 추가, DBCP 추가, jstl라이브러리 추가
  • DTO 만들기(=VO클래스=자바빈클래스),BoardDAO클래스 생성, DBManager클래스 생성
  • Action인터페이스 생성, ActionFactory클래스 생성,BoardServlet생성
  • 이클립스에서 웹 프로젝트를 실행하였을 때 처음 나타날 index.jsp 만듬
  • 데이터베이스의 board테이블에서 모든 정보를 가져오는 쿼리문을 BoardDAO에 작성
  • 위에서 만든 메서드를 사용하여 게시글 리스트를 만드는 BoardListAction클래스 생성
  • ActionFactory에 해당 Action 등록
  • 게시글을 모두 출력하는 boardList.jsp 페이지 및 css 만듬.
  • boardWrite.jsp, BoardWriteFormAction.java, BoardWriteAction.java 만듬
  • ActionFactory에 새로 만든 Action 등록

💡 이번에 할것


지금까지 게시글리스트와 그 게시글리스트에서 글작성버튼을 눌렀을 시 글작성페이지로 이동하는 것, 그리고 글작성페이지에서 입력한 폼의 값들을 서버로 전송하여 데이터베이스에 저장하는것까지 하였다. 이번에는 게시글 상세보기 기능을 만들려고 한다. 게시글리스트에서 글제목을 눌렀을 시 상세보기!
상세보기 페이지는 다음과 같은 형태로 만들려고 한다.

boardList.jsp 수정

<td>${posting.title }</td>

기존에 작성했던 boardList.jsp를 보면 게시글 제목부분이 위와 같이 되어있다.
이것을 아래와 같이 수정해준다.

<td><a href="BoardServlet?command=board_view&num=${posting.num }">${posting.title }</a></td>

board_view라는 커맨드와 해당 게시글의 글번호를 파라미터로 가지고 BoardServlet으로 요청이 전달될 것이다.

DAO클래스에 메서드 새로 만들기

전달받은 파라미터 num을 사용하여 num과 일치하는 데이터를 가져오는 메서드.

//select by num
public BoardVO selectBoardByNum(String num) {
		String sql = "select * from board where num = ?";
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		BoardVO bVo = null;
		try {
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, Integer.parseInt(num));
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				bVo = new BoardVO();
				bVo.setNum(rs.getInt("num"));
				bVo.setName(rs.getString("name"));
				bVo.setPass(rs.getString("pass"));
				bVo.setTitle(rs.getString("title"));
				bVo.setEmail(rs.getString("email"));
				bVo.setContent(rs.getString("content"));
				bVo.setReadCount(rs.getInt("readcount"));
				bVo.setWriteDate(rs.getTimestamp("writedate"));
			}
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			DBManager.close(conn, pstmt, rs);
		}
		return bVo;
	}

글번호를 파라미터로 전달받아 request내장객체의 getParameter()메서드를 사용했을때 반환되는 값의 타입은 String이므로 이를 정수타입으로 변환을 꼭 해줘야한다.

게시글을 클릭했을 때 조회수 +1

DAO클래스에 이어서 다음과 같은 메서드를 작성한다.

//조회수 up!
public void readCountPlus(String num) {
		String sql = "update board set readcount = readcount+1 where num = ?";
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, Integer.parseInt(num));
			pstmt.executeUpdate();
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			DBManager.close(conn, pstmt);
		}
	}

BoardViewAction.java

package com.msriver.action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.msriver.dao.BoardDAO;
import com.msriver.dto.BoardVO;

public class BoardViewAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String num = request.getParameter("num");
		String url = "board/boardView.jsp";
		BoardDAO bDao = BoardDAO.getInstance();
		bDao.readCountPlus(num);
		BoardVO bVo = bDao.selectBoardByNum(num);
		
		bVo.setReadCount(bVo.getReadCount()+1);
		
		request.setAttribute("boardone", bVo);
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}

}

bDao객체를 얻어와서 selectBoardByNum()메서드를 실행하기 전에 먼저 조회수를 데이터베이스에 update하는 readCountPlus()메서드를 실행한다.

ActionFactory에 등록!

if(command.equals("board_list")) {
			action = new BoardListAction();
		} else if(command.equals("board_write")) {
			action = new BoardWriteAction();
		} else if(command.equals("board_write_form")) {
			action = new BoardWriteFormAction();
		} else if(command.equals("board_view")) {
			action = new BoardViewAction();
		}

boardView.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/board.css">
    <style>
        td {
            text-align: left !important;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <h2>게시글 상세보기</h2>
        
            <table>
                <tr>
                    <th>제목</th>
                    <td>${boardone.title }</td>
                </tr>
                <tr>
                    <th>작성자</th>
                    <td>${boardone.name }</td>
                </tr>
                <tr>
                    <th>작성시간</th>
                    <td>${boardone.writeDate }</td>
                </tr>
                <tr>
                    <th>조회수</th>
                    <td>${boardone.readCount }</td>
                </tr>
                <tr>
                    <th>내용</th>
                    <td><pre>${boardone.content }</pre></td>
                </tr>
            </table>
            <input class="btn" type="submit" value="새글 작성" onclick="location.href='BoardServlet?command=board_write_form'">
            <input class="btn" type="reset" value="글 수정">
            <input class="btn" type="button" value="글 삭제">
            <input class="btn" type="button" value="목록으로" onclick="location.href='BoardServlet?command=board_list'">
        
    </div>
</body>
</html>
profile
NOBODY

0개의 댓글