MVC_Board - src/main/java - controller - BoardFrontController.java

모쿠모쿠·2022년 8월 23일

JSP

목록 보기
124/151
package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import action.Action;
import action.BoardDeleteProAction;
import action.BoardDetailAction;
import action.BoardListAction;
import action.BoardModifyFormAction;
import action.BoardModifyProAction;
import action.BoardReplyFormAction;
import action.BoardReplyProAction;
import action.BoardWriteProAction;
import vo.ActionForward;

// 서블릿 주소가 xxx.bo 로 끝날 경우 BoardFrontController 클래스로 해당 요청이 전달됨
@WebServlet("*.bo")
public class BoardFrontController extends HttpServlet {
	// GET 방식 or POST 방식에 따른 처리를 별도로 구분하지 않고 공통으로 처리하기 위해
    // doProcess() 메서드를 정의하고 doGet(), doPost() 메서드에서 호출
    protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	System.out.println("BoardFrontController");
        
        // POST 방식 요청에 대한 한글 처리
        request.setCharacterEncoding("UTF-8");
        
        // 서블릿 주소 추출
        String command = request.getServletPath();
        System.out.println("command : " + command);
        
        // Action 클래스 인스턴스들을 공통으로 관리하는 Action 타입 변수 선언
        Action action = null;
        // 포워딩 정보를 관리하는 ActionForward 타입 변수 선언
        ActionForward forward = null;
        
        // 추출된 서블릿 주소를 if 문을 사용하여 판별하고 각 주소에 따른 액션(작업) 요청
        // ex) "/BoardWriteForm.bo" 일 경우 board 폴더 내의 qna_board_write.jsp 페이지로 이동
        if(command.equals("/BoardWriteForm.bo")) {
        	// 글쓰기 폼 표시를 위한 View 페이지(*.jsp) 로 포워딩
            // 별도의 비즈니스 로직(= DB 작업)이 없이 뷰페이지로 바로 연결
            // => 이 때, JSP 페이지의 URL(qna_board_wirte.jsp)이 주소표시줄에 노출되지 않고
            //    이전의 요청 주소인 서블릿 주소("/BoardWriteForm.bo")를 그대로 유지해야하므로 
            //    Dispatcher 방식으로 포워딩을 수행해야 한다!
            // => 파라미터로 현재 위치(= Root) 에서 하위 디렉토리의 qna_board_write.jsp 페이지 지정
//			RequestDispatcher dispatcher = request.getRequestDispatcher("board/qna_board_write.jsp");
//			dispatcher.forward(request, response);

			// 포워딩 정보를 관리하는 ActionForward 객체 생성 후 URL 및 포워딩 방식을 저장
            forward = new ActionForward()l
            forward.setPath("board/qna_board_wirte.jsp");
            forward.setRedirect(false); // Dispatcher 방식(생략 가능)
        } else if(command.equals("/BoardWritePro.bo")) {
//			System.out.println("글쓰기 비즈니스 로직!");
			// 글쓰기 작업 완료했다고 가정
            // => 글목록 표시를 위한 BoardList.bo 서블릿 주소 요청하여 포워딩
            // => 새로운 요청에 의한 서블릿 주소를 변경해야하므로 Redirect 방식으로 포워딩
// 			response.sendRedirect("BoardList.bo");

			// 포워딩 정보를 관리하는 ActionForward 객체 생성 후 URL 및 포워딩 방식을 저장
//			forward = new ActionForward();
//			forward.setPath("BoardList.bo");
//			forward.setRedirect(true); // Redirect 방식
			// ------------------------------------------------------------------
            // 글쓰기 비즈니스 로직 수행을 위한 컨트롤러인 Action 클래스로 이동하여
            // Service -> DAO 클래스를 거쳐 비즈니스 로직을 수행한 후
            // 최종적으로 Action 클래스에서 포워딩 정보를 저장한 후 ActionForward 객체를 리턴
            
            try {
            	// BoardWriteProAction 클래스 인스턴스 생성 후 execute() 메서드 호출
                action = new BoardWriteProAction();
                forward = action.execute(request, response);
            } catch (Exception e) {
            	e.printStackTrace();
            }
        } else if(command.equals("/BoardList.bo")) {
        	// 글목록 조회 비즈니스 로직 수행을 위한 컨트롤러인 Action 클래스로 이동하여
            // Service -> DAO 클래스 비즈니스 로직을 수행한 후 
            // 최종적으로 Action 클래스에서 포워딩 정보를 저장한 후 ActionForward 객체를 리턴
        } try {
        	// BoardWriteProAction 클래스 인스턴스 생성 후 execute() 메서드 호출
            action = new BoardWriteProAction();
            forward = action.execute(request, response);
        } catch (Exception e) {
        	e.printStackTrace();
        }
    } else if(command.equals("/BoardList.bo")) {
    	// 글목록 조회 비즈니스 로직 수행을 위한 컨트롤러인 Action 클래스로 이동하여
        // Service -> DAO 클래스 비즈니스 로직을 수행한 후 
        // 최종적으로 Action 클래스에서 포워딩 정보를 저장한 후 ActionForward 객체를 리턴
        try {
        	// BoardListAction 클래스 인스턴스 생성 후 execute() 메서드 호출
            action = new BoardListAction();
            forward = action.execute(request, response);
        } catch (Exception e) {
        	e.printStackTrace();
        }
    } else if(command.equals("/BoardDetail.bo")) {
    	try {
        	action = new BoardDetailAction();
            forward = action.execute(request, response);
        } catch (Exception e) {
        	e.printStackTrace();
        }
    } else if(command.equals("/BoardDeleteForm.bo") {
    	forward = new ActionForward();
        forward.setPath("board/qna_board_delete.jsp");
        forward.setRedirect(false); // Dispatcher 방식(생략 가능)
    } else if(command.equals("/BoardDeletePro.bo")) {
    	action = new BoardDeleteProAction();
        
        try {
        	forward = action.execute(request, response);
        } catch (Exception e) {
        	e.printStackTrace();
        }
    } else if(command.equals("/BoardModifyForm.bo")) {
    	// 글 수정에 필요한 게시물 조회 비즈니스 로직 처리를 위해
        // BoardModifyFormAction 클래스의 execute() 메서드 호출
        action = new BoardModifyFormAction();
        
        try {
        	forward = action.execute(request, response);
        } catch (Exception e) {
        	e.printStackTrace();
        } 
    } else if(command.equals("/BoardModifyPro.bo")) {
    	action = new BoardModifyProAction();
        
        try {
        	forward = action.execute(request, response);
        } catch (Exception e) {
        	e.printStackTrace();
        }
    } else if(command.equals("/BoardReplyForm.bo")) {
    	// BoardReplyFormAction 을 통해 답글 달 원본 게시물 상세 정보 조회 후
        // qna_board_reply.jsp 페이지에서 표시(제목, 내용만 표시)
        action = new BoardReplyFormAction();
        
        try {
        	forward = action.execute(request, response);
        } catch (Exception e) {
        	e.printStackTrace();
        }
    } else if(command.equals("/BoardReplyPro.bo")) {
    	action = new BoardReplyProAction();
        
        try {
        	forward = action.execute(request, response);
        } catch (Exception e) {
        	e.printStackTrace();
        }
    }
    
    // ------------------------------------------------------------------
    // ActionForward 객체에 저장된 포워딩 정보에 따른 포워딩 작업 수행하기 위한 공통코드 작성
    if(forward != null) { // ActionForward 객체가 null 이 아닐 경우에만 포워딩 작업 수행
    	// Redirect 방식 vs Dispatcher 방식 판별하여 각 방식에 대한 포워딩 작업 수행
    	if(forward.isRedirect()) { // Redirect 방식
    		response.sendRedirect(forward.getPath());
    	} else { // Dispatcher 방식
    		RequestDispatcher dispatcher=request.getRequestDispatcher(forward.getPath());
        	dispatcher.forward(request, response);
    	}
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	doProcess(request, response);
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	doProcess(request, response);
    }

}

