DAY43 - 프론트 컨트롤러

은나현·2023년 3월 29일
0

📌 1. 프론트 컨트롤러

📍 1-1. 프론트 컨트롤러란

  • 공통의 로직을 관리하는 컨트롤러
    • 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받는다.
    • 프론트 컨트롤러가 클라이언트의 요청에 맞는 컨트롤러를 찾아 호출해 준다.
    • 컨트롤러에 대한 공통 로직에 처리가 가능하다.
    • 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다.

📍 1-1. 프론트 컨트롤러 예시 코드

@WebServlet("*.us")
public class UserFrontController extends HttpServlet{
	// doGet, doPost에서 공통의 process 메서드 호출
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}
	// 공통 로직 처리 메서드
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 String requestURI = request.getRequestURI();
		 ActionForward forward = null;
		 // 각각의 컨트롤러 호출
		 if(requestURI.equals("/user/userJoin.us")) {
			 forward = new UserJoinAction().execute(request, response);
		 }else if(requestURI.equals("/user/UserLogin.us")) {
			 forward = new ActionForward(false,"/app/user/loginview.jsp");
		 }else if(requestURI.equals("/user/UserLoginOk.us")) {
			 forward = new UserLoginOkAction().execute(request,response);
		 }
		 // 전송에 대한 일괄처리
		 if(forward != null) {
			 if(forward.isRedirect()) {
				 // true : redirect
				 response.sendRedirect(forward.getPath());
			 }else {
				 // false : forward
				 RequestDispatcher disp 
				 	= request.getRequestDispatcher(forward.getPath());
				 disp.forward(request, response);
			 }
		 }
	}
}

➕ 프로젝트 경로 얻기

  • ${pageContext.request.contextPath}
    • 예시
      http://localhost:8080/mvcMain/write.do
      -> /mvcMain
    • 경로 깨짐을 방지하기 위해 다음과 같이 사용

0개의 댓글