Dispatcher-Servlet이란(What):
Dispatcher-Servlet은 Spring MVC에서 핵심이다.
Dispatcher-Servlet은 클라이언트에서 들어오는 요청을 가장 먼저 처리하여 해당 컨트롤러에 전달한다.
프론트 컨트롤러(Front Controller)라고도 한다.
Dispatcher-Servlet 사용하는 이유(Why):
디스패처 서블릿으로 인해 각 컨트롤러에 있는 공통 코드에 대해서 처리가 가능하다.
디스패처 서블릿 하나로 모든 클라이언트 요청을 받을 수 있기 때문
-> 들어오는 요청을 한 곳에서 다 받음 -> 편리함
디스패처 서블릿을 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 되기 때문
Dispatcher-Servlet 사용하는 방법(How):
1. FrontControllerServletV1 클래스를 만들고 HttpServlet을 상속받는다.
@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {
2. Map을 만든다. Key는 String, Value는 ControllerV1 인터페이스로 이루어져 있다.
protected Map<String, ControllerV1> controllerMap = new HashMap<>();
3. 생성자를 만드는데 key는 url, value는 인터페이스를 구체적으로 구현하는 자식 클래스로 설정한다.
public FrontControllerServletV1() {
controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1());
controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1());
controllerMap.put("/front-controller/v1/members", new MemberListControllerV1());
}
4. url(위치) 매핑 정보에서 컨트롤러를 조회한다.
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String requestURI = request.getRequestURI();
ControllerV1 controller = controllerMap.get(requestURI);
if(controller == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
controller.process(request, response);
}
getRequestURI()는 url에서 uri를 식별한다.
Dispatcher-Servlet인 FrontContollerServletV1 전체코드
@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {
protected Map<String, ControllerV1> controllerMap = new HashMap<>();
public FrontControllerServletV1() {
controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1());
controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1());
controllerMap.put("/front-controller/v1/members", new MemberListControllerV1());
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("FrontControllerServletV1.service");
String requestURI = request.getRequestURI();
ControllerV1 controller = controllerMap.get(requestURI);
if(controller == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
controller.process(request, response);
}
}
참고:
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
'Spring > MVC' 카테고리의 다른 글
[MVC] 정수 오버플로우 예외 처리 - GlobalExceptionHandler 활용 (0) | 2024.09.05 |
---|---|
[MVC] 웹 페이지 성능 최적화: EhCache를 활용한 데이터 캐싱 구현 (0) | 2024.05.31 |
[MVC] @PathVariable, @RequestParam 사용법, 언제 사용하는지 (0) | 2024.05.20 |
[MVC] MVC1, MVC2 차이점 (0) | 2024.05.07 |
댓글