[JSP & Servlet] 게시판 만들기 (feat. MySQL) - Action 클래스

📌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;
	}  	
}