Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet映射url模式上的双通配符(*)是什么意思?_Java_Spring_Jakarta Ee_Servlets_Spring Mvc - Fatal编程技术网

Java 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:?匹配一个 性格 *匹配零

我想知道使用单通配符或双通配符来描述servlet映射上的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模式以“*.”开头,它会将所有请求匹配到以以下扩展名结尾的任何资源
例如“/foo/”将匹配所有以“”开头的URL请求http://server/context/foo/“and“.jsp”将匹配所有以“.jsp”结尾的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.