MVC资源访问
关于静态资源的访问与动态资源的访问,在MVC中有专门的配置驱动,可以将情况分为以下4种:
<mvc:default-servlet-handler>
与<mvc:annotation-driven>
都没有配置- 仅配置
<mvc:default-servlet-handler>
- 仅配置
<mvc:annotation-driven>
- 配置
<mvc:default-servlet-handler>
与<mvc:annotation-driven>
1-都没有配置
这种情况下的结论是,使用@RequestMapping映射资源能够访问,但静态资源无法访问
原因是:请求进入DispatcherServlet
后,找到了HandlerMappings
列表属性,这个属性中有DefaultAnnotationHandlerMapping
对象,
DefaultAnnotationHandlerMapping
对象中的handlerMap
帮助我们对@RequestMapping注释的资源进行处理,但没有能够对静态资源进行处理的请求。
2-仅配置<mvc:default-servlet-handler>
这种情况下的结论是,仅静态资源可以进行访问
原因是:请求进入DispatcherServlet
后,找到了HandlerMappings
列表属性,这个属性中没有DefaultAnnotationHandlerMapping
对象了,但是又多了一个SimpleUrlHandlerMaping
对象,
这个对象中的handlerMap
把所有的请求都交给了tomcat默认的servlet进行处理,所以就是,所有的请求,最后都交给了tomcat服务器进行处理,配置的统统无效。
3-仅配置<mvc:annotation-driven>
这种情况下的结论是,仅动态资源可以进行访问
原因是:请求进入DispatcherServlet
后,找到了HandlerMappings
列表属性,这个属性中存在RequestMappingHandlerMapping
,它使用handlerMethods
处理i请求,但SimpleUrlHandlerMaping
消失了,把请求无法交给tomcat的,所以静态资源最后没有办法访问。
4-配置了<mvc:default-servlet-handler>
与<mvc:annotation-driven>
这种情况下的结论是,配置的静态与动态资源都可以被访问
原因是:原因是:请求进入DispatcherServlet
后,找到了HandlerMappings
列表属性,这个属性中,以前的DefaultAnnotationHandlerMapping
对象过时了,使用了一个新的RequestMappingHandlerMapping
进行代替,
还有SimpleUrlHandlerMaping
对象也出现了,RequestMappingHandlerMapping
中的handlerMethods
属性中保存了每一个请求的处理方法,
SimpleUrlHandlerMaping
把匹配不到的剩余请求发送给tomcat进行处理,所以可以让动态与静态请求都可以被访问。