陈奇网络工作室

解决配置servletURL-pattern的tomcat问题

服务器

这篇文章介绍了如何解决与组成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

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3