文章是对 JSR-000340 JavaTM Servlet 3.1 Final Release的Java™ Servlet规范的翻译,尚未校准
本章所描述的映射技术是Web容器将客户端请求映射到servlets所需要的。
在收到客户端请求时,Web 容器决定将其转发给哪个 Web 应用程序。所选择的Web应用程序必须有最长的上下文路径,与请求的URL的开头相匹配。当映射到servlets时,URL的匹配部分就是上下文路径。
Web容器接下来必须使用下面描述的路径映射过程来定位处理请求的Servlet。
用于映射到servlet的路径是来自请求对象的请求URL减去上下文路径和路径参数。下面的URL路径映射规则是按顺序使用的。第一个成功的匹配被使用,不再尝试其他匹配。
.jsp
),servlet容器将尝试匹配一个处理扩展名请求的servlet。扩展名被定义为最后一个’.'字符之后的部分。容器必须使用区分大小写的字符串比较来进行匹配。
在Web应用程序部署描述符中,以下语法被用来定义映射。
/
字符开头、以/*
后缀结尾的字符串用于路径映射。*.
前缀开头的字符串被用作扩展映射。http://host:port//
。在这种情况下,路径信息是’/',Servlet路径和上下文路径是空字符串(“”)。如果容器有一个内部的JSP容器,*.jsp
扩展被映射到它,允许JSP页面按需执行。这种映射被称为隐式映射。如果Web应用程序定义了*.jsp
映射,它的映射将优先于隐式映射。
只要显式映射优先于隐式映射,servlet容器就可以进行其他隐式映射。例如,*.shtml
的隐式映射可以被映射到服务器上的包含功能。
请看下面的一组映射:
TABLE 12-1 Example Set of Maps
Path Pattern | Servlet |
---|---|
/foo/bar/* | servlet1 |
/baz/* | servlet2 |
/catalog | servlet3 |
*.bop | servlet4 |
将产生以下行为:
TABLE 12-2 Incoming Paths Applied to Example Maps
Path Pattern | Servlet |
---|---|
/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
的servlet,因为不是精确匹配的。
下一篇:Java流程控制结构(四)