Programing_Java
[FrontController] JSP에서 서블릿으로의 전환: FrontController 패턴 적용하기 본문
✅ 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는 오직 뷰를 담당하게 하여, 코드의 역할 분담을 명확히 할 수 있음
✔️ 뷰 로직과 비즈니스 로직이 분리 → 코드의 가독성이 높아지고, 유지보수가 쉬워짐
'JAVA_' 카테고리의 다른 글
[Backend] 🛒 장바구니에서 여러 개의 상품을 한 번에 삭제 (Java, JSP, Servlet) (0) | 2025.03.24 |
---|---|
[Backend] Java Servlet을 활용한 CU 상품 목록 Pagination 구현하기 (0) | 2025.03.21 |
[Listener, Filter] Spring에서 필수적으로 알아야 할 서블릿, 리스너, 필터의 역할과 차이점 (0) | 2025.03.19 |
웹 장바구니 설계 : ArrayList와 Map의 차이점 분석 (0) | 2025.03.10 |
[Controller] 팩토리 패턴을 활용한 액션 관리 및 메모리 절약법 (0) | 2025.03.09 |