Servlet URL匹配模式中/和/*的区别

5

可能是重复问题:
Servlet映射/ vs /*

servlet url映射中'/'和'/*'有什么不同?

我正在阅读《Spring实战》这本书,并发现了这些词:

Next we must indicate what URLs will be handled by the DispatcherServlet. It’s common to find DispatcherServlet mapped to URL patterns such as .htm, /, or /app. But these URL patterns have a few problems:

  • The *.htm pattern implies that the response will always be in HTML form (which, as we’ll learn in chapter 11, isn’t necessarily the case).
  • Mapping it to /* doesn’t imply any specify type of response, but indicates that DispatcherServlet will serve all requests. That makes serving static content such as images and stylesheets more difficult than necessary.
  • The /app pattern (or something similar) helps us distinguish Dispatcher-Servlet-served content from other types of content. But then we have an implementation detail (specifically, the /app path) exposed in our URLs. That leads to complicated URL rewriting tactics to hide the /app path.

Rather than use any of those flawed servlet-mapping schemes, I prefer mapping DispatcherServlet like this:

<servlet-mapping>
  <servlet-name>spitter</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

By mapping DispatcherServlet to /, I’m saying that it’s the default servlet and that it’ll be responsible for handling all requests, including requests for static content.

根据上述文字,似乎'/'和'/*'都可以处理所有请求。
它们有什么区别?
1个回答

3

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

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

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

模式 / 将使您的 Servlet 成为应用程序的默认 Servlet, 表示它将接收没有其他精确匹配的每个模式。


默认servlet(/)和everything /*之间的确切区别是什么? - hguser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接