映射规范

在web应用部署描述符中,以下语法用于定义映射:

  • 以‘/’字符开始、以‘/*’后缀结尾的字符串用于路径匹配。
  • 以‘*.’开始的字符串用于扩展名映射。
  • 空字符串“”是一个特殊的URL模式,其精确映射到应用的上下文根,即,http://host:port//请求形式。在这种情况下,路径信息是‘/’且servlet路径和上下文路径是空字符串(“”)。
  • 只包含“/”字符的字符串表示应用的“default”servlet。在这种情况下,servlet路径是请求URL减去上下文路径且路径信息是null。
  • 所有其他字符串仅用于精确匹配。

如果一个有效的 web.xml(在从 fragment 和注解合并了信息后)中有任意一个url-pattern,其映射到多个 servlet,那么部署将失败。

隐式映射

如果容器有一个内部的JSP容器,.jsp扩展名映射到它,允许执行JSP页面的要求。该映射被称为隐式映射。如果Web应用定义了一个.jsp映射,它的优先级高于隐式映射。

Servlet 容器允许进行其他的隐式映射,只要显示映射的优先。例如,一个 *.shtml 隐式映射可以映射到包含在服务器上的功能。

示例映射集合

请看下面的一组映射:

TABLE 12-1 Example Set of Maps

路径模式 Servlet
/foo/bar/* servlet1
/baz/* servlet2
/catalog servlet3
*.bop servlet4

将产生以下行为:

TABLE 12-2 Incoming Paths Applied to Example Maps

访问的路径 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,因为不是精确匹配的。