[스프링 MVC 구조]
DispatcherServlet
: Spring MVC에서 프론트 컨트롤러 패턴을 구현한 것.
모든 클라이언트의 요청을 받아들여, 해당 요청을 처리할 적절한 컨트롤러와 매핑한다.
DispatcherServlet.doDispatch()
- https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpServletRequest processedRequest = request;
HandlerExecutionChain mappedHandler = null;
ModelAndView mv = null;
// 1. 핸들러 조회
mappedHandler = getHandler(processedRequest);
if (mappedHandler == null) {
noHandlerFound(processedRequest, response);
return;
}
// 2. 핸들러 어댑터 조회 - 핸들러를 처리할 수 있는 어댑터
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
// 3. 핸들러 어댑터 실행 -> 4. 핸들러 어댑터를 통해 핸들러 실행 -> 5. ModelAndView 반환 mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
}
private void processDispatchResult(HttpServletRequest request, HttpServletResponse response, HandlerExecutionChain mappedHandler, ModelAndView mv, Exception exception) throws Exception {
// 뷰 렌더링 호출
render(mv, request, response);
}
protected void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response) throws Exception {
View view;
String viewName = mv.getViewName();
// 6. 뷰 리졸버를 통해서 뷰 찾기, 7. View 반환
view = resolveViewName(viewName, mv.getModelInternal(), locale, request);
// 8. 뷰 렌더링
view.render(mv.getModelInternal(), request, response);
}
- Handler Mapping과 Handler Adapter
스프링 MVC에서는 기본적으로 어노테이션 기반의 컨트롤러를 대부분 사용하고 있다.
@Controller로 선언된 적절한 컨트롤러를 호출하기 위해, 정의되고 사용되는 것이 다음의 핸들러 매핑과 핸들러 어댑터이다.
[RequestMappingHandlerMapping]
- Controller 클래스나 메소드에 선언된 @RequestMapping과 구체 어노테이션(@GetMapping, @PostMapping 등)을 스캔한다.
- 요청 URL, HTTP 메소드, 파라미터, 헤더 등의 정보를 분석하여 가장 적절한 컨트롤러 메소드를 찾는 역할을 한다.
[RequestMappingHandlerAdapter]
- RequestMappingHandlerMapping에 의해 선택된 컨트롤러 메소드를 실제로 실행한다.
- @RequestBody, @ResponseBody, @RequestParam, @PathVariable 등의 어노테이션을 처리하기 위한 플로우를 제공한다.
- View Resolver
컨트롤러에서 반환된 view 이름을 실제 view 구현으로 매핑하여 렌더링할 수 있도록 한다.
예를 들어 'home' 이라는 view 이름을 반환하면, ViewResolver는 어떤 뷰 기술로 구현된 파일에 연결해야 하는지 결정한다.
'Spring > MVC 1' 카테고리의 다른 글
7. 스프링 MVC - 웹 페이지 만들기 (0) | 2024.03.19 |
---|---|
6. 스프링 MVC - 기본 기능 (0) | 2024.03.18 |
4. MVC 프레임워크 만들기 (0) | 2024.03.14 |
3. 서블릿, JSP, MVC 패턴 (0) | 2024.03.13 |
2. 서블릿 (0) | 2024.03.11 |