个人博客 www.ylhwan.com URL匹配规则有如下几种: (1)精准匹配 中的配置项必须与URL完全精确匹配
spring-dispatcher /ay /index.html /test/ay.html当在浏览器中输入如下几种URL,都会被匹配到该Servlet,具体代码如下
http://localhost/ay http://localhost/index.html http://localhost/test/ay.html(2)拓展名匹配 以"*"开头的字符串被用于拓展名匹配
<servlet-mapping> <servlet-name>spring-dispatcher</servlet-name> <!-- 扩展名匹配 --> <url-pattern>*.jsp</url-pattern> </servlet-mapping>当在浏览器输入如下几种URL时,都会被匹配到该Servlet,具体代码如下:
http://localhost/ay.jsp http://localhost/al.jsp(3)路径匹配 以"/“字符开头,并”/*"结尾的字符串用于路径匹配
spring-dispatcher /ay/*当在浏览器中输入如下几种URL时,都会被匹配到该Servlet,具体代码如下:
http://localhost/ay/ay.jsp http://localhost/ay/ay.html http://localhost/ay/action http://localhost/ay/xxxx http://localhost/ay/xxxx.do注:路径匹配和拓展名匹配无法同时设置,如果设置,启动tomcat服务器会报错。如下三种匹配规则是错误的:
<url-pattern>/kata/*.jsp</url-pattern> <url-pattern>/*.jsp</url-pattern> <url-pattern>he*.jsp</url-pattern>(4) 默认匹配
<servlet-mapping> <servlet-name>spring-dispatcher</ servlet-name><!-- 默认匹配所有请求 -- > <url-pattern>/</url-pattern> </servlet-mapping> (5)匹配顺序当一个URL与多个Servlet的匹配规则可以匹配,则按照"精准路径>最长路径>扩展名"这样的优先级匹配到对应的Servlet。 例:
比如ServletA的url-pattern为/test, ServletB 的url-pattern为/*,如果访问的URL路径为http://localhost/test,容器会优先进行精确路径匹配,发现/test正好被ServletA精确匹配,那么就会去调用ServletA,而不是ServletB。
比如ServletA的url-pattern为/test/,而ServletB的url- pattern为/test/a/,如果访问的URL路径为http://localhosvtest/a,容器会选择路径最长的Servlet来匹配,也就是ServletB。
比如ServletA的url-pattern: * action,ServletB 的url-patterm为/*。如果访问的URL路径为htp://localhost/test.action,容器会优先进行路径匹配,而不是扩展名匹配,这样就去调用ServletB。