本章描述的映射技术被用来为Web容器,把客户端请求映射到servlets。
-
URL路径的使用
当接收到一个客户端请求时,Web容器决定转发到哪个Web应用。被选择的Web应用必须有匹配请求URL开头的最长路径。当映射到servlets时,URL匹配的部分是上下文路径。
Web容器接着必须使用路径映射过程来定位到一个servlet去处理请求。下面的URL路径匹配规则按顺序使用。第一个成功匹配的servlet将会被使用,后面会停止匹配过程:
- 容器将尝试找到一个与servlet路径对应的请求路径的精确匹配。一个成功的匹配会选择这个servlet。
- 容器将会递归尝试匹配最长的前缀路径。这通过依次匹配一个目录的路径树来完成,并且使用"/"字符作为路径分隔符。最长的匹配将会决定被选中的servlet。
- 如果URL路径中的最后一段包含一个扩展名,如".jsp",servlet容器将会为这个扩展名匹配一个处理请求的servlet。
- 如果上述三个规则都没有找到一个servlet匹配,容器将会尝试为请求的资源提供合适的内容。如果为一个应用定义了一个默认servlet,它将会被使用。很多容器提供一个隐式的默认servlet来提供内容。
容器必须为匹配使用大小写敏感的字符串比较。 - 映射详情
在Web应用部署描述符中,下列语法被用来定义映射:
- 以'/'字符开头的以及以'/*'后缀结尾的字符串被用来做路径匹配。
- 以一个'*.'前缀开始的字符串被用做一个扩展名映射。
- 空字符串("")是一个特殊的URL模式,它会映射到应用的上下文根路径。比如请求格式:http://host:port/<context-root>/。这个例子中,路径信息是'/',并且servlet路径和上下文路径是空串("")。
- 一个仅包含'/'字符的字符串表示应用的默认servlet。这个例子中,servlet路径是请求URI减去上下文路径,并且路径信息为null。
- 所有其它字符串仅被用做精确匹配。
-
1. 隐式映射
如果容器有一个内部JSP容器,.jsp扩展名会被映射到这个JSP容器,允许JSP页面按需被执行。这种映射称之为隐式映射。如果一个*.jsp映射被Web应用定义,那么它的映射优先于隐式映射。
只要显示映射有最高优先级,一个servlet容器被允许来创建其它隐式映射。比如,*.shtml的隐式映射能够在服务器上被映射到include功能。 -
2. 映射集合例子
映射集合
需要注意,在例子/catalog/index.html和/catalog/racecar.bop中,映射到/catalog的servlet并不会被使用,因为映射并不精确。
翻译自 Java Servlet Specification
Version 3.0 Rev a
Author:Rajiv Mordani
Date: December 2010
网友评论