<mvc:default-servlet-handler/>标签的作用

对于这个问题 Spring MVC 在全局配置文件中提供了一个标签。在 WEB 容器启动的时候会在上下文中定义一个 DefaultServletHttpRequestHandler,它会对DispatcherServlet的请求进行处理,如果该请求已经作了映射,那么会接着交给后台对应的处理程序,如果没有作映射,就交给 WEB 应用服务器默认的 Servlet 处理,从而找到对应的静态资源,只有再找不到资源时才会报错。
 

简单来说,tomcat容器的web.xml中有一个defaultServlet(用于处理静态资源),映射路径是"/",我们自定义的web.xml最终相当于会与容器的web.xml合并,而自定义DispatchServlet一般也是使用"/",导致容器中的defaultServlet被覆盖,从而 静态资源请求 也会被发送到springmvc,springmvc会去找这个路径的映射器(相当于对应的Controller,这是找不到的),配置这个,应该就是在SpringMvc找不到映射路径后,再将其转给tomcat的defaultServlet,这是就可以tomcat就可以正确解析静态资源路径。

静态资源通常都可可以访问,只是在使用url-pattern设置映射要避免使用/或/*这样的拦截,不然spring控制器会误以为是对controller中ServletMapping访问(静态资源显然不会在里面配置),会因为找不到资源而报404

你可能感兴趣的:(mvc,java,tomcat)