什么是servlet <load-on-startup>值表示

我在这里有点困惑。 在我们的应用程序中,我们定义了一些servlet。 以下是其中一个servlet的web.xml的摘录:

 <servlet> <servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis Servlet</display-name> <servlet-class>com.foo.framework.axis2.http.FrameworkServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> 

根据我的理解, <load-on-startup>必须是一个正整数,以便自动加载。 我抬头看谷歌,但我遇到的反应只是添加到我的困惑。

Resin 3.0logging了这种行为:

load-on-startup可以指定一个(可选的)整数值。 如果值为0或更大,则表示要加载servlet的顺序,具有较高数字的servlet会在数字较小的servlet之后加载。

JSP 3.1规范 (JSR 340)在第14-160页说:

load-on-startup元素表示这个servlet应该在Web应用程序的启动时加载(实例化并调用其init())。 这个元素的元素内容必须是一个整数,指出应该加载的servlet的顺序。 如果该值是一个负整数,或者该元素不存在,那么只要select了该容器,该容器就可以自由地加载该servlet。 如果该值是一个正整数或0,则容器必须在部署应用程序时加载并初始化该servlet。 容器必须保证标记有较低整数的servlets程序在装有较高整数的servlets程序之前被加载。 容器可以使用相同load-on-startup值来select加载servlet的顺序。

您可能不仅要检查JSR,还要检查Web容器的文档。 可能有差异

简单的答案 :value> = 0表示在部署web应用程序或服务器启动时加载servlet。 值<0:只要容器感觉就加载了servlet。

长答案 (从规格):

load-on-startup元素表示这个servlet应该在Web应用程序启动时加载(实例化并调用其init())。 这些元素的可选内容必须是一个整数,指示应该加载servlet的顺序。 如果该值是一个负整数,或者该元素不存在,那么只要select该容器,该容器就可以自由加载该servlet。 如果该值为正整数或0,则容器必须在部署应用程序时加载并初始化该servlet。 容器必须保证标记有较低整数的servlets程序在装有较高整数的servlets程序之前被加载。 容器可以select相同的加载启动值来加载servlet的顺序。

它表示在请求尝试访问它之前,servlet将不会启动。

如果load-on-startup大于或等于零,那么当容器启动的时候,它将按照你在那里放置的启动值的负载升序启动那个servlet(即0,1然后2然后5然后10等等) 。

Servlet生命周期

servlet的生命周期由部署了servlet的容器​​控制。 当请求被映射到一个servlet时,容器执行下列步骤。

  1. 如果servlet实例不存在,则Web容器:

    一个。 加载servlet类

    创build一个servlet类的实例

    C。 通过调用init方法初始化servlet实例(初始化在创build和初始化Servlet中有介绍 )

  2. 容器调用服务方法,传递请求和响应对象。 服务方法在写作服务方法中讨论。

load-on-startupload-on-startup值为0意味着在请求到达该servlet时执行点1。 其他值意味着点1在容器启动时执行。

正如其他答案所述,这个启动加载文章为零是可以接受的,在没有任何其他servlet的情况下,这将在部署期间优先加载和加载。 load-on statup的最佳用法是在第一个请求来到之前,比如装载连接池的servlet或者进行networking调用或者保存大量资源,加载需要较长时间的servlet,这样会大大减less前几个请求的响应时间。

  1. 如果两个servlet的值相同,那么它们将按照在web.xml文件中声明的顺序加载。
  2. 如果是0或负整数比Servlet将加载时感觉加载容器。
  3. 保证通过web容器加载,初始化和调用servlet的init()方法。
  4. 如果没有任何servlet的元素,当web容器决定加载时,它们将被加载。

是的,它可以有相同的值….给数字启动时加载的原因是为服务器定义一个序列来加载所有的servlet。 带有0 load-on-startup值的servlet会先加载,然后再加载值为1的servlet。

如果两个servlet的load-on-startup值相同,那么它们会在web.xml中自上而下地被声明。 首先在web.xml中的servlet将被加载,其他的将在这之后加载。

– >(缺less加载启动)标记首先,当servlet部署在服务器中时,创buildservlet对象是服务器的责任。 例如:假设Servlet部署在服务器中(Servlet对象在服务器中不可用),客户端首次向servlet发送请求,然后服务器在缺省构造器的帮助下创buildservlet对象,并立即调用init()。 从那个时候,当客户端发送请求只有服务方法将得到执行,因为对象已经可用

如果在部署描述符中使用load-on-start-up标记:在部署本身时,服务器根据标记之间提供的正值为servlet创buildservlet对象。 Servlet类的对象的创build将遵循从0到128之间的数字,首先创buildservlet,然后创build其他数字。

如果我们为web.xml中的两个servlet提供相同的值,那么将根据web.xml中的类的位置来完成对象的创build,也因服务器而异。

如果我们在启动标签的负载之间提供负值,那么服务器将不会创buildservlet对象。

服务器为servlet创build对象的其他场景。

如果我们不在web.xml中使用加载启动标签,那么当客户端首次发送请求时,项目被部署,服务器创build对象,服务器负责调用其生命周期方法。 那么如果一个.class在服务器(tomcat)中被修改了。 客户端发送修改后的servlet的请求,但是在tomcat的情况下,新的对象不会被创build,并且服务器利用现有的对象,除非服务器重新启动。 但是在web-logic类中,当.class文件在服务器中被修改时,如果服务器接收到请求时重新启动服务器,服务器将调用现有servlet上的destroy方法,并创build一个新的servlet对象,并调用init() 。

如果该值<0,则在请求到达时实例化serlet,否则> = 0容器将按值的递增顺序加载。 如果2个或更多的servlet具有相同的值,那么在web.xml中声明的servlet的顺序。

servlet容器在启动期间或第一个请求时加载servlet。 servlet的加载取决于“web.xml”文件中的“load-on-startup”属性。 如果该属性具有正整数(0到128),则该servlets程序将在加载该容器时加载,否则在第一个请求服务时加载该小容器。

当servlet被加载一次,然后它被称为“延迟加载”。

注:0也是一个正整数。

这很简单,你甚至不期望。

如果值是正值,则在容器启动时加载

如果该值不正确,则在请求发出时加载servelet。