gpt4 book ai didi

servlets - servlet 映射 url 模式中/和/* 之间的区别

转载 作者:行者123 更新时间:2023-11-28 23:14:42 27 4
gpt4 key购买 nike

熟悉的代码:

<servlet-mapping>
<servlet-name>main</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

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

我的理解是/*映射到 http://host:port/context/* .

/怎么样? ?它肯定不会映射到 http://host:port/context仅根。事实上,它会接受 http://host:port/context/hello , 但拒绝 http://host:port/context/hello.jsp .

谁能解释一下 http://host:port/context/hello 是怎么回事?映射?

最佳答案

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

/* servlet 上的 servlet 覆盖所有其他 servlet,包括 servletcontainer 提供的所有 servlet,例如默认 servlet 和 JSP servlet。无论您发出什么请求,它最终都会出现在该 servlet 中。因此,这对于 servlet 来说是一个糟糕的 URL 模式。通常,您希望使用 /* Filter 上仅有的。它能够让请求继续通过调用 FilterChain#doFilter() 监听更具体的 URL 模式的任何 servlet。 .

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

/不会覆盖任何其他 servlet。它只替换 servletcontainer 的内置默认 servlet,用于所有与任何其他已注册 servlet 不匹配的请求。这通常只在静态资源(CSS/JS/图像/等)和目录列表上调用。 servletcontainer 内置的默认 servlet 还能够处理 HTTP 缓存请求、媒体(音频/视频)流和文件下载恢复。通常,您不想覆盖默认的 servlet,否则您将不得不处理它的所有任务,这并非微不足道(JSF 实用程序库 OmniFaces 有一个 open source example )。因此,对于 servlet 来说,这也是一个糟糕的 URL 模式。至于为什么 JSP 页面没有命中这个 servlet,是因为将调用 servletcontainer 内置的 JSP servlet,默认情况下它已经映射到更具体的 URL 模式 *.jsp .

<url-pattern></url-pattern>

然后还有空字符串 URL 模式 .这将在请求上下文根时调用。这不同于 <welcome-file> 请求任何子文件夹时不调用它的方法。如果您需要“home page servlet”,这很可能是您实际寻找的 URL 模式。我只需要承认我直觉上期望空字符串 URL 模式 和斜线 URL 模式 /完全相反的定义,所以我可以理解很多初学者对此感到困惑。但事实就是如此。

前端 Controller

如果您实际上打算拥有一个前端 Controller servlet,那么您最好将其映射到更具体的 URL 模式,例如 *.html , *.do , /pages/* , /app/*等。您可以隐藏前端 Controller URL 模式,并在常见的 URL 模式(如 /resources/*)上覆盖静态资源。 , /static/* ,等等,在 servlet 过滤器的帮助下。另见 How to prevent static resources from being handled by front controller servlet which is mapped on /* .应该注意的是 Spring MVC 有一个内置的静态资源 servlet,所以这就是为什么你可以将它的前端 Controller 映射到 / 上。如果您在 Spring 中为静态资源配置通用 URL 模式。另见 How to handle static content in Spring MVC?

关于servlets - servlet 映射 url 模式中/和/* 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51794357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com