mvc:default-servlet-handler标签的作用

最近在复习 Spring MVC 的时候,通过官方的文档弄清楚了一个以前不太理解的标签<mvc:default-servlet-handler/>,写出来分享一下。

在开发 RESTful 架构的 URI 时,我们都会在web.xml中将前端控制器的映射请求设置为"/"
这里写图片描述

关于配置成"/",在 Spring 的官方文档中这样描述:

The caveat to overriding the “/” Servlet mapping is that the RequestDispatcher for the default Servlet must be retrieved by name rather than by path.

大概意思是默认 Servlet 的 RequestDispatcher 必须通过名称而不是路径来检索。 换句话说就是 Spring MVC 将接收到的所有请求都看作是一个普通的请求,包括对于静态资源的请求。这样以来,所有对于静态资源的请求都会被看作是一个普通的后台控制器请求,导致请求找不到而报 404 异常错误。查看 tomcat 的日志会报一个警告:
这里写图片描述

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

一般 WEB 应用服务器默认的 Servlet 都是 default。如果默认 Servlet 用不同名称自定义配置,或者在缺省 Servlet 名称未知的情况下使用了不同的 Servlet 容器,则必须显式提供默认 Servlet 的名称,如下:

<mvc:default-servlet-handler default-servlet-name="myCustomDefaultServlet"/>
相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论 11

打赏作者

留兰香丶

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值