📌Action 인터페이스
각 요청을 처리하는 Action 클래스들을 다형성을 이용해서 동일한 타입으로 참조하기 위해서 각 Action 클래스들이 구현할 Action 인터페이스를 설계
package action;
import javax.servlet.http.*;
import vo.ActionForward;
public interface Action {
ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception;
}
앞서 포스팅한 controller 클래스, 즉 BoardFrontController에서 전송된 요청을 파악하여 각 요청을 처리하는 Actino 클래스 객체의 execute 메소드를 호출한다.
📌새로운 글 작성
새로운 글 요청 처리하는 BoardWriteProAction 클래스
package action;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.BoardWriteProService;
import vo.ActionForward;
import vo.BoardBean;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
public class BoardWriteProAction implements Action {
public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
ActionForward forward=null;
BoardBean boardBean = null;
String realFolder=""; //서버 상의 파일 경로를 저장할 실제 경로를 저장할 변수
String saveFolder="/boardUpload"; //파일을 업로드할 디렉토리 명 지정한 부분
int fileSize=5*1024*1024; //업로드할 파일 사이즈를 정의한 부분
ServletContext context = request.getServletContext();
realFolder=context.getRealPath(saveFolder); //서버 상의 실제 경로
MultipartRequest multi=new MultipartRequest( //파일 업로드 담당 클래스
request,
realFolder,
fileSize,
"UTF-8",
new DefaultFileRenamePolicy());
boardBean = new BoardBean(); //새로 등록할 게시글 정보를 BoardBean 객체 할당
boardBean.setBOARD_NAME(multi.getParameter("BOARD_NAME"));
boardBean.setBOARD_PASS(multi.getParameter("BOARD_PASS"));
boardBean.setBOARD_SUBJECT(multi.getParameter("BOARD_SUBJECT"));
boardBean.setBOARD_CONTENT(multi.getParameter("BOARD_CONTENT"));
boardBean.setBOARD_FILE(
multi.getOriginalFileName((String)multi.getFileNames().nextElement()));
BoardWriteProService boardWriteProService = new BoardWriteProService();
//게시글 등록 성공 여부
boolean isWriteSuccess = boardWriteProService.registBoard(boardBean);
if(!isWriteSuccess){ //글 등록 작업이 실패했을 등록실패 했다 출력 후, 이전 페이지로 되돌아가게 처리하는 부분
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('등록실패')");
out.println("history.back();");
out.println("</script>");
}
else{ //글 등록 성공 후 목록 보기 요청 하는 부분.
forward = new ActionForward();
forward.setRedirect(true);
forward.setPath("boardList.bo");
}
return forward;
}
}
※파일 업로드 관련 참고
https://yeo-computerclass.tistory.com/135?category=1269285
[JSP] 파일 업로드 (COS 라이브러리 사용)
📌1. COS 라이브러리 다운로드 및 설치 COS 라이브러리 파일을 http://www.servlets.com/cos 에서 다운로드 할 수 있다. 위 링크에 접속한 다음 cos-22.05.zip(현재 버전) 을 다운로드 받으면 된다 다운 받은
yeo-computerclass.tistory.com
📌게시판 목록 List 요청
BoardListAcion 클래스
package action;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.BoardListService;
import vo.ActionForward;
import vo.BoardBean;
import vo.PageInfo;
public class BoardListAction implements Action {
public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
ArrayList<BoardBean> boardList=new ArrayList<BoardBean>();
int page=1;
int limit=10;
if(request.getParameter("page")!=null){
page=Integer.parseInt(request.getParameter("page"));
}
BoardListService boardListService = new BoardListService();
int listCount=boardListService.getListCount(); //총 리스트 수를 받아옴.
boardList = boardListService.getBoardList(page,limit); //리스트를 받아옴.
int maxPage; //총 페이지 수
if(listCount==0) maxPage=1;
else maxPage=(listCount-1)/limit+1;
//하단 페이지 목록에서 보여질 시작 페이지 수(1, 11, 21 등...)
int startPage = (page-1)/10 * 10 + 1;
//현재 페이지 목록에서 보여질 마지막 페이지 수.(10, 20, 30 등...)
int endPage = startPage+10-1;
if (endPage> maxPage) endPage= maxPage;
PageInfo pageInfo = new PageInfo();
pageInfo.setPage(page);
pageInfo.setStartPage(startPage);
pageInfo.setEndPage(endPage);
pageInfo.setListCount(listCount);
pageInfo.setMaxPage(maxPage);
request.setAttribute("pageInfo", pageInfo);
request.setAttribute("boardList", boardList);
ActionForward forward= new ActionForward();
forward.setPath("/board/qna_board_list.jsp");
return forward;
}
}
📌게시글 상세보기
BoardDetailAction 클래스
package action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.BoardDetailService;
import vo.ActionForward;
import vo.BoardBean;
public class BoardDetailAction implements Action {
public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
int board_num=Integer.parseInt(request.getParameter("board_num")); //글 번호 받아옴
String page = request.getParameter("page"); //페이지 번호 받아옴
BoardDetailService boardDetailService = new BoardDetailService();
BoardBean board = boardDetailService.getBoard(board_num); //글 번호를 토대로 게시글 받아옴
ActionForward forward = new ActionForward();
request.setAttribute("page", page);
request.setAttribute("board", board);
forward.setPath("/board/qna_board_view.jsp");
return forward;
}
}
📌게시글 수정
글 수정 Form 요청 하는 BoardModifyFormAction 클래스
package action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.BoardDetailService;
import vo.ActionForward;
import vo.BoardBean;
public class BoardModifyFormAction implements Action {
public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
ActionForward forward = new ActionForward();
int board_num=Integer.parseInt(request.getParameter("board_num")); //글 번호 받아옴
BoardDetailService boardDetailService = new BoardDetailService();
BoardBean board = boardDetailService.getBoard(board_num); //글 번호를 토대로 게시글 받아옴
request.setAttribute("board", board);
forward.setPath("/board/qna_board_modify.jsp");
return forward;
}
}
글 수정 요청 처리하는 BoardModifyProAction 클래스
package action;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.BoardModifyProService;
import vo.ActionForward;
import vo.BoardBean;
public class BoardModifyProAction implements Action {
public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
ActionForward forward = null;
boolean isModifySuccess = false;
int board_num=Integer.parseInt(request.getParameter("BOARD_NUM"));
BoardBean board = new BoardBean();
BoardModifyProService boardModifyProService = new BoardModifyProService();
boolean isRightUser=boardModifyProService.isBoardWriter(board_num, request.getParameter("BOARD_PASS"));
if(!isRightUser){
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.println("<script>");
out.println("alert('수정할 권한이 없습니다.');");
out.println("history.back();");
out.println("</script>");
}
else{
board.setBOARD_NUM(board_num);
board.setBOARD_SUBJECT(request.getParameter("BOARD_SUBJECT"));
board.setBOARD_CONTENT(request.getParameter("BOARD_CONTENT"));
isModifySuccess = boardModifyProService.modifyBoard(board);
if(!isModifySuccess){
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.println("<script>");
out.println("alert('수정실패');");
out.println("history.back()");
out.println("</script>");
}
else{
forward = new ActionForward();
forward.setRedirect(true);
forward.setPath("boardDetail.bo?board_num="+board.getBOARD_NUM());
}
}
return forward;
}
}
📌글 삭제
글 삭제 요청 처리하는 BoardDeleteProAction 클래스
package action;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.BoardDeleteProService;
import vo.ActionForward;
public class BoardDeleteProAction implements Action {
public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
ActionForward forward = null;
int board_num=Integer.parseInt(request.getParameter("board_num"));
String nowPage = request.getParameter("page");
BoardDeleteProService boardDeleteProService = new BoardDeleteProService();
boolean isBoardWriter =boardDeleteProService.isBoardWriter(board_num, request.getParameter("BOARD_PASS"));
if(!isBoardWriter){
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.println("<script>");
out.println("alert('삭제할 권한이 없습니다');");
out.println("history.back();");
out.println("</script>");
out.close();
}
else{
boolean isDeleteSuccess = boardDeleteProService.removeBoard(board_num);
if(!isDeleteSuccess){
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.println("<script>");
out.println("alert('삭제실패');");
out.println("history.back();");
out.println("</script>");
out.close();
}
else{
forward = new ActionForward();
forward.setRedirect(true);
forward.setPath("boardList.bo?page=" + nowPage);
}
}
return forward;
}
}
📌게시글의 답글 쓰기
답변글 쓰기 폼 출력 요청 처리하는 BoardReplyFormAction 클래스
package action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.BoardDetailService;
import vo.ActionForward;
import vo.BoardBean;
public class BoardReplyFormAction implements Action {
public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
ActionForward forward = new ActionForward();
String nowPage = request.getParameter("page");
int board_num=Integer.parseInt(request.getParameter("board_num"));
BoardDetailService boardDetailService = new BoardDetailService();
BoardBean board = boardDetailService.getBoard(board_num);
request.setAttribute("board", board);
request.setAttribute("page", nowPage);
forward.setPath("/board/qna_board_reply.jsp");
return forward;
}
}
답변글 등록 요청을 처리하는 BoardReplyProAction 클래스
package action;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.BoardReplyProService;
import vo.ActionForward;
import vo.BoardBean;
public class BoardReplyProAction implements Action {
public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
ActionForward forward = null;
String nowPage = request.getParameter("page");
BoardBean board = new BoardBean();
board.setBOARD_NUM(Integer.parseInt(request.getParameter("BOARD_NUM")));
board.setBOARD_NAME(request.getParameter("BOARD_NAME"));
board.setBOARD_PASS(request.getParameter("BOARD_PASS"));
board.setBOARD_SUBJECT(request.getParameter("BOARD_SUBJECT"));
board.setBOARD_CONTENT(request.getParameter("BOARD_CONTENT"));
board.setBOARD_RE_REF(Integer.parseInt(request.getParameter("BOARD_RE_REF")));
board.setBOARD_RE_LEV(Integer.parseInt(request.getParameter("BOARD_RE_LEV")));
board.setBOARD_RE_SEQ(Integer.parseInt(request.getParameter("BOARD_RE_SEQ")));
BoardReplyProService boardReplyProService = new BoardReplyProService();
boolean isReplySuccess = boardReplyProService.replyBoard(board);
if(isReplySuccess){
forward = new ActionForward();
forward.setRedirect(true);
forward.setPath("boardList.bo?page=" + nowPage);
}
else{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('답장실패')");
out.println("history.back()");
out.println("</script>");
}
return forward;
}
}
'JSP & Servlet > 실습' 카테고리의 다른 글
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - DAO(Data Access Object) (0) | 2022.06.27 |
---|---|
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - Service 클래스 (0) | 2022.06.27 |
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - Controller 클래스 (0) | 2022.06.26 |
[JSP & Servlet] 게시판 만들기 (feat. MySQL) - 테이블 생성 및 vo(Value Object) (0) | 2022.06.26 |
[JSP] 로그인, 회원 가입 및 회원 관리 (0) | 2022.06.16 |