티스토리 뷰
스프링 부트의 스프링 MVC 설정
handlerMappings
-
SimpleUrlHandlerMapping
- 파비콘 요청을 처리해주는 mapping
-
RequestMappingHandlerMapping
- 애노테이션 기반의 MVC를 mapping
- order : 0
-
BeanNameUrlHandlerMapping
-
SimpleUrlHandlerMapping
-
resourceHandlerMapping
-
src/main/resources/static 디렉토리 안에 들어있는 static한 리소스들에 캐싱 관련된 정보들이 추가된다.
-
Ex. 리소스 변경이 이루어지지 않을 시 not modified라는 응답(304)을 보내, 브라우저가 캐싱하고 있는 리소스를 그대로 사용할 수 있도록 처리해준다.
-
스프링 부트가 설정해놓은 static한 디렉토리 경로들
-
-
-
WelcomePageHandlerMapping
- resourceHandlerMapping
handlerAdpaters
- RequestMappingHandlerAdapter
- 실제 요청을 처리하는, 핸들러를 실행해줄 수 있는 adapter
- 애노테이션 기반의 requestMapping을 처리해줄 수 있는 adapter
- HttpRequestHandlerAdapter
- SimpleControllerHandlerAdapter
viewResolvers
-
ContentNegotiatingViewResolver
-
ContentNegotiatingViewResolver는 직접 view 이름에 해당하는 viewResolver를 찾는 것이 아니라, 밑 네개의 viewResolver들에게 위임하는 것이다.
-
그래서 ContentNegotiatingViewResolver는 네개의 viewResolver를 참조하고 있고, 요청 정보를 분석하여 적절한 viewResolver를 선택하는 것이다.
-
그래서 우선 순위가 가장 높다! 즉, -214...이다.
-
-
ThymleafViewResolver의 경우 우리가 추가해줘서 viewResolver에 추가된 것이다.
스프링 부트의 주관이 적용된 자동 설정이 동작한다.
-
JSP보다 Thymleaf를 선호
-
JSON 지원
-
정적 리소스 지원
-
즉, 스프링 부트를 사용하게 되면, 다른 설정이 지정되어 있지 않아도 자동 설정을 활용하여 어플리케이션을 개발할 수 있다.
-
Ex. autoconfigure에 thymeleaf를 활용한 경우
@GetMapping("/events") public String events(Model model) { model.addAttribute("events", eventService.getEvent()); return "events"; }
- prefix = classpath:/templates
- suffix = .html
- autoconfigure에 prefix와 suffix가 default로 설정되어 있어, resources/templates/events.html에 설정한 view를 찾아갈 수 있는 것이다.
-
스프링 MVC 설정 커스터마이징
-
application.properties(스프링 부트)
#Ex prefix, suffix 커스터마이징 spring.thymeleaf.prefix = "classpath:/static" spring.thymeleaf.suffix = ".html"
-
@Configuration + Implements WebMvcConfigurer : 스프링 부트의 스프링 MVC 자동설정 + 추가 설정
- 가장 합리적인 방법으로서, 스프링 부트가 제공하는 모든 설정을 사용하면서 사용자가 필요로하는 설정만 추가하는 방법이다.
@Configuration public class WebConfig implements WebMvcConfigurer { //dispatcherServlet 재정의 @Override public void addFormatters(FormatterRegistry registry) { } }
- @Configuration + @EnableWebMvc + Implements WebMvcConfigurer : 스프링 부트의 스프링 MVC 자동설정을 사용하지 않은 것.
-
@EnableWebMvc를 사용하게 되면,
@Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/", ".jsp"); } }
-
@EnableWebMvc가 import하는 @Import({DelegatingWebMvcConfiguration.class})이 들어오면서 configureViewResolvers 메소드 등 구현한 메소드들이 빈으로 등록이 된다.
-
그로 인해, WebConfig 및 DispatcherServlet을 커스텀한 메소드들이 빈으로 등록되어 있기 때문에, 다시 말해 WebMvcConfigurationSupport에 해당하는 빈들이 있기 때문에
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport { }
-
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class}) ... public class WebMvcAutoConfiguration { }
- @ConditionalOnMissingBean({WebMvcConfigurationSupport.class})의 조건에 대해 위배되면서 WebMvcAutoConfiguration 클래스의 설정파일(스프링 부트에서 사용하는 설정파일)을 사용하지 않게 되는 것이다.
- Implements WebMvcConfigurer를 사용하는 이유는 DispatcherServlet을 커스터마이징하기에 편함으로 사용하는 것이다.
- Implements WebMvcConfigurer를 사용하지 않으면, DispatcherServlet을 커스터마이징하기 위해 일일히 Bean으로 설정해줘야 한다.
'Spring > Spring 웹 MVC' 카테고리의 다른 글
[스프링 웹 MVC] WebMvcConfigurer 인터페이스 (0) | 2020.04.07 |
---|---|
[스프링 웹 MVC] @EnableWebMvc (0) | 2020.04.06 |
[스프링 웹 MVC] 스프링 MVC 빈 설정 (0) | 2020.04.06 |
[스프링 웹 MVC] 스프링 MVC 동작 원리 정리 (0) | 2020.03.18 |
[스프링 웹 MVC] DispatcherServlet 동작원리(3) (0) | 2020.03.14 |
- Total
- Today
- Yesterday
- 점층적 생성 패턴
- 이펙티브 자바
- ifPresent
- 생성자
- package-private
- java8
- 연관관계
- 스프링부트
- try catch finally
- try with resources
- Spring
- 이펙티브자바
- 인프런
- JPA
- springboot
- @Lazy
- 빌더 패턴
- java
- Effective Java
- 빈 순환 참조
- flatMap
- 복사 팩토리
- 자바8
- 김영한
- jdk버전
- mustache
- 팩토리 메소드 패턴
- effectivejava
- junit
- 정적팩터리메서드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |