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不會在啓動時加載,因爲它具有負的啓動時加載值。