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

six*_*ude 3 xml jboss tomcat 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>
Run Code Online (Sandbox Code Playgroud)

这是web.xml的摘录(使用它来配置jboss/tomcat webservice).只是想知道url-patternin web-resource-collection是否相对于url-patternin servlet-mapping.

Pas*_*ent 6

url-pattern用于选择一个给定的请求的约束不是相对于任何事情.这里Servlet规范的有趣部分是:

SRV.12.8.3处理请求

当Servlet容器收到请求时,它应使用SRV.11.1中描述的算法来选择url-pattern与请求URI最匹配的约束(如果有) .如果未选择约束,则容器应接受请求.否则,容器应确定请求的HTTP方法是否受限于所选模式.如果不是,则接受请求.否则,要求必须满足适用于限制http-methodurl-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应用程序部署描述符中,以下语法用于定义映射:

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


Ghi*_*rny 5

它将使意义对我来说,安全性约束/网上资源收集/ url-pattern的不是相对于Servlet映射/ url-pattern的,原因如下:可以有多个Servlet映射的网络元素. xml,在这种情况下,不清楚要使用哪个servlet-mapping/url-pattern来解析相对URI.(只是一个猜测 - 我还没有在tomcat中使用安全约束).