welcome-file-list和Spring-MVC的DispatcherServlet、@RequestMapping

  今天在写项目时,发现了这样一个现象:初始状态是这样的,web-app下有一个index.html,web.xml将这个index.html配置为欢页;WEB-INF下有一个index.jsp;只写了一个没有添加@RequestMapping做窄化请求的Controller类,这个Controller只有一个@RequestMapping("/index")的方法;DispatcherServlet的url-pattern为"/"。然后当浏览器访问http://localhost:8080时,我本以为出现的应该是欢迎页index.html,但是却出现了index.jsp。

  这让我感到奇怪,欢迎页<welcome-file-list>和DispatcherServlet的优先级到底是怎样的?如果是DispatcherServlet的优先级更高,那么"/"的请求为什么会被@RequestMapping("/index")响应?接着我做了几个实验。

实验1:把@RequestMapping("/index")修改为@RequestMapping("/index/"),后面加了个斜杠,此时再访问http://localhost:8080,返回的是404,也就是说不再能够匹配到@RequestMapping。

实验2:恢复初始状态,把index.html改为test.html,同时修改web.xml里的欢迎页为test.html,访问http://localhost:8080,返回404。综合上面一个实验,只要使html和@RequestMapping异名就不会匹配到@RequestMapping。

实验3:恢复初始状态,把DispatcherServlet的时候url-pattern改为其他,使它不再拦截"/",访问http://localhost:8080,返回欢迎页index.html。

  上面几个实验只能说明"/"的请求既被web.xml的欢迎页响应,也被DispatcherServlet响应。花了半天多的时间,看了很多资料,也找了几个人问了问,最后还是没有弄明白产生这个现象的机制。如果不是配置上的错误,那么也许要到以后看Tomcat、Spring MVC源码才能弄清楚了吧。

  上传源码,留待填坑。点击打开链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vansl

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值