web.xml:URL模式是否相对于彼此?
-
01-10-2019 - |
题
<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 WEBS服务)。只是想知道是否 url-pattern
在 web-resource-collection
相对于 url-pattern
在 servlet-mapping
.
解决方案
这 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的路径是请求对象的请求URL减去上下文路径和路径参数。下面的URL路径映射规则按顺序使用。第一个成功的比赛将无需尝试进一步匹配:
- 容器将尝试找到请求路径与servlet路径的确切匹配。成功的比赛选择了servlet。
- 该容器将递归尝试匹配最长的路径排名。这是通过使用“/”字符作为路径分离器的一个目录来完成路径树的目录来完成。最长的匹配决定了选定的servlet。
- 如果URL路径中的最后一个段包含扩展名(例如.jsp),则Servlet容器将尝试匹配处理扩展名请求的Servlet。扩展名为最后一个''之后的最后一部分的一部分。特点。
- 如果前三个规则都没有导致servlet匹配,则容器将尝试提供适合要求资源的内容。如果为应用程序定义了“默认” servlet,则将使用它。
SRV.11.2映射的规范
在Web应用程序部署描述符中,以下语法用于定义映射:
- 以'/'字符开始并以'/*'后缀结尾的字符串用于路径映射。
- 以'*。'开头的字符串前缀用作扩展映射。
- 仅包含“/”字符的字符串表示应用程序的“默认” servlet。在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为空。
- 所有其他字符串仅用于精确匹配。
其他提示
对我来说是有道理的 Security-Constraint/Web-Resource-Collection/url-Pattern 是 不是 相对于 servlet映射/URL模式, ,由于以下原因:可以有几个 servlet映射 web.xml中的元素,在这种情况下,尚不清楚哪个 servlet映射/URL模式 要解决相对的URI,如果它是一个。 (只是一个猜测 - 我尚未在tomcat中使用安全限制)。
不,他们不是彼此相关的;没有办法绑定给定的 servlet映射 到 安全构成. 。两者都应用于给定的URL模式,安全约束也只能应用于特定的HTTP方法(获取,发布,...),因此它们非常独立。
两个元素均在 servlet规范. 。您可能需要阅读有关安全性以及有关URL-Pattern元素的详细信息的srv.12.8节。