【问题标题】:Why have 1 extra level for servlet config in web.xml?为什么 web.xml 中的 servlet 配置有 1 个额外级别?
【发布时间】:2013-06-25 23:43:02
【问题描述】:

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-name 再映射到 servlet-class 呢?为什么服务端找不到url模式直接映射到servlet-class?

【问题讨论】:

  • 这只是一个数据规范化。

标签: java xml servlets


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    名称有点像,“ID”告诉容器哪个&lt;servlet&gt; 部分与哪个&lt;servlet-mapping&gt; 部分一起使用(以及将其与容器特定XML 文件中XML 配置的其他部分联系起来)

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

    【讨论】:

      【解决方案3】:

      我同意它看起来很难看,但这是保持 servlet 配置 DRY 的尝试,因为 servlet-name 可以在 filter-mappings 以及 servlet-mappings 中使用。

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

      【讨论】:

        【解决方案4】:

        它被设计成允许其他组件(例如过滤器)可以访问它。过滤器可以使用 &lt;servlet-name&gt; 样式与 Servlet 关联:

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

        【讨论】:

          猜你喜欢
          • 2018-08-06
          • 1970-01-01
          • 1970-01-01
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多