【问题标题】:differenct between / and /* in servlet url match pattern [duplicate]servlet url匹配模式中/和/ *之间的区别[重复]
【发布时间】:2012-04-04 00:51:09
【问题描述】:

可能重复:
Servlet mapping / vs /*

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

由于我正在阅读《春天在行动》这本书,我发现了这些话:

接下来我们必须指明哪些 URL 将由 DispatcherServlet。发现 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,它将负责处理所有请求, 包括对静态内容的请求。

按照上面的说法,似乎'/'和'/*'都会服务所有的请求。

有什么区别?

【问题讨论】:

    标签: servlets url-pattern


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 默认 servlet(/) 和一切 /* 之间到底有什么区别?
    猜你喜欢
    • 2014-05-16
    • 2020-03-22
    • 2012-05-16
    相关资源
    最近更新 更多