【问题标题】:Match the request URL to the correct URL pattern in web.xml将请求 URL 与 web.xml 中的正确 URL 模式匹配
【发布时间】: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


    【解决方案1】:

    网址格式规范:

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

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

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

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

    参考:Java Servlet Specification

    【讨论】:

    • 在该文档中进一步解释了它们的检查顺序。
    • @SotiriosDelimanolis - 请告诉我我的两个问题的答案。如果找到多个匹配的目录,我不确定要搜索的 url 模式是什么。
    • jproton - 请看我的评论。我想确定我知道容器检查的 url。谢谢。
    • @sidsmith 正如我所说,此答案中链接的文档解释了每种模式以及检查的顺序。这一切都在规范中。
    • @SotiriosDelimanolis - 谢谢。但是,我只需要一件小事。我需要为此扫描规格吗?我确信我不需要很长时间深入研究规范。
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 2019-11-21
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多