<servlet-mapping> <servlet-name>myName</servlet-name> <url-pattern>/aName</url-pattern> </servlet-mapping> <security-constraint> <web-resource-collection> ... <url-pattern> /* </url-pattern> </web-resource-collection> ... </security-constraint>
这是web.xml的摘录(使用它来配置jboss / tomcat Web服务)。只是想知道url-patternin web-resource- collection是否相对于url-patternin servlet-mapping。
url-pattern
web-resource- collection
servlet-mapping
在url-pattern用于选择一个给定的请求的约束不是相对于任何事情。Servlet规范中有趣的部分是:
SRV.12.8.3处理请求 _Servlet容器收到请求时,应使用SRV.11.1中描述的算法来选择在url-patternURI 上定义的与请求URI最匹配的约束(如果有) 。_如果未选择任何约束,则容器应接受该请求。否则,容器将确定请求的HTTP方法是否限制在所选模式下。如果不是,则接受请求。否则,要求必须满足适用于限制http- method 的url-pattern。必须满足以下两个规则,请求才能被接受并分发到关联的servlet。
_Servlet容器收到请求时,应使用SRV.11.1中描述的算法来选择在url-patternURI 上定义的与请求URI最匹配的约束(如果有) 。_如果未选择任何约束,则容器应接受该请求。否则,容器将确定请求的HTTP方法是否限制在所选模式下。如果不是,则接受请求。否则,要求必须满足适用于限制http- method 的url-pattern。必须满足以下两个规则,请求才能被接受并分发到关联的servlet。
http- method
和:
SRV.11.1 URL路径的使用 收到客户请求后,Web容器确定将其转发到的Web应用程序。所选的Web应用程序必须具有与请求URL的开头匹配的最长上下文路径。URL的匹配部分是映射到servlet时的上下文路径。 Web容器接下来必须使用下面描述的路径映射过程定位servlet来处理请求 。 用于映射到servlet的路径是来自请求对象的请求URL减去上下文路径和路径参数。以下URL路径映射规则按顺序使用。使用第一个成功的匹配,不尝试其他匹配: 容器将尝试查找请求路径与Servlet路径的精确匹配。成功匹配将选择servlet。 容器将递归地尝试匹配最长的路径前缀。这是通过使用“ /”字符作为路径分隔符,一次将路径树下移到一个目录来完成的。最长的匹配确定所选的servlet。 3. 如果URL路径中的最后一段包含扩展名(例如.jsp),则servlet容器将尝试匹配处理该扩展名请求的servlet。扩展名定义为最后一个段之后的最后一个段的一部分。字符。 如果前三个规则均未导致servlet匹配,则容器将尝试提供适合于所请求资源的内容。如果为应用程序定义了“默认” servlet,则将使用它。 SRV.11.2映射规范 在Web应用程序部署描述符中,以下语法用于定义映射: 路径映射使用以’/’字符开头并以’/ *’后缀结尾的字符串。 以“ *”开头的字符串。前缀用作扩展名映射。 仅包含“ /”字符的字符串表示应用程序的“默认” servlet。在这种情况下,Servlet路径是请求URI减去上下文路径,并且路径信息为null。 所有其他字符串仅用于完全匹配。
收到客户请求后,Web容器确定将其转发到的Web应用程序。所选的Web应用程序必须具有与请求URL的开头匹配的最长上下文路径。URL的匹配部分是映射到servlet时的上下文路径。
Web容器接下来必须使用下面描述的路径映射过程定位servlet来处理请求 。
用于映射到servlet的路径是来自请求对象的请求URL减去上下文路径和路径参数。以下URL路径映射规则按顺序使用。使用第一个成功的匹配,不尝试其他匹配:
在Web应用程序部署描述符中,以下语法用于定义映射: