springmvc进阶(3):mvc:annotation-driven和mvc:default-servlet-handler在springmvc中的作用

在springmvc.xml中,经常会配置下面来看下这两个配置有什么作用吧:

1、两者都不配置
springmvc进阶(3):mvc:annotation-driven和mvc:default-servlet-handler在springmvc中的作用_第1张图片
如果两个都没有配置,springmvc容器初始化时会默认读取DispatcherServlet.properties中的默认参数加载HandlerAdapter, HandlerExceptionResolver和HandlerMapping,还有其他很多默认加载项,这里就不一一列举。重点看这三项:

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
    org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

2、仅配置
springmvc进阶(3):mvc:annotation-driven和mvc:default-servlet-handler在springmvc中的作用_第2张图片

可见仅仅配置了时,框架主要注入了SimpleUrlHandlerMapping,并去掉了AnnotationMethodHandlerAdapter 和DefaultAnnotationHandlerMapping。
为什么这样?因为这里用不上AnnotationMethodHandlerAdapter 和DefaultAnnotationHandlerMapping了!当只配置时,所有请求都交给默认的servlet进行处理了,dispatchServlet也就无法发挥相应的功能了,所有这里对于处理器请求的解析和处理也就不需要了。

3、仅配置
springmvc进阶(3):mvc:annotation-driven和mvc:default-servlet-handler在springmvc中的作用_第3张图片

的作用:

  • 注入RequestMappingHandlerAdapter替代AnnotationMethodHandlerAdapter
  • 注入ExceptionHandlerExceptionResolver替代AnnotationMethodHandlerExceptionResolver
  • 注入RequestMappingHandlerMapping替代DefaultAnnotationHandlerMapping

4、两者都配置
springmvc进阶(3):mvc:annotation-driven和mvc:default-servlet-handler在springmvc中的作用_第4张图片

一般我们会两个同时配置

你可能感兴趣的:(springmvc,springmvc)