url-模式“/”与“/*”与 servlet 中的空白

url-pattern "/" vs "/*" vs blank in servlet

当我将“/”作为我的 url 模式时,我可以在地址栏中的斜线后键入任何我想要的内容并成功登陆到 servlet。 也就是说,两者

http://localhost:8080/firstServlet/

以及

http://localhost:8080/firstServlet/any_random_string

给了我同样的结果。

但是当我有 url-pattern 空白时,只有 http://localhost:8080/firstServlet/ 有效。请解释原因。 有一些here and here类似的东西,但我不完全理解。

模式“/*”的行为也与“/”相同。

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

servlet 上的 /* 覆盖所有其他 servlet,包括 servletcontainer 提供的所有 servlet,例如默认 servlet 和 JSP servlet。无论您发出什么请求,它最终都会出现在该 servlet 中。因此,这对于 servlet 来说是一个糟糕的 URL 模式。通常,您只想在过滤器上使用 /*

<url-pattern>/</url-pattern>

/ 不会覆盖任何其他 servlet。它只为所有与任何其他注册的 servlet 不匹配的请求替换 servletcontainer 的内置默认 servlet。这通常只在静态资源 (CSS/JS/image/etc) 和目录列表

上调用

对于空 url 模式

<url-pattern></url-pattern>

The empty string ("") is a special URL pattern that exactly maps to the application's context root