스프링 MVC는 여러 구성요소가 존재하고 이 구성요소들은 작동하는 순서가 있다.
기본적으로 DispatcherServlet은 중간에서 모든 연결을 담당한다.
클라이언트의 요청을 실제로 처리하는 것은 컨트롤러이고 DispatcherServet은 클라이언트의 요청을 전달받는 창구 역할을 한다.
DispatcherServlet은 전달받은 설정 파일을 이용해서 스프링 컨테이너를 생성하는데 HandlerMapping, HandlerAdapter, 컨트롤러, ViewResolver 등의 빈은 DispatcherServlet이 생성한 스프링 컨테이너에서 구한다.
위의 두 개의 객체는 빈 객체인데 이는 스프링 설정에 등록되어 있어야 한다, 이는 @EnableWebMvc 어노테이션만 추가하면 따로 등록을 하지 않아도 된다.
매핑 경로가 '/'안 경우 .jsp로 끝나는 요청을 제외한 모든 요청을 DispatcherServlet이 처리한다.
@EnableWebMvc 애노테이션이 등록하는 HandlerMapping은 @Controller 어노테이션을 적용한 빈 객체가 처리할 수 있는 요청 결로만 대응할 수 있다. 즉, /index.html, /asda.css 등 다른 요청을 처리할 수 있는 컨트롤러 객체를 찾지 못한다.
WebMvcConfigurer 인터페이스에 configureDefaultServletHanding() 메서드가 있는데 이를 사용하면 .jsp 요청이 아닌 다른 요쳥도 처리가 가능하다.
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer{
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/view/", ".jsp");
}
}