gpt4 book ai didi

java - 将请求 URL 与 web.xml 中的正确 URL 模式匹配

转载 作者:行者123 更新时间:2023-11-28 22:37:36 29 4
gpt4 key购买 nike

我正在尝试学习如何将请求 URL 映射到部署描述符中的 url 模式。我得到了所有正确的答案,但我不确定思维过程是否正确。请帮我确认或更改推理。

<servlet>  
<servlet-name>One</servlet-name>
<servlet-class>foo.DeployTestOne</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>One</servlet-name>
<url-pattern> *.do </url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Two</servlet-name>
<servlet-class>foo.DeployTestTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Two</servlet-name>
<url-pattern> /fooStuff/bar </url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Three</servlet-name>
<servlet-class>foo.DeployTestThree</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Three</servlet-name>
<url-pattern> /fooStuff/* </url-pattern>
</servlet-mapping>

1) http://localhost:8080/MapTest/blue.do容器选择:DeployTestOne(匹配 *.do 扩展模式)

精确匹配检查:DD 中是否有 URL 模式正好是 =/MapTest/blue.do ?不。目录匹配检查:DD 中是否有目录/MapTest 的 URL 模式?不。扩展名匹配:DD 中是否存在扩展名为 .do 的文件的模式?是的 !选择 DeployTestOne !

问题 - 在进行精确匹配检查时,容器是在 DD 中查找 blue.do 还是查找/MapTest/blue.do ?

2) http://localhost:8080/MapTest/fooStuff/bar/blue.do容器选择:DeployTestThree(匹配/fooStuff/* 目录模式)

精确匹配检查:DD 中是否有一个 URL 模式正好是 =/MapTest/fooStuff/bar/blue.do ?不。目录匹配检查:DD 中是否有目录/MapTest/fooStuff/bar 的 URL 模式?是的 !寻找最长 pat 的 url 模式,即/fooStuff/*

问题 - 在进行目录匹配检查时,容器会查找/MapTest/fooStuff/bar/还是仅查找/fooStuff/bar ?

最佳答案

url 模式规范:

1 - 以“/”字符开头并以“/*”后缀结尾的字符串用于路径映射。

2 - 以“*.”前缀开头的字符串用作扩展映射。

3 - 仅包含“/”字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,路径信息为空。

4 - 所有其他字符串仅用于完全匹配。

引用:Java Servlet Specification

关于java - 将请求 URL 与 web.xml 中的正确 URL 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23901070/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com