servlet默认是延迟加载的,直到servlet容器接收到一个对应servelt的请求。这会导致首次访问改servlet延迟。
为了避免首次访问延迟,可以在web.xml中使用<load-on-startup>标签强制容器在服务启动时加载(初始化并调用init()方法)servlet。
怎样使用<load-on-startup>?
这里是一个例子:
<web-app>
…
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.beginnersbook.DemoServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
…
</web-app>
如果没有指明<load-on-startup>,web容器不会加载servlet直到接收到DemoServet 这个servlet对应的请求。因为这里已经指明了其值大于0,所以这个servlet(DemoServlet)在启动时就被加载。
值大于0意味着当webapp被部署或者当服务器开启时加载,如果值小于0,这个 servlet将在容器需要它的任何时候。
怎么使用<load-on-startup>指明servlet载入顺序?
<web-app>
…
<servlet>
<servlet-name>MyServlet1</servlet-name>
<servlet-class>com.beginnersbook.DemoServlet1</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet>
<servlet-name>MyServlet2</servlet-name>
<servlet-class>com.beginnersbook.DemoServlet2</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet>
<servlet-name>MyServlet3</servlet-name>
<servlet-class>com.beginnersbook.DemoServlet3</servlet-class>
<load-on-startup>-2</load-on-startup>
</servlet>
…
</web-app>
在本例中,我们在web.xml文件中指定了三个servlet,因为servlet类MyServlet1和MyServlet2具有启动时加载的值大于0,它们将在服务器启动时立即加载。但是servlet类MyServlet2将在DemoServlet1类之前加载,因为它在启动时的加载值更低。
Servlet类MyServlet3不会在启动时加载,因为它具有负的启动时加载值。