我正在尝试学习如何将请求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中是否存在一个完全= /MapTest/blue.do的URL模式?没有。 目录匹配检查:DD目录/ MapTest中是否有任何URL模式?没有。 扩展匹配:DD中是否有扩展名为.do的文件的模式?是的! 选择DeployTestOne!
问题 - 在进行完全匹配检查时,容器是否在DD中查找blue.do还是在寻找/MapTest/blue.do?
2)http://localhost:8080/MapTest/fooStuff/bar/blue.do
容器选择:DeployTestThree(与/ fooStuff / *目录模式匹配)
完全匹配检查:DD中是否存在一个完全= /MapTest/fooStuff/bar/blue.do的URL模式?没有。 目录匹配检查:DD目录/ MapTest / fooStuff / bar中是否有任何URL模式?是的! 转到最长pat的url模式,即/ fooStuff / *
问题 - 在进行目录匹配检查时,Container是否会查找/ MapTest / fooStuff / bar /或/ fooStuff / bar?
答案 0 :(得分:3)
网址格式规范:
1 - 以“/”字符开头并以“/ *”后缀结尾的字符串用于路径映射。
2 - 以'*。'前缀开头的字符串用作扩展名映射。
3 - 仅包含'/'字符的字符串表示&#34;默认&#34;应用程序的servlet。在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为空。
4 - 所有其他字符串仅用于完全匹配。