一、精确匹配(全路径)
1.url-pattern中配置的项必须与url完全精确匹配才能访问
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/mark/index.html</url-pattern>
<url-pattern>/demo.jsp</url-pattern>
<url-pattern>/mark</url-pattern>
</servlet-mapping>
当在浏览器中输入如下几种url时,都会被匹配到该servlet
http://localhost:8080/hello/mark/index.html
http://localhost:8080/hello/demo.jsp
http://localhost:8080/hello/mark
2.注意
http://localhost:8080/hello/mark/ 是非法的url
不会被当作http://localhost:8080/hello/mark 识别
3.另外上述url后面可以跟任意的查询条件,都会被匹配
http://localhost:8080/hello/mark ?18这个请求就会被匹配到MyServlet
二、路径匹配(前半段匹配)
1.以 / 开始 ,但是以 * 结束
请求的ulr只要前面的路径是/mark,而后面的路径可以任意
<url-pattern>/mark/*</url-pattern>
当在浏览器中输入如下几种url时,都会被匹配到该servlet
http://localhost:8080/hello/mark/test/index.jsp
http://localhost:8080/hello/mark
http://localhost:8080/hello/mark/
2.路径和扩展名匹配无法同时设置
比如下面的三个<url-pattern>都是非法的
<url-pattern>/mark/*.jsp</url-pattern>
<url-pattern>/*.jsp</url-pattern>
<url-pattern>ma*.jsp</url-pattern>
三、扩展名匹配
任何扩展名为jsp(文件名和路径任意)的url请求都会匹配
<url-pattern>*.jsp</url-pattern>
四、缺省匹配
所有的url都可以被匹配上
<url-pattern>/</url-pattern>
五、匹配优先级
精确匹配-------- 路径匹配(先最长路径匹配,再最短路径匹配) -------- 扩展名匹配 -------- 缺省匹配
六、/*与/都可以匹配所有url
/* 属于路径匹配,并且可以匹配所有请求,由于路径匹配的优先级优于精确匹配,所以“/*”会覆盖所有的扩展名匹配,匹配范围更广,如路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)都可以匹配,一般用于filter的url-pattern
/ 是Servlet中特殊的匹配模式,且该模式有且仅有一个实例,优先级最低,不会覆盖其他任何url-pattern,会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url。只是会替换Servlet容器的内建default servlet ,该模式同样会匹配所有请求