gpt4 book ai didi

java - 使用 web.xml 的 Servlet 映射

转载 作者:IT老高 更新时间:2023-10-28 21:08:12 25 4
gpt4 key购买 nike

我对 servlet 映射的 web.xml 的结构感到困惑,执行它没有任何问题,但我试图弄清楚为什么我们在部署描述符中有这样的模式。

<web-app>
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-path>foo.Servlet</servlet-path>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/enroll</url-pattern>
</servlet-mapping>
</web-app>

现在据我了解,每当请求 url-pattern "/enroll"时,servlet 容器都会将 servlet-name 与 url-pattern 匹配,并尝试找到相应的 servlet-path 并将将控件转发给 foo.Servlet。所以基本上会有两个通过,一个用于查找 servlet-name,另一个用于 servlet-path,我的问题是容器是否设计为以下列方式工作

<web-app>
<servlet>
<servlet-name>foo.Servlet</servlet-path>
<url-pattern>/enroll</url-pattern>
</servlet>
</web-app>

如果我们使用以下方法会有什么缺点。那不是更高效,响应时间也更快。

最佳答案

它允许 servlet 有多个 servlet 映射:

<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-path>foo.Servlet</servlet-path>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/enroll</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/pay</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/bill</url-pattern>
</servlet-mapping>

它允许过滤器映射到特定的 servlet:

<filter-mapping>
<filter-name>Filter1</filter-name>
<servlet-name>Servlet1</servlet-name>
</filter-mapping>

你的提议都不支持他们。请注意,web.xml 仅在应用程序启动期间被读取和解析一次,而不是您似乎认为的每个 HTTP 请求。

从 Servlet 3.0 开始,有了 @WebServlet最小化此样板的注释:

@WebServlet("/enroll")
public class Servlet1 extends HttpServlet {

另见:

关于java - 使用 web.xml 的 Servlet 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8198312/

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