Servlet Mapping 中/ 和 /*的区别

首先它们的共同点在于:作用都是用于拦截http://ip:port/context下的所有请求
不同点在于:(1)/ 模式下,Servlet不会拦截 .jsp(仅限于此.html仍会被拦截)格式的请求;而 /* 模式才是真正意义上的拦截所有形式的请求。
(2)在 /*模式下,通过调用HttpServletRequest 对象的getPathInfo()方法,将得到不包含context名称的访问路径;而在 / 模式下,该方法返回始终为null,此时只能转而使用getRequestURI()等方法得到包含context名称的请求路径。

所以在MVC架构中,例如SpringMVC中,如果你把DispatcherServlet对应的Servlet-Mapping匹配模式配置为 /* 时,即使经过视图解析器得到的访问jsp页面的请求也会再次被拦截,从而无法得到将要访问的页面而报错。所以应配置为 /。

原因探讨:参考社区http://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern关于这一点的讨论
我大致将社区中的讨论结果总结陈列如下:
(1)web server有几个默认的servlet,其Servlet-Mapping映射路径包括“*.jsp”(用于处理jsp页面响应),以及“”(用于默认页面响应)等
(2)“/*”会覆盖掉以上所有的默认servlet,从而将所有的请求都拦截了下来
(3)“/”不会覆盖默认servlet,所以默认的“*.jsp”servlet仍然可以正常工作,(精确匹配优先)优先拦截jsp页面请求,并响应。

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值