服务器
这篇文章介绍了如何解决与组成servlet的url-pattern相关的tomcat问题。 内容很清楚,感兴趣的伙伴可以学习一下。 读完之后我觉得会有用。
在tomcat配置web.xml时,servlet是一个比较重要的问题,现在我们将讨论servlet的一些缺点
servlet url-pattern匹配问题在URL-pattern中区分/和/* URL-pattern优先级问题根路径/匹配问题
1 servlet URL-pattern匹配问题
url-pattern有三种匹配模式:路径匹配、精度匹配和后缀匹配
1.1正确匹配
在url-pattern中设置的项目必须与url完全一致。
代码示例: point_down :
servlet地图
servlet-name my servlet/servlet-name
URL-pattern/kata/detail.html/URL-pattern
URL-pattern/demo.html/URL-pattern
url-pattern/table/url-pattern
/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? hello这个请求与我的servlet匹配。
1.2路径匹配
以“/”字符开头并以“/*”结尾的字符串用于路径匹配
代码示例: point_down :
servlet地图
servlet-name my servlet/servlet-name
url-pattern*.jsp/url-pattern
URL-pattern *.action/URL-pattern
/servlet-mapping
路径以/user/开头,后面的路径是可选的。 例如,以下url匹配:
33558 localhost:8080/appdemo/user/users.html
33558 localhost:8080/appdemo/user/adduser.action
33558 localhost:8080/appdemo/user/update user.actionl
1.3匹配后缀
以“* .”开头的字符串用于匹配后缀
代码示例: point_down :
servlet地图
servlet-name my servlet/servlet-name
url-pattern*.jsp/url-pattern
URL-pattern *.action/URL-pattern
/servlet-mapping
扩展名为jsp或action的url请求全部匹配。 例如,以下url匹配
33558 localhost:8080/appdemo/user/users.JSP
33558 localhost:8080/appdemo/to home.action
注意:路径和后缀不能同时设置
注:路径和扩展名不能同时匹配。 例如,以下三个都是非法的。 如果设置,启动tomcat服务器将报告错误。
URL-pattern/kata/*.JSP/URL-pattern
url-pattern/*.jsp/url-pattern
url-patternhe*.jsp/url-pattern
一些例子: point_down :我不知道。 请看正文的第三章
2 url-pattern中/与/*的差异
url-pattern//url-pattern
url-pattern/*/url-pattern
首先/*,/*相对容易理解。 这是一种路径匹配,范围最广,所有要求都满足其要求,精度最低(称为路径匹配),因为路径匹配的优先级从长到短(具体很多博客都说其特征匹配*.jsp,这不是无稽之谈吗? /*本身就是路径匹配,当然也要匹配*.jsp。
/,/是匹配优先顺序最低的匹配。 当一个url与所有url-pattern不匹配时,此url会去/匹配。 *.jsp完全没有限制。 大家产生的与(客观上也确实如此).JSP不一致,但/*与).JSP一致的理由是
3 url-pattern优先级问题
如果一个url和多个servlet的匹配规则匹配,则按照“匹配最长路径后缀精确”的优先级匹配相应的servlet。
例1 :例如,如果servletA的url-pattern是/test,servletB的url-pattern是/*,此时我访问的url是http://localhost/test,则此时容器先
示例2 :例如,如果servletA的url-pattern为/test/,而servletB的url-pattern为/test/a/,则当您访问http://localhost/test/a时
例如,servletA的url-pattern:*.action,servletB的url-pattern为/*,此时,我访问的url为http://localhost/test.action
那么,就产生了一个疑问。 为什么/*匹配*.jsp而/不匹配*.jsp呢
原因很简单,tomcat/conf/web.xml具有以下配置
servlet地图
servlet-name default/servlet-name
url-pattern//url-pattern
/servlet-mapping
! --- themappingsforthejsp servlet--
servlet地图
servlet -名称JSP/servlet -名称
url-pattern*.jsp/url-pattern
url-pattern*.jspx/url-pattern
/servlet-mapping
: point _ up _2:很明显,*.jsp匹配作为名为JSP的servlet的后缀。 /*是路径匹配,优先级高于后缀匹配,因此可以匹配后缀为JSP的文件。 jsp文件的url-pattern不与/匹配,因为/是最低级别的匹配,级别低于后缀匹配。
4条路径/的匹配问题
当url-pattern为/*时,访问http://localhost:8080/会404应该会出现问题,但访问http://localhost:8080/index.html没有问题(如果url-pattern为/,则会自动将http://localhost:8080/传输到http://localhost:8080/index.html,而不是404。 原因是什么呢?
首先,必须明确网站根目录/(例如http://localhost:8080/)意味着什么。 实验结果表明/很特殊,它与url-pattern匹配/*,但他不与url-pattern匹配/。
在tomcat中,/缺省情况下与defaultservlet匹配,但如果某个servlet的url-pattern为/*,则/与此servlet匹配,因为它的优先级低于路径
在tomcat源代码中找到以下片段可以证实我的观点。 point_down :
! ==================defaultwelcomefilelist================defaultwelcomefilelist======================
! whenarequesturireferstoadirectory,thedefaultservletlooks
! fora & amp; #039; 欢迎文件& amp; #039; withinthatdirectoryand,if present,to the
! correspondingresourceurifordisplay .
! ifnowelcomefilesarepresent,thedefaultservleteitherservesa
! 目录列表( seedefaultservletconfigurationonhowto
! customize ( orreturnsa 404 status,depending on the value of the -) )。
! 列表设置.
!
! ifyoudefinewelcomefilesinyourownapplication & amp; #039; sweb.XML
! 部署描述符,that list * replaces * the list configured
! here,sobesuretoincludeanyofthedefaultvaluesthatyouwish
! tousewithinyourapplication。
: point_up_2:以上是Welcome File List的故事。 这意味着/路径将默认传输到Welcome File List中指定的网页或初始页面。 翻译上面的部分。 具体可以用谷歌翻译。 翻译: point_right :
示例: point_down :
如果请求URI指向某个目录,则缺省servlet会在该目录中查找欢迎文件,如果存在,则会在相应的资源URI中查找并显示。 如果没有起始文件,缺省servlet将提供目录列表,或返回到404状态,具体取决于列表设置的值。 有关如何定制默认servlet设置的详细信息,请参见默认servlet设置
被重定向到/欢迎页面的原因是欢迎文件列表的存在,欢迎文件列表发挥效果的前提是必须匹配defaultservlet。 如果某个servlet的url-pattern为/*,则/与此servlet匹配,而不与default servlet匹配。 因此,只有当您定义的servlet的url-pattern为/时,http://localhost:8080/才会自动转发到http://localhost:8080/index.html,而不是404
阅读以上内容,您是否了解更多有关解决tomcat中有关配置servlet URL-pattern的问题的信息? 另外,如果想学习更多内容,欢迎使用信息频道。
详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn