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

SpringMVC中的<mvc:default-servlet-handler/>标签确保了静态资源的正确处理。当DispatcherServlet无法找到匹配的控制器时,请求会被转发到默认Servlet,使得Tomcat能够处理静态文件,防止404错误。配置此标签可以避免因URL映射不当导致静态资源无法访问的问题。

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值