09009

[JSP] 게시판 만들기 (4) 본문

JSP/게시판
[JSP] 게시판 만들기 (4)
09009 2023. 4. 22.

게시글 수정 화면으로 이동하게 하는 액션 클래스

"BoardServlet?command=board_update_form&num=${param.num}"이 요청됨. -  get 방식으로 BoardServlet 요청 

→ BoardServlet.java에 있는 doGet() 메서드에서 ActionFactory.java의 getAction() 메서드 호출

→ ActionFactory.java의 getAction() 메서드의 조건문에서 command가 "board_update_form"과 일치하는 조건이 존재하므로 BoardUpdateFormAction 인스턴스를 생성하여 반환

→ BoardServlet.java로 돌아가서 선언한 action이 null이 아니므로 BoardUpdateFormAction 인스턴스가 execute 메서드를 실행할 수 있는 권한을 받음 → 게시글 수정 페이지(boardUpdate.jsp)로 이동

 

✍ controller\action\BoardUpdateFormAction.java

package controller.action;

import java.io.IOException;

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

import dao.BoardDAO;
import dto.BoardVO;

public class BoardUpdateFormAction implements Action {
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String url="/board/boardUpdate.jsp";
		String num=request.getParameter("num");
		
		BoardDAO bDao=BoardDAO.getInstance();
		BoardVO bVo=bDao.selectOneBoardByNum(num);
		request.setAttribute("board", bVo);
		
		RequestDispatcher dispatcher=request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}
}

command 패턴으로 작업 처리를 위한 명령 처리 클래스 ActionFactory 수정

✍ controller\ActionFactory.java

	public Action getAction(String command) {
		Action action = null;
		System.out.println("ActionFactory : " + command);
		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();
		} else if (command.equals("board_view")) {
			action = new BoardViewAction();
		} else if (command.equals("board_check_pass_form")) {
			action = new BoardCheckPassFormAction();
		} else if (command.equals("board_check_pass")) {
			action = new BoardCheckPassAction();
		}else if(command.equals("board_update_form")) {
			action=new BoardUpdateFormAction();
		}
		return action;
	}

 

게시글 수정 화면 JSP 페이지

✍ board/boardUpdate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/shopping.css">
<script type="text/javascript" src="script/board.js"></script>
</head>
<body>
	<div id="wrap" align="center">
		<h1>게시글 수정</h1>
		<form name="frm" method="post" action="BoardServlet">
			<input type="hidden" name="command" value="board_update">
			<input type="hidden" name="num" value="${board.num}">
			<table>
				<tr>
					<th>작성자</th>
					<td><input type="text" size="12" name="name"
						value="${board.name}"> * 필수</td>
				</tr>
				<tr>
					<th>비밀번호</th>
					<td><input type="password" size="12" name="pass"> *
						필수 (게시물 수정 삭제시 필요합니다.)</td>
				</tr>
				<tr>
					<th>이메일</th>
					<td><input type="text" size="40" maxlength="50" name="email"
						value="${board.email}"></td>
				</tr>
				<tr>
					<th>제목</th>
					<td><input type="text" size="70" name="title"
						value="${board.title}"></td>
				</tr>
				<tr>
					<th>내용</th>
					<td><textarea cols="70" rows="15" name="content">${board.content}</textarea></td>
				</tr>
			</table>
			<br>
			<br>
			<input type="submit" value="등록" onclick="return boardCheck()">
			<input type="reset" value="다시 작성">
			<input type="button" value="목록" onclick="location.href='BoardServlet?command=board_list'">
		</form>
	</div>
</body>
</html>

게시글 수정 화면에서 게시글 정보를 수정하고 <등록> 버튼을 클릭하면 서블릿이 요청을 받아 처리한다.

command 방식으로 처리하므로 히든 태그로 command 파라미터를 서블릿에 전달한다.

정보를 수정하였으므로 이 수정한 정보를 DB에 반영하기 위한 액션 클래스를 생성해야 한다.

 

 

게시글을 데이터베이스에 수정하기 위한 액션 클래스

boardUpdate.jsp에서 <등록> 버튼을 클릭하면 BoardServlet에 post 방식으로 요청되지만 BoardServlet의 doPost() 메서드는

