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

<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.0 记录了此行为:

  

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

JSP 3.1规范(JSR 340)在第14-160页上说明了这一点:

  

元素 load-on-startup 表示应该加载此servlet(实例化   并拥有它   在启动Web应用程序时调用init()。这个元素的内容   element必须是一个整数,表示servlet的顺序   加载。如果值是负整数,或者元素不存在,则   容器可以随时加载servlet。如果值是正数   整数或0,容器必须像应用程序一样加载和初始化servlet   部署。容器必须保证servlet标记为较低的整数   在用更高整数标记的servlet之前加载。容器可以选择   使用相同的 load-on-startup 值加载servlet的顺序。

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

其他提示

简短回答:值&gt; = 0表示在部署Web应用程序或服务器启动时加载servlet。 价值&lt; 0:只要容器感觉就加载了servlet。

长答案(来自规范):

  

load-on-startup元素表明这一点   应该加载servlet(实例化并具有   它在网络启动时的init()被调用   应用。这些的可选内容   element必须是一个表示顺序的整数   应该加载servlet。如果值   是负整数,或者元素不是   目前,容器可以自由加载servlet   无论什么时候选择。如果值是正数   128   整数或0,容器必须加载和   在应用程序初始化servlet   部署。容器必须保证   加载标有较低整数的servlet   在用更高整数标记的servlet之前。该   容器可以选择装载的顺序   具有相同加载启动值的servlet。

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

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

Servlet 生命周期

Servlet 的生命周期由部署该 Servlet 的容器控制。当请求映射到 servlet 时,容器执行以下步骤。

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

    A。 加载servlet类

    b. 创建 servlet 类的实例

    C。 通过调用 init 方法初始化 servlet 实例(初始化在 创建并初始化 Servlet)

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

0 值 load-on-startup 表示当请求到达该 servlet 时执行第 1 点。其他值表示第 1 点在容器启动时执行。

正如其他答案所述及此加载-on-startup文章零是可以接受的,并且在没有任何其他servlet的情况下,这将在部署期间优先加载和加载。加载statup的最佳用法是加载servlet,这需要花费更长的时间在第一次请求之前初始化,就像创建连接池或进行网络调用或保持庞大资源的servlet一样,这将显着减少前几个请求的响应时间。

  1. 如果两个servlet的值相同,那么它们将按照在web.xml文件中声明它们的顺序加载。
  2. 如果为0或负整数,则当Container感觉加载时将加载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,然后加载另一个。

- &GT; (没有加载启动)标签 首先,当servlet部署在服务器中时,服务器负责创建servlet对象。    例如:假设Servlet部署在服务器中,(Servlet Object在服务器中不可用)客户端第一次将请求发送到servlet然后服务器在默认构造函数的帮助下创建servlet对象 并立即调用init()。从客户端发送请求时起,只有当对象已经可用时才会执行服务方法

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

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

如果我们在启动标记的加载之间提供负值,则服务器不会创建servlet对象。

服务器为servlet创建对象的其他方案。

如果我们不在web.xml中的启动标记上使用load,那么当客户端第一次发送请求时,就会部署项目服务器创建对象,服务器负责调用其生命周期方法。然后,如果在服务器(tomcat)中修改了.class。 客户端再次发送修改后的servlet请求,但是在tomcat的情况下,不会创建新对象,服务器会使用现有对象,除非重新启动服务器。 但是在Web逻辑类中,如果在服务器中修改了.class文件而没有重新启动服务器,如果收到请求,则服务器调用现有servlet上的destroy方法并创建一个新的servlet对象并调用init()来启动它

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

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

当servlet在获得请求后加载时,它被称为“延迟加载”。

这很简单,因为你甚至没想到。

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

如果值不是肯定的,那么在发出请求时加载了服务器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top