3
   <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 网络服务)。只是想知道url-patterninweb-resource-collection是否相对于url-patternin servlet-mapping

4

3 回答 3

6

url-pattern用于为给定请求选择约束的 与任何事物无关。此处 Servlet 规范的有趣部分是:

SRV.12.8.3 处理请求

当 Servlet 容器接收到请求时,它应使用 SRV.11.1 中描述的算法来选择与 url-pattern请求 URI 最佳匹配的约束(如果有的话)。如果没有选择约束,容器应接受该请求。否则,容器应确定请求的 HTTP 方法是否受所选模式的约束。如果不是,则应接受该请求。否则,请求必须满足应用于http-method at 的约束url-pattern。必须满足以下两个规则才能接受请求并将其分派到关联的 servlet。

和:

SRV.11.1 URL 路径的使用

收到客户端请求后,Web 容器确定将其转发到的 Web 应用程序。所选的 Web 应用程序必须具有与请求 URL 的开头匹配的最长上下文路径。URL 的匹配部分是映射到 servlet 时的上下文路径。

Web 容器接下来必须找到 servlet 以使用下面描述的路径映射过程来处理请求

用于映射到 servlet 的路径是来自请求对象的请求 URL 减去上下文路径和路径参数。下面的 URL 路径映射规则按顺序使用。使用第一个成功的匹配,不再尝试匹配:

  1. 容器将尝试找到请求路径与 servlet 路径的完全匹配。成功的匹配选择 servlet。
  2. 容器将递归地尝试匹配最长的路径前缀。这是通过使用“/”字符作为路径分隔符一次将路径树下移一个目录来完成的。最长的匹配决定了选择的 servlet。
  3. 如果 URL 路径中的最后一段包含扩展名(例如 .jsp),则 servlet 容器将尝试匹配处理扩展请求的 servlet。扩展名被定义为最后一个'.'之后的最后一段的一部分。特点。
  4. 如果前三个规则都没有导致 servlet 匹配,则容器将尝试提供适合所请求资源的内容。如果为应用程序定义了一个“默认”servlet,它将被使用。

SRV.11.2 映射规范

在 Web 应用程序部署描述符中,使用以下语法来定义映射:

  • 以“/”字符开头并以“/*”后缀结尾的字符串用于路径映射。
  • 以“*”开头的字符串。前缀用作扩展映射。
  • 仅包含“/”字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。
  • 所有其他字符串仅用于完全匹配。
于 2010-04-30T20:57:13.790 回答
5

对我来说,security-constraint/web-resource-collection/url-patternservlet-mapping/url-pattern无关,这是有道理的,原因如下:web.xml 中可以有多个servlet-mapping元素。 xml,在这种情况下,不清楚使用哪个servlet-mapping/url-pattern来解析相对 URI,是不是一个。(只是一个猜测 - 我还没有在 tomcat 中使用安全约束)。

于 2010-04-27T16:09:52.233 回答
1

不,它们彼此无关;无法将给定的servlet-mapping绑定到security-constraint。两者都应用于给定的 URL 模式,安全约束也可以仅应用于特定的 HTTP 方法(GET、POST、...),因此它们非常独立。

这两个元素都在Servlet 规范中定义和描述。您可能想阅读有关安全性的部分 SRV.12.8,以及有关 url-pattern 元素的详细信息。

于 2010-04-28T16:38:03.953 回答