package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import action.Action;
import action.BoardDeleteProAction;
import action.BoardDetailAction;
import action.BoardListAction;
import action.BoardModifyFormAction;
import action.BoardModifyProAction;
import action.BoardReplyFormAction;
import action.BoardReplyProAction;
import action.BoardWriteProAction;
import vo.ActionForward;

// 서블릿 주소가 xxx.bo 로 끝날 경우 BoardFrontController 클래스로 해당 요청이 전달됨
@WebServlet("*.bo")
public class BoardFrontController extends HttpServlet {
// GET 방식 or POST 방식에 따른 처리를 별도로 구분하지 않고 공통으로 처리하기 위해
// doProcess() 메서드를 정의하고 doGet(), doPost() 메서드에서 호출
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("BoardFrontController");

	// POST 방식 요청에 대한 한글 처리
	request.setCharacterEncoding("UTF-8");
	
	// 서블릿 주소 추출
	String command = request.getServletPath();
	System.out.println("command : " + command);
	
	// Action 클래스 인스턴스들을 공통으로 관리하는 Action 타입 변수 선언
	Action action = null;
	// 포워딩 정보를 관리하는 ActionForward 타입 변수 선언
	ActionForward forward = null;	
	
	// 추출된 서블릿 주소를 if문을 사용하여 판별하고 각 주소에 따른 액션(작업) 요청
	// ex) "/BoardWriteForm.bo" 일 경우 board 폴더 내의 qna_board_write.jsp 페이지로 이동
	if(command.equals("/BoardWriteForm.bo")) {
		// 글쓰기 폼 표시를 위한 View 페이지(*.jsp) 로 포워딩
		// 별도의 비즈니스 로직(= DB 작업)이 없이 뷰페이지로 바로 연결
		// => 이 때, JSP 페이지의 URL(qna_board_write.jsp)이 주소표시줄에 노출되지 않고
		//    이전의 요청 주소인 서블릿 주소("/BoardWriteForm.bo")를 그대로 유지해야하므로
		//    Dispatcher 방식으로 포워딩을 수행해야한다!
		// => 파라미터로 현재 위치(= Root)에서 하위 디렉토리의 qna_board_write.jsp 페이지 지정

// RequestDispatcher dispatcher = request.getRequestDispatcher("board/qna_board_write.jsp");
// dispatcher.forward(request, response);

		// 포워딩 정보를 관리하는 ActionForward 객체 생성 후 URL 및 포워딩 방식을 저장
		forward = new ActionForward();
		forward.setPath("board/qna_board_write.jsp");
		forward.setRedirect(false); // Dispatcher 방식(생략 가능)
	} else if(command.equals("/BoardWritePro.bo")) {

// System.out.println("글쓰기 비즈니스 로직!");
// 글쓰기 작업 완료했다고 가정
// => 글목록 표시를 위한 BoardList.bo 서블릿 주소 요청하여 포워딩
// => 새로운 요청에 의한 서블릿 주소를 변경해야하므로 Redirect 방식으로 포워딩
// response.sendRedirect("BoardList.bo");

		// 포워딩 정보를 관리하는 ActionForward 객체 생성 후 URL 및 포워딩 방식을 저장

// forward = new ActionForward();
// forward.setPath("BoardList.bo");
// forward.setRedirect(true); // Redirect 방식
// --------------------------------------------------------------------------
// 글쓰기 비즈니스 로직 수행을 위한 컨트롤러인 Action 클래스로 이동하여
// Service -> DAO 클래스를 거쳐 비즈니스 로직을 수행한 후
// 최종적으로 Action 클래스에서 포워딩 정보를 저장한 후 ActionForward 객체를 리턴

		try {
			// BoardWriteProAction 클래스 인스턴스 생성 후 execute() 메서드 호출
			action = new BoardWriteProAction();
			forward = action.execute(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	} else if(command.equals("/BoardList.bo")) {
		// 글목록 조회 비즈니스 로직 수행을 위한 컨트롤러인 Action 클래스로 이동하여
		// Service -> DAO 클래스 비즈니스 로직을 수행한 후
		// 최종적으로 Action 클래스에서 포워딩 정보를 저장한 후 ActionForward 객체를 리턴
		try {
			// BoardListAction 클래스 인스턴스 생성 후 execute() 메서드 호출
			action = new BoardListAction();
			forward = action.execute(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	} else if(command.equals("/BoardDetail.bo")) {
		try {
			action = new BoardDetailAction();
			forward = action.execute(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	} else if(command.equals("/BoardDeleteForm.bo")) {
		forward = new ActionForward();
		forward.setPath("board/qna_board_delete.jsp");
		forward.setRedirect(false); // Dispatcher 방식(생략 가능)
	} else if(command.equals("/BoardDeletePro.bo")) {
		action = new BoardDeleteProAction();
		
		try {
			forward = action.execute(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	} else if(command.equals("/BoardModifyForm.bo")) {
		// 글 수정에 필요한 게시물 조회 비즈니스 로직 처리를 위해
		// BoardModifyFormAction 클래스의 execute() 메서드 호출
		action = new BoardModifyFormAction();
		
		try {
			forward = action.execute(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	} else if(command.equals("/BoardModifyPro.bo")) {
		action = new BoardModifyProAction();
		
		try {
			forward = action.execute(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	} else if(command.equals("/BoardReplyForm.bo")) {
		// BoardReplyFormAction 을 통해 답글 달 원본 게시물 상세 정보 조회 후
		// qna_board_reply.jsp 페이지에서 표시(제목, 내용만 표시)
		action = new BoardReplyFormAction();
		
		try {
			forward = action.execute(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	} else if(command.equals("/BoardReplyPro.bo")) {
		action = new BoardReplyProAction();
		
		try {
			forward = action.execute(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	// --------------------------------------------------------------------------------------
	// ActionForward 객체에 저장된 포워딩 정보에 따른 포워딩 작업 수행하기 위한 공통코드 작성
	if(forward != null) { // ActionForward 객체가 null 이 아닐 경우에만 포워딩 작업 수행
		// Redirect 방식 vs Dispatcher 방식 판별하여 각 방식에 대한 포워딩 작업 수행
		if(forward.isRedirect()) { // Redirect 방식
			response.sendRedirect(forward.getPath());
		} else { // Dispatcher 방식
			RequestDispatcher dispatcher = request.getRequestDispatcher(forward.getPath());
			dispatcher.forward(request, response);
		}
	}
	
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	doProcess(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	doProcess(request, response);
}

}

profile
Hello, Velog!

0개의 댓글