web.xml 中 url-pattern 设置解析
在 web.xml 中使用 filter-mapping、servlet-mapping 节点下的子节点 url-pattern 配置映射。
Pattern 匹配规则
精确匹配
<servlet-mapping>
<servlet-name>indexServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
同时请求 URL 为 /index,这时就是精确匹配。
扩展名匹配
以“*.”开头的字符串被认为是扩展名匹配。
<servlet-mapping>
<servlet-name>indexServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
此时任何以 .action 结尾的 URL (不包括参数部分)就会匹配这条规则。
路经匹配
以“/”字符开头,并以“/*”结尾的字符串用于路径匹配。
<servlet-mapping>
<servlet-name>adminServlet</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
此时任何以 /admin/ 开头的 URL (不包括参数部分)就会匹配这条规则。
路径匹配和扩展名匹配不能z在同一个 pattern 中使用。
匹配优先级
优先级从高到底分别是:精确匹配 > 路径匹配 > 扩展名匹配,其中长路经优先级高于短路经。
匹配例子
| ServletA | ServletB | 请求URL | 匹配结果 | 备注 |
|---|---|---|---|---|
| /index | /* | /index | ServletA | 精确匹配高于路径匹配 |
| /admin/* | /admin/user/* | /admin/user/index | ServletB | 长路径匹配高于短路经 |
| *.action | /* | /index.action | ServletB | 路径匹配高于扩展名匹配 |
特殊 Pattern
特殊 Pattern 有着不同的特殊指代,并且时常在配置 Spring, SpringMVC 框架时使用。
先说两个概念:
- 默认 Servlet:容器自带的处理静态资源、列出目录、文件下载的 Servlet;
- JSP Servlet:处理 jsp 请求的Servlet。
下面是特殊 Pattern 的用法:
/*
/* 覆盖所有其他 Servlet,包括默认 Servlet 和 JSP 处理的 Servlet,使请求无法到达他们两者,造成功能异常。一般之用作Filter配置,可以对所有请求进行过滤。
/
/ 覆盖默认 Servlet,处理没有匹配到任何规则的请求,常用作 MVC 分发控制器的映射。不会覆盖 JSP 处理的 Servlet, JSP 文件能正常访问。
空白字符串
空白字符串的规则匹配 webapp 的根目录,和
完结
特殊 Pattern 部分写得比较零散,读者可以参考英文链接。
浙公网安备 33010602011771号