@Configuration
@ComponentScan
public class WebConfig {

    @Bean
    public HandlerMapping handlerMapping(){
        RequestMappingHandlerMapping handlerMapping = new RequestMappingHandlerMapping();
        //handlerMapping.setInterceptors();
        handlerMapping.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return handlerMapping;
    }

    @Bean
    public HandlerAdapter handlerAdapter(){
        RequestMappingHandlerAdapter handlerAdapter = new RequestMappingHandlerAdapter();
        handlerAdapter.setArgumentResolvers();
        return handlerAdapter;
    }

    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("WEB-INF/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

위와 같이 DispathcerServlet에서 기본전략으로 구현하는 인터페이스를 직접 빈으로 등록해 설정할 수 있다. 기본전략이 아니라 사용자가 커스텀하여 원하는 기능을 추가로 설정하고 싶을 때 사용한다.(하지만 거의 사용하는 방법은 아니라고 한다.)

조금 더 편리하게 빈을 등록하는 법 – @EnableWebMvc

애노테이션 기반 스프링 MVC를 사용할 때 편리한 웹 MVC 기본 설정법은 @EnableWebMvc 애노테이션을 사용하는 것이다.

@EnableWebMvc 애노테이션을 보면 아래와 같이 정의되어 있다.

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({DelegatingWebMvcConfiguration.class})
public @interface EnableWebMvc {
}

여기서 DelegatingWebMvcConfigurationWebMvcConfigurationSupport를 상속하고 있기에, WebMvcConfigurationSupport내부 코드를 살펴본다.

내부적으로 보면 RequestMappingHandlerMapping,Interceptor등을 셋팅할 수 있는 빈으로 설정된 메소드를 볼 수 있다.

위와 같은 방식으로 설정을 하게 되면, DispathcerServlet이 아니라 WebMvcDelegate방식(확장성을 좋게 하기 위해)으로 각각의 인터페이스 기본 전략을 등록한다.

@EnableWebMvc가 제공하는 빈을 커스터마이징 하는 방법 – WebMvcConfigurer

WebMvcConfigurer@EnableWebMvc가 제공하는 빈을 커스터마이징 할 수 있는 기능을 제공한다. 인터페이스를 사용하면 ViewResolver등을 빈으로 등록하지 않아도, EnableWebMvc가 등록하는 인터페이스를 커스터마이징 하며 원하는 기능대로 처리할 수 있다.


@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/",".jsp");
    }
}

위 코드는 ViewResolver를 커스터마이징해서 prefix를 /WEB-INF/, suffix를 .jsp로 추가해주었다. 위와 같은 방법은 Spring Boot없이 스프링 MVC를 설정해주는 방법이다.


참고자료

  1. 스프링 웹 MVC

oksusutea's blog

꾸준히 기록하려고 만든 블로그