1. DispatcherServlet의 위임 구조
- DispatcherServlet는 WebApplicationContext의 대리 구성요소들에 작업을 위임하여 요청을 처리합니다.
- 대리 구성요소는 Spring IoC Container에 Bean으로 등록되어 적절하게 사용됩니다. (커스터마이징 가능)
2. 처리 흐름
단계 | 설명 |
관련 구성요소 (전략)
|
1. 요청 수신 | 클라이언트의 HTTP 요청이 DispatcherServlet에 도착 | - |
2. Handler 찾기 | 요청 URL에 맞는 컨트롤러(핸들러)를 찾음 |
HandlerMapping
(RequestMappingHandlerMapping) |
3. HandlerAdapter 선택 | 찾은 Handler를 실행할 수 있는 Adapter를 선택 |
HandlerAdapter
(RequestMappingHandlerAdapter) |
4. 핸들러 실행 | 실제 비즈니스 로직이 실행됨 (@Controller, @RestController) |
Controller
ArgumentResolver |
5. 예외 발생 시 처리 | 예외가 발생한 경우, 해결할 수 있는 Resolver를 탐색 | HandlerExceptionResolver |
6. ModelAndView 반환 | 핸들러가 처리 결과를 ModelAndView 형태로 반환 | - |
7. View 이름 해석 | 논리적 뷰 이름을 실제 뷰로 변환 |
ViewResolver
(JSP, Thymeleaf 등) |
8. View 렌더링 | View에 Model 데이터를 바인딩하고 HTML 생성 |
View 객체
(JstlView) |
9. 응답 반환 |
렌더링된 결과를 HTTP Response로 클라이언트에 전송
|
3. 대리 구성요소
구성 요소 | 설명 |
주요 구현체 / 특징
|
HandlerMapping | 웹 요청을 적절한 핸들러에 연결 |
RequestMappingHandlerMapping: @RequestMapping
SimpleUrlHandlerMapping: 명시적 URL 패턴 매핑 |
HandlerAdapter | 핸들러 호출을 지원 요청 처리에 대한 세부사항을 숨김 |
요청마다 다른 핸들러의 호출 방식을 추상화
애노테이션 해석, 바인딩, 변환 등 지원 |
HandlerExceptionResolver | 예외 처리 전략 담당 |
예외를 HTML 뷰 또는 특정 핸들러에 매핑
|
ViewResolver | 논리적인 뷰 이름을 실제 뷰로 변환 |
InternalResourceViewResolver
ThymeleafViewResolver |
LocaleResolver LocaleContextResolver |
요청자의 언어 및 시간대 해석 |
국제화(i18n) 지원
|
ThemeResolver | 사용자 테마 해석 |
사용자별 테마 적용 가능 (스킨, 스타일 변경 등)
|
MultipartResolver | 파일 업로드 요청 처리 |
CommonsMultipartResolver
StandardServletMultipartResolver 등 |
FlashMapManager | 리디렉션 간 데이터 전달 (Flash Attribute 저장 및 검색) |
주로 POST-Redirect-GET 패턴에서 사용됨
|
설정) ViewResolver
더보기
Thymeleaf
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig implements WebMvcConfigurer {
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setPrefix("classpath:/templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML");
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
engine.setEnableSpringELCompiler(true);
return engine;
}
@Override // 뷰 리졸버 등록
public void configureViewResolvers(ViewResolverRegistry registry) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
resolver.setCharacterEncoding("UTF-8");
registry.viewResolver(resolver);
}
}
- SpringResourceTemplateResolver: 템플릿의 위치, 형식, 인코딩 등을 지정하는 객체
- SpringTemplateEngine: 타임리프의 엔진 (템플릿 처리 로직의 핵심 클래스)
출처
'Spring > Spring MVC' 카테고리의 다른 글
[Spring MVC] 4-3. Handler Methods: Controller Advice (0) | 2023.10.17 |
---|---|
[Spring MVC] 5. @InitBinder (1) | 2023.10.17 |
[Spring MVC] 4-2. Handler Methods: Type Conversion (0) | 2023.10.17 |
[Spring MVC] 4-1. Handler Methods: Method Arguments (2) | 2023.10.17 |
[Spring MVC] 1-1. DispatcherServlet: Context Hierarchy (1) | 2023.10.16 |