아래와 같은 형태로 만들려고 한다.
<%@ 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; }
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); } }
이 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;
}