为什么在web.xml中有一个额外的servlet配置级别



servlet配置如下所示-

<servlet>
<servlet-name>smart</servlet-name>
<servlet-class>SuperSmart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>smart</servlet-name>
<url-pattern>/dumb</url-pattern>
</servlet-mapping>

据说所有这些别名都是为了安全。我明白了。但是,为什么我们必须先将它映射到servlet名称,然后再映射到servlet类呢?为什么服务器不能找到url模式并直接将其映射到servlet类?

这样做的目的是servlet可以被多个映射引用,因此您可以将一个servlet映射到多个url(或模式),而不仅仅是一个。

名称有点像和"ID",它告诉容器哪个<servlet>部分与哪个<servlet-mapping>部分(以及将其与特定于容器的XML文件中的XML配置的其他部分联系在一起)

您可以将多个url模式绑定到同一个servlet名称。

我同意这看起来很难看,但这是一种保持servlet配置DRY的尝试,因为servlet-name可以用于过滤器映射和servlet映射。

在servlet规范3.0中,您可以对servlet本身进行注释,这样更简洁。

它是这样设计的,以允许其他组件(如过滤器)可以访问它。过滤器可以通过使用<servlet-name>样式与Servlet关联:

<filter-mapping>
  <filter-name>Image Filter</filter-name>
  <servlet-name>ImageServlet</servlet-name>
</filter-mapping>

最新更新