Programing_Java

[FrontController] JSP에서 서블릿으로의 전환: FrontController 패턴 적용하기 본문

JAVA_

[FrontController] JSP에서 서블릿으로의 전환: FrontController 패턴 적용하기

Joyfullyever 2025. 3. 20. 22:03

✅ Servlet으로 FrontController 패턴 구현하기

 

1️⃣ Servlet으로의 전환

• 기존에는 [ controller.jsp?action=MAINPAGE ]와 같이 항상 액션 파라미터를 받아와야 했음

→ 서블릿으로 바꾸는 작업을 통해 더 깔끔한 구조를 만들 수 있음

• JSP는 원래 View 역할만 함. Java언어를 사용하는 부분은 제한적

• JSTL, EL, 그리고 Custom Tag를 활용해 View 로직을 처리

→ Controller는 Servlet으로 처리해주는 것이 적합

→ "VIEW 는 VIEW 답게!"

 

2️⃣ FrontController 패턴

• FrontController 패턴은 모든 요청을 하나의 서블릿이 처리, 서블릿이 요청을 분기하여 알맞은 처리를 하도록 유도

FrontController.java는 일종의 안내 데스크 역할

 

3️⃣ FrontController 구현 예시

• @WebServlet("*.do") 어노테이션을 사용하여 모든 .do 요청을 처리하도록 설정

• doAction() 메서드는 요청 URI를 분석하고, 알맞는 처리 로직을 분기

• ActionFactory는 요청에 맞는 액션 객체를 생성하여 해당 작업을 처리

 

FrontController.java 코드
@WebServlet("*.do")
public class FrontControllerDo extends HttpServlet {
	private static final long serialVersionUID = 1L;
    private ActionFactory factory;   
	
    public FrontControllerDo() {
        super();
        factory = new ActionFactory();
    }
    
    private void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    	String command = request.getRequestURI();
    	System.out.println("CTRL 로그 : action ["+command+"]");
    	command = command.replace("/honeyComboFactory/", "");
    	System.out.println("COMMAND ["+command+"]");
    	
    	Action action = factory.getAction(command);
    	ActionForward forward = action.execute(request);
    	
    	if(forward == null) {
    		response.sendRedirect("error/errorPage.jsp");
    	}

    	if(forward.isRedirect()){
    		response.sendRedirect(forward.getPath());
    	}
    	else{
    		RequestDispatcher dispatcher = request.getRequestDispatcher(forward.getPath());
    		dispatcher.forward(request, response);
    	}
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("로그 [GET] 요청 호출됨");
		doAction(request,response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("로그 [POST] 요청 호출됨");
		doAction(request,response);
	}
}

 

4️⃣ 액션 클래스 및 액션 팩토리

• 액션 클래스는 execute() 메서드를 통해 요청에 맞는 처리를 담당

• ActionFactory는 URI를 기반으로 해당 액션을 찾아 반환하는 역할

 

5️⃣ 페이지 포워딩

• 서블릿에서 뷰를 처리할 때는 RequestDispatcher를 사용하여 JSP로 데이터를 포워딩

• dispatcher.forward(request,response)를 통해 JSP 페이지로 요청을 전달, 해당 JSP 페이지에서 뷰를 렌더링

 

6️⃣ URL 패턴과 파라미터 처리

detailPage.do?bum=<%data.getBnum()%>

위와 같이 URL에 파라미터를 포함하여 요청을 보낼 수 있음

• doGet이나 doPost에서 파라미터를 받아서, 해당 데이터를 처리한 후 뷰에 전달

 

✔️ JSP에서 서블릿으로의 전환은 구조적으로 훨씬 깔끔하고 확장성 잇는 애플리케이션 생성 가능

✔️ FrontController 패턴을 적용하면 요청을 중앙에서 처리가 가능하여, 유지보수와 확장이 용이

✔️ JSP는 오직 뷰를 담당하게 하여, 코드의 역할 분담을 명확히 할 수 있음

✔️ 뷰 로직과 비즈니스 로직이 분리 → 코드의 가독성이 높아지고, 유지보수가 쉬워짐