web.xml之url-pattern定义规则及匹配过程
译自《Servlet Specification Version 2.4》,转载请注明出处!
把请求映射到Servlet
在这个章节中描述的映射技术都需要web容器把客户端的请求映射到Servlet。
SRV.11.1 使用URL路径
当收到一个客户端请求时,web容器决定将请求转交给那个web应用处理。被选择的web应用必须是从前向后匹配的请求URL的最长的上下文路径,匹配的URL部分就是映射到Servlet时的上下文路径。
Web容器下一步必须使用下面描述的路径映射规则找到处理请求的Servlet。
用于映射到Servlet的路径是请求的URL去掉上下文路径和路径参数(如http://localhost/myapp/a
/a.jsp?msg=hello,上下文路径为/myapp,路径参数为?msg=hello)。按序使用以下URL路径映射规则,第一次匹配成功的规
则将被使用,并且将不会尝试继续匹配:
1. 容器将试图为请求的路径查找一个精确匹配的Servlet路径。匹配成功则选择该Servlet。
2. 容器将递归的匹配最长路径前缀,这是通过使用字符'/'做路径分隔符从后往前分隔路径树,一次一个目录,最长的匹配决定了该Servlet被选择。
3. 如果URL路径最后的部分包含一个扩展名(如.jsp),Servlet容器将尝试匹配一个处理该后缀请求的Servlet,扩展名定义为最后一个'/'后面的部分中字符'.'后的部分。
4. 如果前面的三个规则都不能匹配到一个Servlet,容器将尝试为请求的资源使用内容服务,如果应用定义了默认的Servlet,则它将被使用。
容器的匹配过程必须使用大小写敏感的字符串比较。
SRV.11.2 映射详述
在Web应用部署描述符中,下面的语法被用于定义映射:
• 以'/'开头且以‘/*’结束的字符串用于路径映射。
• 以'*.'开头的字串串用于扩展名映射。
• 仅包含'/'的字符串表明对应的Servlet为应用默认的Servlet。在这种情况下Servlet路径是请求的URI去掉上下文路径并且路径信息为null。
• 所有其它的字符串都被只能用于精确匹配。
SRV.11.2.1 隐式映射
如果容器包含一个内部的JSP容器,则*.jsp扩展名将映射到该容器。允许JSP页面一经请求就执行。这种映射称为隐式映射。如果*.jsp映射被定义成web应用,其优先级高于隐式映射。
一个Servlet容器允许做更多的隐式映射当明确的映射具有高优先级时。例如,*.shtml的隐式映射可以被用于映射成在服务器上包含具体的功能。
SRV.11.2.2 映射例子
思考下面的映射:
Table SRV.11-1 Example Set of Maps
Path Pattern Servlet
/foo/bar/* servlet1
/baz/* servlet2
/catalog servlet3
*.bop servlet4
紧接着是映射到结果:
Table SRV.11-2 Incoming Paths Applied to Example Maps
Incoming Path Servlet Handling Request
/foo/bar/index.html servlet1
/foo/bar/index.bop servlet1
/baz servlet2
/baz/index.html servlet2
/catalog servlet3
/catalog/index.html “default” servlet
/catalog/racecar.bop servlet4
/index.bop servlet4
注意例子中的/catalog/index.html和/catalog/racecar.bop并没有映射到/catalog,因为/catalog是一个精确映射。
------------------------------------------------------------------------------------------------------------------------------------
Mapping Requests to Servlets
The mapping techniques described in this chapter are required for Web containers
mapping client requests to servlets.
SRV.11.1 Use of URL Paths
Upon receipt of a client request, the Web container determines the Web application
to which to forward it. The Web application selected must have the the longest
context path that matches the start of the request URL. The matched part of the URL
is the context path when mapping to servlets.
The Web container next must locate the servlet to process the request using
the path mapping procedure described below.
The path used for mapping to a servlet is the request URL from the request
object minus the context path and the path parameters. The URL path mapping
rules below are used in order. The first successful match is used with no further
matches attempted:
1. The container will try to find an exact match of the path of the request to the
path of the servlet. A successful match selects the servlet.
2. The container will recursively try to match the longest path-prefix. This is done
by stepping down the path tree a directory at a time, using the ’/’ character as
a path separator. The longest match determines the servlet selected.
3. If the last segment in the URL path contains an extension (e.g. .jsp), the servlet
container will try to match a servlet that handles requests for the extension.
An extension is defined as the part of the last segment after the last ’.’ character.
4. If neither of the previous three rules result in a servlet match, the container will
attempt to serve content appropriate for the resource requested. If a "default"
servlet is defined for the application, it will be used.
The container must use case-sensitive string comparisons for matching.
SRV.11.2 Specification of Mappings
In theWeb application deployment descriptor, the following syntax is used to define
mappings:
• A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used
for path mapping.
• A string beginning with a ‘*.’ prefix is used as an extension mapping.
• A string containing only the ’/’ character indicates the "default" servlet of
the application. In this case the servlet path is the request URI minus the context
path and the path info is null.
• All other strings are used for exact matches only.
SRV.11.2.1 Implicit Mappings
If the container has an internal JSP container, the *.jsp extension is mapped to it,
allowing JSP pages to be executed on demand. This mapping is termed an implicit
mapping. If a *.jsp mapping is defined by the Web application, its mapping takes
precedence over the implicit mapping.
A servlet container is allowed to make other implicit mappings as long as
explicit mappings take precedence. For example, an implicit mapping of
*.shtml could be mapped to include functionality on the server.
SRV.11.2.2 Example Mapping Set
Consider the following set of mappings:
Table SRV.11-1 Example Set of Maps
Path Pattern Servlet
/foo/bar/* servlet1
/baz/* servlet2
/catalog servlet3
*.bop servlet4
The following behavior would result:
Table SRV.11-2 Incoming Paths Applied to Example Maps
Incoming Path Servlet Handling Request
/foo/bar/index.html servlet1
/foo/bar/index.bop servlet1
/baz servlet2
/baz/index.html servlet2
/catalog servlet3
/catalog/index.html “default” servlet
/catalog/racecar.bop servlet4
/index.bop servlet4
Note that in the case of /catalog/index.html and /catalog/racecar.bop, the
servlet mapped to “/catalog” is not used because the match is not exact.
分享到:
相关推荐
在Web应用程序的部署描述符(web.xml)中,我们通过URL-Pattern来定义Servlet的访问路径,使得当用户通过特定URL发起请求时,服务器知道应该调用哪个Servlet来处理。 在`web.xml`文件中,URL-Pattern的配置方式通常...
在Web应用开发中,`web.xml`配置文件扮演着极其重要的角色,其中`<url-pattern>`元素用于定义Servlet的映射规则,即URL模式。通过不同的URL模式,我们可以精确地控制Servlet如何被客户端请求所调用。本文将详细介绍`...
1. **模式匹配**:url-pattern库允许定义一种模式来匹配URL或其他字符串。这种模式可以包含路径、查询参数、片段标识符等,通过简单的语法就能实现复杂匹配。 2. **字符串解析**:将URL字符串解析成一个对象,该...
总结一下,`url-pattern`在Servlet技术中扮演着核心角色,它定义了Servlet的访问路径,使得服务器能够根据不同的URL模式调用不同的服务逻辑。在编写`web.xml`时,我们需要根据应用需求精确地设置`url-pattern`,以...
- 在`<url-pattern>`中指定的URL必须与请求的URL完全一致才能匹配。例如,如果配置如下: ```xml <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/kata/detail.html</url-pattern> ...
4. 详细定义:你可以自定义更复杂的`url-pattern`,如`/path/*`,这将匹配所有以`/path/`开头的URL,并且允许路径参数。 理解`url-pattern`的匹配规则至关重要,这些规则包括: 1. 精确路径匹配:如果存在与请求...
要注意的是,Servlet 2.5版本开始,一个Servlet可以对应多个`<url-pattern>`,每个`<url-pattern>`定义了一个独立的匹配规则。 总的来说,理解Servlet的URL-Pattern匹配规则对于正确配置和管理Servlet至关重要,它...
1. **匹配指定扩展名的url-pattern** 当我们设置 `url-pattern` 为 `.html` 时,例如 `<url-pattern>.html</url-pattern>`,这意味着所有以 `.html` 结尾的请求都将被Spring MVC的DispatcherServlet处理。...
总的来说,`route-pattern`为前端开发者提供了一种高效、灵活的路由管理工具,它简化了路由规则的定义和匹配过程,使得在前端构建复杂应用时能更好地组织和控制路由逻辑。通过熟练掌握`route-pattern`,你可以更轻松...
通过精确匹配、路径匹配和后缀匹配,可以根据需求灵活地定义哪些URL由哪个Servlet来处理。同时,了解`/`和`/*`的区别有助于避免潜在的路由冲突和不必要的调试时间。在实际应用中,合理地规划和设置`url-pattern`可以...
`match-route-pattern`是一个工具,它允许我们通过特定的模式来匹配URL,并从中提取查询参数,以便于处理用户请求和控制应用程序的行为。这个功能极大地提高了前端开发的灵活性和效率。 在Web应用程序中,URL路由的...
精确匹配要求访问的URL地址与配置文件中指定的url-pattern完全一致,这种匹配方式要求客户端输入的URL除了包括工程名、服务器地址和端口号等部分,还必须与Servlet别名后配置的URL路径完全匹配。比如,有一个Servlet...
`Sleuth-Skip-Pattern`是一个配置选项,允许开发者定义一组正则表达式,这些表达式会匹配服务调用的bean名或者URL,被匹配到的服务调用将不会被Sleuth进行跟踪。这样可以减少不必要的性能开销,同时也能帮助我们更...
使用通配符,如`<url-pattern>*.do</url-pattern>`,匹配所有以.do结尾的URL。 c. 使用星号`*`,如`<url-pattern>/*</url-pattern>`,匹配所有URL。 同一Servlet可以配置多个`servlet-mapping`,这意味着该Servlet...
<url-pattern>/*</url-pattern> <dispatcher>REQUEST <dispatcher>FORWARD </filter-mapping> ``` 最后,将`urlrewrite.xml`放置在Web应用的`WEB-INF`目录下,即可启动URLRewrite功能。 **进阶应用** 除了基本...
- **目录匹配**:`<url-pattern>/admin/*</url-pattern>`,匹配所有以/admin/开头的URL路径。 - **后缀名匹配**:`<url-pattern>*.html</url-pattern>`,匹配所有以.html结尾的URL。 理解并熟练运用Filter过滤器,...
当你想让一个Filter作用于应用中的所有资源时,你需要在`web.xml`配置文件中定义一个Filter,并设置`<url-pattern>`为`/*`。这样,任何通过HTTP请求访问的应用资源都会先经过这个Filter。例如: ```xml ...
1. **参数括号使用**:在定义URL重写规则时,需要注意所有匹配字符串或参数都必须使用小括号括起来,以便正确地捕获和替换。 2. **顺序问题**:URL重写规则的执行顺序很重要,优先级高的规则会先被执行。 3. **调试...
<url-pattern>/*</url-pattern> <dispatcher>REQUEST <dispatcher>FORWARD </filter-mapping> ``` 这段代码告诉服务器使用`UrlRewriteFilter`来处理所有到达的请求。 3. **创建配置文件**:接下来,在`WEB-...