使用 Web 的 Servlet 映射.xml

2022-09-01 08:43:39

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

<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模式“/enroll”时,servlet容器都会将servlet名称与url模式相匹配,并将尝试找到相应的servlet路径并将控件转发给foo。Servlet.所以基本上会有两个传递,一个用于查找 servlet 名称,另一个用于 servlet-path,我的问题是容器是否设计为以以下方式工作

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

如果我们使用以下方法,会有什么缺点。这难道不是更有效率,响应时间会很快吗?


答案 1

它允许 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>

你的提案不会支持这两个建议。请注意,在应用程序启动期间仅读取和解析一次,而不是像您想象的那样在每个HTTP请求上读取和分析。web.xml

从 Servlet 3.0 开始,有一个@WebServlet注释,它最小化了这个样板:

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

另请参阅:


答案 2

推荐