【问题标题】:What is the meaning of <enabled>false</enabled> for a servlet definition in web.xml?对于 web.xml 中的 servlet 定义,<enabled>false</enabled> 是什么意思?
【发布时间】:2012-02-10 21:24:16
【问题描述】:

似乎 servlet 的 web.xml 有一个名为

的元素
<enabled>false</enabled>

可以像这样放在servelt定义中

<servlet>
    <servlet-name>example</servlet-name>
    <servlet-class>com.example.TestServlet</servlet-class>
    <load-on-startup>100</load-on-startup>
    <enabled>false</enabled>
</servlet>

启用是指 servlet 处理请求的能力吗?我注意到即使我将 enable 设置为 false,servlt 的 init 方法也会被调用。搜索 servlet 规范 pdf 并没有提供对 含义的解释,事实上我什至在 servlet 3.0 规范中找不到字符串

【问题讨论】:

    标签: jakarta-ee tomcat servlets websphere weblogic


    【解决方案1】:

    来自 Java Servlet 3.0 规范,8.2.3 第 3 节 (see the pdf)

    如果使用 web.xml 中引入的 enabled 元素 禁用 servlet 那么 servlet 在为 servlet 指定的 url-pattern 中将不可用。

    编辑:这是关于这个确切主题的另一篇文章:How to make sure that servlet is not loaded?

    编辑 2:(将来自 cmets 的摘要放在此处) 在 Tomcat 7(截至 7.0.25)中,似乎 Servlet 初始化,但对其 url-pattern 的请求将以 状态码 503 (SC_SERVICE_UNAVAILABLE) 进行响应

    【讨论】:

    • 上面的陈述是模棱两可的,这是否意味着servelt没有被初始化或者只是它没有被映射,因此不应该被发送任何请求?例如,我有 load-on-startup 元素,当应用程序启动时应该启动 servelt 的 bean。在我的情况下,我想要一个在应用程序启动时启动的 servlet,但没有任何 url 映射,因为我正在使用该 servlet 在应用程序上运行一些自测,以确保为应用程序正确配置了环境。
    • 从 tomcat 7 源,如果以这种方式禁用,它看起来像它返回 true 为 isUnavailable()(搜索 this page 为“启用”和 hereisUnavailable)-->这意味着 --> 它可能被初始化,但对其 url 的任何请求都会返回错误。
    • 我可以确认它确实初始化了它(再次,特别是在 Tomcat 7 中):请注意 StandardWrapper (see source) 中的 initServlet 不考虑 enabled 状态。跨度>
    【解决方案2】:

    我确实在任何地方都找不到它,除了 XSD。如果它仍然处理请求(检查),那么我猜它被添加到那里以供将来使用,或者让容器决定如何处理它。

    【讨论】:

      【解决方案3】:

      Look at Oracle web.xml deployment descriptor

      似乎这是服务器特定的条目,您使用的是哪种应用程序服务器?

      【讨论】:

      • 我使用的是 Tomcat 7.x,servlet 3.0 规范在解释如何将最终战争从多个片段组合在一起的上下文中提到了 enabled 属性,并且 XML 的屏幕截图有它但是该元素本身没有任何解释。此外,web.xml 中的任何元素都适用于所有应用服务器,因此启用必须是通用设置。
      猜你喜欢
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      相关资源
      最近更新 更多