티스토리 뷰

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함