Reading – Java™ Servlet Specification Version 2.4 – Mapping Requests to Servlets
Use of URL Paths
当 Web container 接到请求后, 首先确定将这个请求 forward 给哪个 Web application. 首先确定这个 Web application 的 context path 与 request URL 开始部分相匹配. URL 中相匹配的部分就是 context path.
Web container 接下来必须定位由哪个 servlet 来处理这个 request, 使用如下描述的 path mapping 步骤. 用于映射到一个 servlet 的 path 是 request URL 减去 context path 和 path parameters. 下面的 URL path mapping rules 要按顺序进行. 第一个成功匹配的 servlet 将用于请求处理, 而不会继续进行匹配:
- container 会尝试将 request path 与 servlet path 进行精确匹配. 如果成功, 那么就选择这个 servlet.
- container 会递归尝试匹配最长路径前缀(path-prefix). 使用 ’/’ 作为路径分隔符, 每次去掉 path tree 上的一个路径, 进行匹配. 具有最长长度的那次匹配所选择的 servlet 用来处理请求.
- 如果 URL path 尾部包含一个 extension (e.g. .jsp), servlet container 会尝试匹配是否有这样的 servlet 用来处理带有这种扩展的请求.
- 如果前 3 步都没有 servlet 匹配成功, container 会尝试为该请求提供合适内容(the container will attempt to serve content appropriate for the resource requested). 如果为该 application 定义了 “default” servlet, 那么就会使用这个 servlet.
进行匹配时, container 必须对字符串进行大小写敏感比较.
Specification of Mappings
在 Web application 部署描述中, 可使用下面这些句法定义 mappings:
- 以一个 ‘/’ 字符开头并以一个 ‘/*’ 结尾的字符串用于路径映射.
- 以一个 ‘*.’ 开头的字符串用于扩展映射.
- 只包含 ’/’ 字符串表示这是这个 application 的 “default” servlet. 在这种情形下, servlet path 是 request URI 减去 context path, path info 是 null.
- 其它所有字符串只用于精确匹配.
Implicit Mappings
如果 container 具有 JSP container, *.jsp 扩展用于映射 JSP, 允许 JSP pages 按需要执行. 这种映射叫做 implicit mapping. 如果 Web application 定义了一个 *.jsp mapping, 这个 mapping 优先于 implicit mapping.
servlet container 也可做其它 implicit mappings, 只要能让 explicit mappings 优先即可.
Categorized in: Java · Tagged with: Java, Servlet


(
on 2009/01/12 at 23:05
· Permalink
说真的…完全看不懂