5

可能重复:
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>

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

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

有什么区别?

4

1 回答 1

3

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

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

模式 /* 将通过您的 Servlet 强制执行所有操作。

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

于 2012-03-19T14:24:43.007 回答