18910140161

Servlet的url-pattern匹配规则

顺晟科技

2021-06-16 10:44:36

343

1.笔迹

完全匹配:以“/”开头,以字母结尾(不是“*”)

例如:网址模式/测试/列表.做/网址模式

目录匹配:以“/”开头,以“/*”结尾

例如网址模式/测试/*/网址模式

URL-模式/*/URL-模式

扩展名匹配:以“*”开头并以扩展名结尾

例如url模式*。do/URL-模式

用“/”表示对应的Servlet是应用默认的Servlet。在这种情况下,Servlet路径是没有上下文路径的请求的URI,路径信息为空。

2.匹配过程

当一个请求被发送到servlet容器时,容器将首先从请求的url中减去当前应用程序上下文的路径,作为servlet的映射url。比如我访问了http://localhost/test/aaa.html,我的应用上下文是test,容器会去掉http://localhost/test,剩下的/aaa.html用于servlet的映射匹配。映射匹配过程是顺序的,当一个servlet匹配成功时,剩下的servlet将被忽略(过滤器不同,后面会提到)。匹配规则和顺序如下:o:p/o:p

1.的路径匹配。示例:例如,servletA的url-pattern为/test,servletB的url-pattern为/*。这时候如果我访问的url是http://localhost/test,容器会先匹配路径,发现/test被servletA匹配,我就调用servletA,忽略其他servlet。o:p/o:p

2.最长路径匹配。例如:servletA的url-pattern是/test/*,而servletB的url-pattern是/test/a/*。当访问http://localhost/test/a时,容器会选择路径最长的servlet进行匹配,这里就是servletB。o:p/o:p

3.扩展名匹配,如果url的最后一段包含扩展名,容器会根据扩展名选择合适的servlet。示例:servletA的URL-模式:*。actiono:p/o:p

4.如果在前三个规则中没有找到servlet,容器将根据url选择相应的请求资源。如果应用程序定义了一个默认的servlet,容器会将请求抛出到默认的servlet

=================================================

1.jetty7中的例子:优先选择匹配,然后*。js和*。css,最后默认匹配

小型应用程序

servlet-name default/servlet-name

servlet-class com . Alibaba . servlet . sample . servletimport/servlet-class

/servlet

小型应用程序

servlet-name jsservlet/servlet-name

servlet-class com . Alibaba . servlet . sample . jsservlet/servlet-class

/servlet

servlet映射

servlet-name jsservlet/servlet-name

url模式*。js/URL-模式

/servlet-映射

小型应用程序

servlet-name CSS servlet/servlet-name

servlet-class com . Alibaba . servlet . sample . CSSSservlet/servlet-class

/servlet

servlet映射

servlet-name CSS servlet/servlet-name

url模式*。CSS/URL-模式

/servlet-映射

小型应用程序

servlet-name okservlet/servlet-name

servlet-class com . Alibaba . servlet . sample . okservlet/servlet-class

/servlet

servlet映射

servlet-name okservlet/servlet-name

URL-模式/ok . htm/URL-模式

/servlet-映射

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航