java - 在servlet映射 url Pattern的意思上,双通( * ) 是什么?

  显示原文与译文双语对照的内容

如果你想用英镑来描述servlet映射的url模式,那么我想知道如何使用一个英镑的single或者双。

例如:下面的差异是什么?

1 )


<servlet-mapping id="...">


 <servlet-name>BuyServlet</servlet-name>


 <url-pattern>/buy/*</url-pattern>


</servlet-mapping>



2 )


<servlet-mapping id="...">


 <servlet-name>ShopServlet</servlet-name>


 <url-pattern>/shop/**</url-pattern>


</servlet-mapping>



编辑:@Andrew 是正确的,规范只讨论一个通配符( * ) 。

我双重检查了我的代码,注意到我发现了双通配符( ** ) 在 spring SimpleUrlHandlerMapping bean中。

在这种情况下。 按照 per类 doc,它使用 AntPathMatcher,状态如下:

使用以下规则映射 MATCHES url: MATCHES 一个字符 * MATCHES 零个或者多个字符 ** MATCHES 零或者更多的'目录'在路径中

时间: 原作者:

servlet规范( 版本 2.5 )的第 11.2节说明了以下内容:

在Web应用程序部署描述符中,使用以下语法定义映射:

  • 以'/'字符开头并以'/*'后缀结尾的字符串用于路径映射。
  • 以'* 。'前缀开头的字符串用作扩展映射。
  • 只包含'/'字符的字符串表示应用程序的"默认值"servlet 。 在这种情况下,servlet路径是请求URI减去上下文路径,路径信息是空的。
  • 所有其他字符串仅用于精确匹配。

所以我想第二个变异( ** ) 没有意义。

P.S 。我刚刚试图设置这样的映射,它似乎只是这个精确的url /shop/** 将被匹配( Tomcat 6.0.32 ) 。

没有在规范中讨论第二个案例。

根据 servlet规范 12.2.

以'/'字符开头并以'/*'后缀结尾的字符串用于路径映射


All other strings are used for exact matches only.



根据规范第二,只考虑精确匹配。 它可能因服务器提供程序而异。

原作者:
...