【问题标题】:Web.xml: Are url-pattern tags relative to each other?Web.xml:url-pattern 标签是否相互关联?
【发布时间】:2010-04-26 15:37:24
【问题描述】:
   <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-resource-collection 中的url-pattern 是否与servlet-mapping 中的url-pattern 相关。

【问题讨论】:

    标签: xml tomcat jboss web.xml security-constraint


    【解决方案1】:

    用于为给定请求选择约束的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 对象减去上下文路径和路径参数。 URL 路径映射 以下规则按顺序使用。第一个成功的匹配被使用,无需进一步 尝试匹配:

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

    SRV.11.2 映射规范

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

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

    【讨论】:

    • 非常感谢帕斯卡的解释!这正是我想要的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多