Java servlet映射url模式上的双通配符(*)是什么意思?
我想知道使用单通配符或双通配符来描述servlet映射上的url模式有什么区别 例如:下面的区别是什么 (一)Java servlet映射url模式上的双通配符(*)是什么意思?,java,spring,jakarta-ee,servlets,spring-mvc,Java,Spring,Jakarta Ee,Servlets,Spring Mvc,我想知道使用单通配符或双通配符来描述servlet映射上的url模式有什么区别 例如:下面的区别是什么 (一) BuyServlet /买/* (二) ShopServlet /商店/** 编辑: @Andrew是对的,规范只讨论了一个通配符(*) 我仔细检查了我的代码,注意到我找到双通配符(**)的地方是在Spring SimpleRhlHandlerMapping bean中 在这种情况下,这是有道理的。根据,它使用,其中说明: 映射使用以下规则匹配URL:?匹配一个 性格 *匹配零
BuyServlet
/买/*
(二)
ShopServlet
/商店/**
编辑:
@Andrew是对的,规范只讨论了一个通配符(*)
我仔细检查了我的代码,注意到我找到双通配符(**)的地方是在Spring SimpleRhlHandlerMapping bean中
在这种情况下,这是有道理的。根据,它使用,其中说明:
映射使用以下规则匹配URL:?匹配一个
性格
*匹配零个或多个字符
**匹配路径中的零个或多个“目录”
servlet规范(版本2.5)第11.2节说明了以下内容: 在Web应用程序部署描述符中,使用以下语法定义 映射:
- 使用以“/”字符开头,以“/*”后缀结尾的字符串 用于路径映射
- 以“*”前缀开头的字符串用作扩展映射
- 仅包含“/”字符的字符串表示的“默认”servlet 应用程序。在本例中,servlet路径是请求URI减去上下文 路径和路径信息为空
- 所有其他字符串仅用于精确匹配
**
)没有意义
另外,我刚刚尝试设置这样的映射,似乎只有这个准确的url才会匹配(Tomcat 6.0.32)。在规范中没有提到第二种情况 依照 以“/”字符开头,以“/*”后缀结尾的字符串用于 路径映射
根据规范,仅考虑秒的精确匹配。它可能因服务器提供程序而异。Servlet规范本身(版本3.0,第12.2章)只定义了两种通配符映射:
- 如果URL模式以“/*”结尾,它将所有请求与前面的路径匹配
- 如果URL模式以“*.”开头,它会将所有请求匹配到以以下扩展名结尾的任何资源
严格遵循规范,您的第二个示例根本不是通配符模式,但应该只与“/shop/**”完全匹配。然而,大多数Servlet容器没有那么严格,允许在任意位置使用*通配符,或者提供更复杂的模式匹配选项。我认为只有第一个
*
将用作通配符,第二个*
被视为文本*
。好的,*
仅在使用时被视为通配符,除了/
之外。您在哪里见过这种用法?请参阅,双星号可以在
配置中使用,并在Spring的
<servlet-mapping id="...">
<servlet-name>BuyServlet</servlet-name>
<url-pattern>/buy/*</url-pattern>
</servlet-mapping>
<servlet-mapping id="...">
<servlet-name>ShopServlet</servlet-name>
<url-pattern>/shop/**</url-pattern>
</servlet-mapping>
All other strings are used for exact matches only.