java将请求URL与web中的正确URL模式相匹配。xml
我试图学习如何将请求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。做不 目录匹配检查:DD中是否有目录/MapTest的URL模式?不 扩展名匹配:DD中是否有扩展名文件的模式。做对 选择DeployTestOne
问题-在进行精确匹配检查时,容器是否为蓝色。在DD中执行,还是查找/MapTest/blue。是吗
2)http://localhost:8080/MapTest/fooStuff/bar/blue.do
容器选择:DeployTestThree(匹配/fooStuff/*目录模式)
精确匹配检查:DD中是否有一个URL模式,精确地为=/MapTest/fooStuff/bar/blue。做不 目录匹配检查:DD中是否有目录/MapTest/fooStuff/bar的URL模式?对 选择最长pat的url模式,即/footstuff/*
问题-在进行目录匹配检查时,容器是查找/MapTest/fooStuff/bar/还是只查找/fooStuff/bar
# 1 楼答案
url模式规范:
1-以“/”字符开头,以“/*”后缀结尾的字符串用于路径映射
2-以“*”开头的字符串前缀用作扩展映射
3-仅包含“/”字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为null
4-所有其他字符串仅用于精确匹配
参考:Java Servlet Specification