servlet url匹配模式中/和/*之间的区别

hgu*_*ser 5 servlets url-pattern

可能重复:
Servlet映射/ vs/*

servlet url映射中'/'和'/*'有什么区别?

因为我正在阅读春天的书,我找到了这些话:

接下来,我们必须指出DispatcherServlet将处理哪些URL.通常会发现DispatcherServlet映射到URL模式,例如.htm,/或/ app.但是这些URL模式存在一些问题:

  • *.htm模式意味着响应将始终采用HTML格式(正如我们将在第11章中学到的那样,并不一定如此).
  • 将其映射到/*并不意味着任何指定的响应类型,但表示DispatcherServlet将为所有请求提供服务.这使得服务静态内容(如图像和样式表)比必要更困难.
  • / app模式(或类似的东西)帮助我们区分Dispatcher-Servlet提供的内容与其他类型的内容.但是我们在URL中公开了一个实现细节(特别是/ app路径).这导致复杂的URL重写策略隐藏/ app路径.

而不是使用任何有缺陷的servlet映射方案,我更喜欢像这样映射DispatcherServlet:

<servlet-mapping>
  <servlet-name>spitter</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

通过将DispatcherServlet映射到/,我说它是默认的servlet,并且它将负责处理所有请求,包括对静态内容的请求.

根据上面的话,似乎'/'和'/*'都将服务于所有请求.

有什么不同?

Jav*_*ava 3

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

以 * 开头的字符串。前缀用作扩展映射。

模式 /* 将强制所有内容通过您的 Servlet。

模式 / 将使您的 Servlet 成为应用程序的默认 Servlet,这意味着它将选取没有另一个完全匹配的每个模式。