web.xml 中 url-pattern 设置解析

在 web.xml 中使用 filter-mapping、servlet-mapping 节点下的子节点 url-pattern 配置映射。

Pattern 匹配规则

精确匹配

配置和请求的 URL 完全相同。

<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 框架时使用。

先说两个概念:

  1. 默认 Servlet:容器自带的处理静态资源、列出目录、文件下载的 Servlet;
  2. JSP Servlet:处理 jsp 请求的Servlet。

下面是特殊 Pattern 的用法:

/*

/* 覆盖所有其他 Servlet,包括默认 Servlet 和 JSP 处理的 Servlet,使请求无法到达他们两者,造成功能异常。一般之用作Filter配置,可以对所有请求进行过滤。

/

/ 覆盖默认 Servlet,处理没有匹配到任何规则的请求,常用作 MVC 分发控制器的映射。不会覆盖 JSP 处理的 Servlet, JSP 文件能正常访问。

空白字符串

空白字符串的规则匹配 webapp 的根目录,和 的区别是空白字符串只映射根目录,不映射子目录。

完结

特殊 Pattern 部分写得比较零散,读者可以参考英文链接。

参考链接

  1. https://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern
posted @ 2024-12-05 20:37  螺旋质子  阅读(250)  评论(0)    收藏  举报