【发布时间】:2023-03-03 20:16:01
【问题描述】:
我正在尝试学习如何将请求 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 模式?不。 目录匹配检查:目录 /MapTest 的 DD 中是否有任何 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 模式?不。 目录匹配检查:目录 /MapTest/fooStuff/bar 的 DD 中是否有任何 URL 模式?是的 ! 选择最长 pat 的 url 模式,即 /fooStuff/*
问题 - 在进行目录匹配检查时,容器会查找 /MapTest/fooStuff/bar/ 还是仅查找 /fooStuff/bar ?
【问题讨论】:
标签: java jakarta-ee tomcat servlets web.xml