这篇文章主要讲解了解决tomcat关于配置servlet的url模式的问题,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
tomcat在配置web . xml的时候,servlet是一个比较重要的问题,在这里讨论一下servlet中的几个痛点
- <李>,servlet url模式的匹配问题李> <李> url模式中<代码>/代码>和<代码>/*> 代码的区别李> <李> url模式的优先级问题李> <李>根路径<代码>/代码>的匹配问题李>
<代码> url模式> 代码有三种匹配模式,分别是路径匹配,精确匹配,后缀匹配
<强> 1.1精确匹配强>
<代码> & lt; url-pattern> 代码>中配置的项必须与url完全精确匹配。
代码举例:point_down:
& lt; servlet-mapping> & lt; servlet-name> MyServlet & lt; url-pattern>/型/detail.html & lt; url-pattern>/demo.html & lt; url-pattern>/table & lt;/servlet-mapping>
当在浏览器中输入如下几种url时,都会被匹配到该servlet
<代码> http://10.43.11.143/myapp/kata/detail。html代码>
<代码> http://10.43.11.143/myapp/demo.html 代码>
<代码> http://10.43.11.143/myapp/table 代码>
注意:
<代码> http://10.43.11.143/myapp/table/代码>是非法的url,不会被当作http://10.43.11.143/myapp/table <代码> 代码>识别
另外上述url后面可以跟任意的查询条件,都会被匹配,如
<代码> http://10.43.11.143/myapp/table& # 63;你好> 代码这个请求就会被匹配到MyServlet。
<强> 1.2路径匹配强>
以“/弊址耐?并以“/*”结尾的字符串用于路径匹配
代码举例:point_down:
& lt; servlet-mapping> & lt; servlet-name> MyServlet & lt; url-pattern> * .jsp & lt; url-pattern> * .action & lt;/servlet-mapping>
路径以/user/开始,后面的路径可以任意。比如下面都的url会被匹配。
<代码> http://localhost: 8080/appDemo/user/users.html 代码>
<代码> http://localhost: 8080/appDemo/user/addUser.action 代码>
<代码> http://localhost: 8080/appDemo/user/updateUser.actionl 代码>
<强> 1.3后缀匹配强>
以“*。“开头的字符串被用于后缀匹配
代码举例:point_down:
& lt; servlet-mapping> & lt; servlet-name> MyServlet & lt; url-pattern> * .jsp & lt; url-pattern> * .action & lt;/servlet-mapping>
则任何扩展名为jsp或行动的网址请求都会匹配,比如下面都的url会被匹配
<代码> http://localhost: 8080/appDemo/user/users.jsp 代码>
<代码> http://localhost: 8080/appDemo/toHome.action 代码>
注意:路径和后缀匹配无法同时设置
注意:路径和扩展名匹配无法同时设置,比如下面的三个都是非法的,如果设置,启动tomcat服务器会报错。
<代码> & lt; url-pattern>/型/* .jsp 代码>
<代码> & lt; url-pattern>/* .jsp 代码>
<代码> & lt; url-pattern>他* .jsp 代码>
几个实例:point_down:,不明白请看本文第三章
<代码> & lt; url-pattern>/& lt;/url-pattern> 代码>
<代码> & lt; url-pattern>/* & lt;/url-pattern> 代码>
先说<代码>/* 代码>,<代码>/*> 代码相对来讲比较好理解,它是路径匹配的一种,从范围上来讲,它是范围最广的路径匹配,所有的请求都符合它的要求,从精度上来讲,它是精度最低的路径匹配(<强>注意!我说的是路径匹配强>),路径匹配的优先级是从长到短的(具体请看本文第三章),所以说它是精度最低的路径匹配。很多博客中说它的特点是匹配<代码> *。jsp代码> ,这不是废话吗? <代码>/* 代码>本身就是路径匹配,它当然可以匹配<代码> *。jsp代码> .
再说<代码>/代码>,<代码>/代码> <强>是匹配优先级最低的匹配>强,当一个url和所有的<代码> url模式> 代码匹配都不合适的时候,这个网址就会走<代码>/代码>匹配,根本就没有什么<代码> *。jsp代码>的限制,大家之所以产生了(客观上也确实是这样)<代码>/代码>不会匹配<代码> *。jsp代码>但是<代码>/*> 代码会匹配<代码> *。jsp代码>的原因是在tomcat/conf/网络。xml里面单独配置了<代码> *。jsp代码