Web.xml:url-pattern标签是否相互关联?

时间:2010-04-26 15:37:25

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

   <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相关。

3 个答案:

答案 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路径映射   以下规则按顺序使用。第一次成功的比赛没有进一步使用   尝试匹配:

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

    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-mapping 绑定到 security-constraint 。两者都应用于给定的URL模式,安全约束也只能应用于特定的HTTP方法(GET,POST,...),因此它们非常独立。

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