게시판 만들기 9

msriver·2020년 6월 6일
2

JSP&Servlet

목록 보기
10/13

🆗 현재까지 한것

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

💡 이번에 할것

  • 게시글 리스트에서 글 작성하기를 눌렀을 때 나오는 웹페이지 작성 및 데이터베이스에 데이터를 추가하는 작업
  • board_list.jsp 페이지(게시글 리스트)에서 글작성하기를 누르면 새 글을 작성하는 페이지로 이동한다. 이전 포스팅의 소스코드에서 글 작성하기 링크에 href속성이 BoardServlet?command=board_write_form 으로 되어있다.
  • 현재 나는 모든 요청을 Servlet으로 향하도록 작성을 하고 있으며 요청을 받은 Servlet에서는 command를 분석하여 쿼리스트링으로 들어온 command에 맞는 Action을 수행한다.
  • Action은 Action 인터페이스를 사용해 만들어져 있는데 여기에 적힌 execute()메서드는 하나뿐이므로 요청을 get방식과 post방식으로 나누어 doGet(), doPost()메서드로 처리하던 Servlet과는 다르다.
  • 그리하여 나는 하나의 작업을 수행하기 위해 Action클래스를 두개를 만들 것이다.
    예를 들어 글을 작성하는 작업을 하기 위해선 글작성 페이지로 이동하는 BoardWriteFormAction.java, 글작성 페이지에서 글을 다 작성하고 등록버튼을 눌렀을 때 이를 데이터베이스에 추가하고 다시 게시글 목록으로 가는 BoardWriteAction.java 이렇게 2개이다.

boardWrite.jsp 만들기

아래와 같은 형태로 만들려고 한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
        <form method="post" action="BoardServlet">
        	<input type="hidden" value="board_write" name="command">
            <table>
                <tr>
                    <th>제목 *</th>
                    <td><input type="text" name="title"></td>
                </tr>
                <tr>
                    <th>아이디 *</th>
                    <td><input type="text" name="name"></td>
                </tr>
                <tr>
                    <th>비밀번호 *</th>
                    <td><input type="password" name="pass"></td>
                </tr>
                <tr>
                    <th>내용</th>
                    <td><textarea cols="100" rows="30" name="content"></textarea></td>
                </tr>
            </table>
            <input class="btn" type="submit" value="등록">
            <input class="btn" type="reset" value="다시작성하기">
            <input class="btn" type="button" value="취소" onclick="javascript:history.back()">
        </form>
    </div>
</body>
</html>

그리고 버튼에도 css style을 적용시키기 위해 board.css파일에 다음을 추가하여 적는다.

.btn{
    margin-top: 15px;
    width: 120px;
    height: 35px;
    font-size: 17px;
}

DAO클래스에 메서드 등록

boardWrite.jsp에서 입력한 폼의 값들을 서버로 전송하여 그 데이터를 데이터베이스에 insert하는 메서드를 만든다.

//insert
	public void insertBoard(BoardVO bVo) {
		String sql = "insert into board(pass,name,email,title,content) values(?,?,?,?,?)";
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, bVo.getPass());
			pstmt.setString(2, bVo.getName());
			pstmt.setString(3, bVo.getEmail());
			pstmt.setString(4, bVo.getTitle());
			pstmt.setString(5, bVo.getContent());
			pstmt.executeUpdate();
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			DBManager.close(conn, pstmt);
		}		
	}

BoardWriteFormAction.java 만들기

이 FormAction클래스는 게시글작성을 하기위한 페이지(boardWrite.jsp)로 포워딩하는 일을 할 것이다.

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;

public class BoardWriteFormAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String url = "board/boardWrite.jsp";		
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}
}

그리고 위 Action이 제대로 동작하도록 ActionFactory.java의 getAction()메서드를 수정해준다. 파라미터로 전달받은 command가 board_write_form일때 생성됨.

	public Action getAction(String command) {
		Action action = null;
		if(command.equals("board_list")) {
			action = new BoardListAction();
		} else if(command.equals("board_write_form")) {
			action = new BoardWriteFormAction();
		}
		return action;
	}

작성한 게시글을 데이터베이스에 추가

위에서 작성했던 boardWrite.jsp에서 등록버튼을 누를 시 폼에 입력된 값들이 데이터베이스에 저장하게 하는 Action을 만들것이다.

<form method="post" action="BoardServlet">
<input type="hidden" value="board_write" name="command">

boardWrite.jsp의 코드이다. post방식으로 요청을 보내고 action은 BoardServlet으로 작성하였는데 BoardServlet?command=board_wrtie라고 바로 적어주어도 된다. 하지만 나는 이 페이지에서는 hidden으로 숨겨진 input에 value를 board_write라고 설정해주므로써 파라미터를 넘겨주었다.

BoardWriteAction.java

//BoardWriteAction.java

package com.msriver.action;

import java.io.IOException;
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 BoardWriteAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		BoardVO bVo = new BoardVO();
		bVo.setPass(request.getParameter("pass"));
		bVo.setName(request.getParameter("name"));
		bVo.setTitle(request.getParameter("title"));
		bVo.setEmail(request.getParameter("email"));
		bVo.setContent(request.getParameter("content"));
		
		BoardDAO bDao = BoardDAO.getInstance();
		bDao.insertBoard(bVo);
		response.sendRedirect("BoardServlet?command=board_list");
	}
	
}

BoardVO 객체를 하나 생성하여 그곳에 파라미터로 전달받은 폼의 입력값들을 담고 위에서 DAO클래스에 등록한 메서드를 이용해 데이터베이스에 insert 한다.
그 후 redirect로 게시글리스트에 이동하도록 한다.
BoardWriteAction 클래스 또한 ActionFactory에 등록한다.

//중복되는 코드는 생략
	public Action getAction(String command) {
		Action action = null;
		if(command.equals("board_list")) {
			action = new BoardListAction();
		}  else if(command.equals("board_write_form")) {
			action = new BoardWriteFormAction();
		}  else if(command.equals("board_write")) {
			action = new BoardWriteAction();
		}
		
		return action;
	}
profile
NOBODY

0개의 댓글