<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 webservice)。只是想知道url-pattern
中的web-resource-collection
是否与url-pattern
中的servlet-mapping
相关。
答案 0 :(得分:6)
用于选择给定请求的约束的url-pattern
与任何事物无关。这里Servlet规范的有趣部分是:
SRV.12.8.3处理请求
当Servlet容器收到时 请求,它应使用该算法 在SRV.11.1中描述选择 限制(如果有的话)定义在
url-pattern
这是最匹配的 请求URI。如果没有约束 选择后,容器应接受 请求。否则容器 应确定是否采用HTTP方法 请求受到约束 选定的模式。如果不是,那就是 请求应被接受。除此以外, 请求必须满足 适用于http-method
的约束 在url-pattern
。两者都有 必须满足以下规则 请求被接受和 调度到相关的servlet。
和
SRV.11.1使用URL路径
收到客户端请求后,Web容器将确定Web应用程序 转发它。所选的Web应用程序必须具有最长的时间 与请求URL的开头匹配的上下文路径。 URL的匹配部分 是映射到servlet时的上下文路径。
Web容器接下来必须找到servlet来处理请求 下面描述的路径映射程序。
用于映射到servlet的路径是请求中的请求URL object减去上下文路径和路径参数。 URL路径映射 以下规则按顺序使用。第一次成功的比赛没有进一步使用 尝试匹配:
- 容器将尝试查找请求路径的完全匹配 servlet的路径。成功匹配选择servlet。
- 容器将递归尝试匹配最长的路径前缀。这个完成了 通过一次使用'/'字符将路径树逐步下载到路径树中 路径分隔符。最长的匹配决定了所选的servlet。
- 如果URL路径中的最后一个段包含扩展名(例如.jsp),则servlet容器将尝试匹配处理扩展请求的servlet。 扩展名被定义为最后一个'。'字符后的最后一个段的一部分。 ACTER。
- 如果前三个规则都没有导致servlet匹配,则容器将会 尝试提供适合所请求资源的内容。如果是“默认” servlet是为应用程序定义的,它将被使用。
醇>SRV.11.2映射规范
在Web应用程序部署描述符中,使用以下语法进行定义 映射:
- 使用以“/”字符开头并以“/ *”后缀结尾的字符串 用于路径映射。
- 以'*。'前缀开头的字符串用作扩展名映射。
- 仅包含'/'字符的字符串表示“默认”servlet 应用程序。在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为空。
- 所有其他字符串仅用于完全匹配。
答案 1 :(得分:5)
对我来说, security-constraint / web-resource-collection / url-pattern 相对于 servlet-mapping / 不是有意义的url-pattern ,原因如下:web.xml中可能有几个 servlet-mapping 元素,在这种情况下,不清楚哪个 servlet-mapping / url -pattern 用于解析相对URI,是一个。 (只是一个猜测 - 我还没有在tomcat中使用安全约束。)
答案 2 :(得分:1)
Servlet specification中定义和描述了这两个元素。您可能希望阅读有关安全性的SRV.12.8部分以及有关url-pattern元素的详细信息。