gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:08:19 24 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,包括 servlet 容器提供的所有 servlet,例如默认 servlet 和 JSP servlet。无论您发出什么请求,它最终都会出现在该 servlet 中。因此,这对于 servlet 来说是一个不好的 URL 模式。通常,您想使用/* Filter 上仅有的。通过调用 FilterChain#doFilter() ,它能够让请求继续发送到监听更具体 URL 模式的任何 Servlet。 .

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

/不覆盖任何其他 servlet。它仅针对与任何其他注册的 servlet 不匹配的所有请求替换 servletcontainer 的内置默认 servlet。这通常只在静态资源(CSS/JS/image/etc)和目录列表上调用。 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/4140448/

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