티스토리 뷰
WebMvcContextConfiguration
DispatcherServlet이 실행될 때 읽어들이는 설정파일 #DispatcherServlet
HandlerMappig, HandlerAdapter, 컨트롤러, ViewResolver 빈이 등록되어 있어야 한다
Maven에 WebMvc 의존성 추가 #Maven
1
2
3
4
5
|
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
|
cs |
[WebMvcContextConfiguration.java]
1
2
3
4
5
6
|
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "mypackage.controller" })
public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter {
...
}
|
cs |
line 1,3: #@Configuration, @ComponentScan
line 3: @ComponentScan으로 컨트롤러 빈 등록 #Controller
line 2: @EnableWebMvc
- 어노테이션 기반의 Spring MVC를 구성할 때 필요한 Bean 을 자동으로 설정해주는 어노테이션
- Maven Spring MVC 프로젝트에서 web.xml의 <mvc:annotation-driven/>와 동일한 역할
- DispatcherServlet의 RequestMappingHandlerMapping, RequestMappingHandlerAdapter, ExceptionHandlerExceptionResolver, MessageConverter 등 Web에 필요한 빈들을 대부분 자동으로 등록해준다.
- 기본 설정 이외의 설정이 필요하다면 WebMvcConfigurerAdapter 를 상속받도록 Java config class를 작성한 후, 필요한 메소드를 오버라이딩한다.
- 기본설정 확인: WebMvcConfigurationSupport
line 4: WebMvcConfigurerAdapter
- @EnableWebMvc 를 이용하면 기본적인 설정이 모두 자동으로 되지만, 기본 설정 이외의 설정이 필요할 경우 해당 클래스를 상속 받은 후, 메소드를 오버라이딩하여 구현한다.
[WebMvcContextConfiguration.java]
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
|
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "mypackage.controller" })
public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/META-INF/resources/webjars/").setCachePeriod(31556926);
registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(31556926);
registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(31556926);
registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(31556926);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addViewControllers(final ViewControllerRegistry registry) {
System.out.println("addViewControllers가 호출됩니다. ");
registry.addViewController("/").setViewName("main");
}
@Bean
public InternalResourceViewResolver getInternalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
|
cs |
line 6: addResourcehandlers
- url 요청이 /css/~~로 들어올 때 /css/ 폴더에서 읽어오도록 설정
Tip) 가독성과 유지보수를 위한 상수화 (31556926 sec = 1 year)
1
|
public static final int CACHE_PERIOD = 31556926;
|
cs |
line 15: configureDefaultServletHandling
- default servlet handler를 사용할 수 있다.
- 매핑정보가 없는 url요청은 DefaultServletHttpRequestHandler가 처리
파라미터로 전달받은 DefaultServletHandlerConfigurer의 enable 메소드 호출 = default servlet handler를 사용한다: 매핑정보가 없는 url 요청은 스프링의
was의 default servlet에게 해당 일을 넘김.
line 19: addViewControllers
- 특정 url에 대해서 컨트롤러 클래스를 추가하지 않고 view를 매핑할 수 있다.
- /로 접속 시 main이라고 하는 view가 보여진다.
line 25: getInternalResourceViewResolver
- view name은 view resolver라는 객체를 이용해서 찾는다
- resolver 생성해서 view 이름에 프리픽스, 서픽스를 지정한다
- 찾는 뷰의 최종 루트: [/WEB-INF/view/main.jsp]
이런 설정을 읽어서 DispatcherServlet이 동작한다.
'JAVA > Spring' 카테고리의 다른 글
[Spring] Connection Pool / Spring JDBC (0) | 2019.10.10 |
---|---|
[Spring] Controller(Handler) (0) | 2019.10.09 |
[Spring] Spring MVC / Layered Architecture (0) | 2019.10.06 |
[Spring] [Config] DBConfig (0) | 2019.10.06 |
[Spring] [Config] ApplicationConfig (0) | 2019.10.06 |