입력된 정보를 한글이 깨지지 않게 호환하고 doGet()을 호출한다.

→ BoardServlet.java에 있는 doGet() 메서드에서 ActionFactory.java의 getAction() 메서드 호출

→ ActionFactory.java의 getAction() 메서드에서 command가 "board_update"와 일치하는 조건이 존재하므로 BoardUpdateAction 인스턴스를 생성하여 반환

→ BoardServlet.java로 돌아가서 선언한 action이 null이 아니므로 BoardUpdateAction 인스턴스가 execute 메서드를 실행할 수 있는 권한을 받음

BoardUpdateAction.java에서 execute() 메서드가 실행된다.

 

✍ controller\action\BoardUpdateAction.java

package controller.action;

import java.io.IOException;

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

import dao.BoardDAO;
import dto.BoardVO;

public class BoardUpdateAction implements Action {
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		BoardVO bVo = new BoardVO();
		bVo.setNum(Integer.parseInt(request.getParameter("num")));
		bVo.setName(request.getParameter("name"));
		bVo.setPass(request.getParameter("pass"));
		bVo.setEmail(request.getParameter("email"));
		bVo.setTitle(request.getParameter("title"));
		bVo.setContent(request.getParameter("content"));
		BoardDAO bDao = BoardDAO.getInstance();
		bDao.updateBoard(bVo);
		new BoardListAction().execute(request, response);
	}
}

command 패턴으로 작업 처리를 위한 명령 처리 클래스 ActionFactory 수정

✍ controller\ActionFactory.java

	public Action getAction(String command) {
		Action action = null;
		System.out.println("ActionFactory : " + command);
		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();
		} else if (command.equals("board_view")) {
			action = new BoardViewAction();
		} else if (command.equals("board_check_pass_form")) {
			action = new BoardCheckPassFormAction();
		} else if (command.equals("board_check_pass")) {
			action = new BoardCheckPassAction();
		}else if(command.equals("board_update_form")) {
			action=new BoardUpdateFormAction();
		}else if(command.equals("board_update")) {
			action=new BoardUpdateAction();
		}
		return action;
	}

 

게시글 상세 보기 화면에서 <게시글 삭제> 버튼을 클릭하면 수정할 때와 마찬가지로 비밀번호를 확인한 후 삭제 작업을 진행한다.

비밀번호 입력이 성공하였을 경우 게시글을 삭제하는 작업부터 살펴보자.

 

비밀번호 입력이 성공하였을 때, checkSuccess.jsp 페이지에서 삭제 작업을 하기 위해

"BoardServlet?command=board_delete&num=${param.num}" 요청을 서블릿에서 수행한다. 

 

게시글 삭제를 위한 액션 클래스

✍ controller\action\BoardDeleteAction.java

package controller.action;

import java.io.IOException;

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

import dao.BoardDAO;

public class BoardDeleteAction implements Action {
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String num=request.getParameter("num");
		BoardDAO bDao=BoardDAO.getInstance();
		bDao.deleteBoard(num);
		new BoardListAction().execute(request, response);
	}
}

command 패턴으로 작업 처리를 위한 명령 처리 클래스 ActionFactory 수정

✍ controller\ActionFactory.java

	public Action getAction(String command) {
		Action action = null;
		System.out.println("ActionFactory : " + command);
		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();
		} else if (command.equals("board_view")) {
			action = new BoardViewAction();
		} else if (command.equals("board_check_pass_form")) {
			action = new BoardCheckPassFormAction();
		} else if (command.equals("board_check_pass")) {
			action = new BoardCheckPassAction();
		}else if(command.equals("board_update_form")) {
			action=new BoardUpdateFormAction();
		}else if(command.equals("board_update")) {
			action=new BoardUpdateAction();
		}else if(command.equals("board_delete")) {
			action=new BoardDeleteAction();
		}
		return action;
	}

 

 

'JSP > 게시판' 카테고리의 다른 글

[JSP] 게시판 만들기 (3)  (0) 2023.04.22
[JSP] 게시판 만들기 (2)  (0) 2023.04.22
[JSP] 게시판 만들기 (1)  (0) 2023.04.21