2012-02-10 165 views
3

似乎web.xml中的servlet有称为元素对于web.xml中的servlet定义,<enabled> false</enabled>是什么意思?

<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,servelt的init方法也会被调用。通过搜索servlet规范pdf没有提供对<启用>的含义的解释,实际上我甚至找不到在servlet 3.0规范中启用>的字符串<。

回答

4

从的Java Servlet 3.0规范,8.2.3节3 (see the pdf)

如果Servlet使用在web.xml 引入的启用元件禁用,那么该servlet将不提供在为servlet指定的url模式。

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

编辑2:(把从下面的评论在这里摘要) 在Tomcat中7(为7.0.25)出现该Servlet的初始化,但要求其URL模式将与状态码503SC_SERVICE_UNAVAILABLE

+1

上面的语句不明确是否意味着servelt没有被初始化或者它没有被映射,因此不应该发送任何请求?例如,我有load-on-startup元素,这个bean在应用程序启动时应该启动servelt。在我的情况下,我想要一个在应用程序启动时启动的servlet,但没有任何url映射,因为我正在使用该servlet在应用程序上运行一些自测,以确保该应用程序的环境配置正确。 – ams 2012-02-10 22:09:41

+1

从tomcat 7源代码中,如果以这种方式禁用,它看起来像'isUnavailable()'(搜索[这个页面](http://svn.apache.org/repos/asf/tomcat/tc7.0) .x/tags/TOMCAT_7_0_25/java/org/apache/catalina/core/StandardWrapper.java)为“enabled”和[here](http://svn.apache.org/repos/asf/tomcat/tc7.0。对于'isUnavailable') - > WHIC MEANS - >它_probably_被初始化,但对其URL的任何请求都会返回错误。 – 2012-02-11 00:51:52

+1

我可以确认它初始化它(再次,在Tomcat 7中):请注意'StandardWrapper'中的'initServlet'([见源代码(http://svn.apache.org/repos/asf/tomcat/tc7 .0.x/tags/TOMCAT_7_0_25/java/org/apache/catalina/core/StandardWrapper.java))不考虑'enabled'状态。 – 2012-02-11 00:56:33

1

Look at Oracle web.xml deployment descriptor

看来,这是服务器的特定条目,您使用什么样的应用服务器?

+0

我使用Tomcat 7.x的回应,日e servlet 3.0规范在解释最终战争如何从多个片段中组合起来的情况下提到了启用属性,并且XML的屏幕截图具有它,但没有单独解释该元素。此外,web.xml中的任何元素都适用于所有应用程序服务器,因此启用必须是通用设置。 – ams 2012-02-10 21:39:26

2

除了XSD,我无法在任何地方找到它。如果它仍然处理请求(检查),那么我想它会被添加到那里供将来使用,或让容器决定如何处理它。