1.Servlet實(shí)例化時(shí)機(jī)
通過(guò)Servlet的學(xué)習(xí),我們知道當(dāng)瀏覽器第一次訪問(wèn)Servlet的時(shí)候,服務(wù)器為該Servlet創(chuàng)建實(shí)例,該實(shí)例會(huì)永駐內(nèi)存,當(dāng)服務(wù)器關(guān)閉或當(dāng)前應(yīng)用被移出服務(wù)器時(shí),Servlet實(shí)例才會(huì)被銷毀?,F(xiàn)在我們可以通過(guò)配置來(lái)設(shè)置Servlet在服務(wù)器啟動(dòng)的時(shí)候就被創(chuàng)建,即在web.xml文件中添加<load-on-startup>元素。具體配置如下所示:
在web.xml中有如下配置,如例1-1所示:
例1-1 web.xml
<servlet>
<servlet-name>hello1</servlet-name>
<servlet-class>cn.itcast.servlet.Hello1Servlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello1</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hello2</servlet-name>
<servlet-class>cn.itcast.servlet.Hello2Servlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
在例1-4中,有兩個(gè)Servlet,它們的<load-on-startup>元素內(nèi)容分別是0和1。<load-on-startup>元素是<servlet>元素的子元素,用于指定Servlet被加載的時(shí)機(jī)和順序。它的值必須是一個(gè)整數(shù),如果這個(gè)值是一個(gè)負(fù)數(shù)即表示在第一次訪問(wèn)的時(shí)候被創(chuàng)建實(shí)例。<load-on-startup>的值越小越先被加載。
為了讓大家更加理解,我們現(xiàn)在來(lái)看一個(gè)案例,案例詳細(xì)步驟請(qǐng)參考
Servlet初始化時(shí)機(jī)案例詳解,下載案例源代碼。具體如下:
(1)在Example13中新建一個(gè)Servlet類LoadServlet,如例1-2所示:
例1-2 LoadServlet.java
public class LoadServlet extends HttpServlet {
/*
* 重寫GenericServlet類的init()方法
* */
@Override
public void init() throws ServletException {
System.out.println("LoadServlet was created.............");
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
(2)在web.xml中配置LoadServlet隨著服務(wù)器的啟動(dòng)而創(chuàng)建,具體代碼如1-3所示:
例1-3 web.xml
<servlet>
<servlet-name>LoadServlet</servlet-name>
<servlet-class>cn.itcast.servlet.LoadServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>LoadServlet</servlet-name>
<url-pattern>/LoadServlet</url-pattern>
</servlet-mapping>
(3)將Example13發(fā)布到Tomcat服務(wù)器中,啟動(dòng)服務(wù)器,控制臺(tái)打印結(jié)果如圖1-1所示:
init()方法執(zhí)行,即Servlet實(shí)例被創(chuàng)建。
|
圖1-1 運(yùn)行結(jié)果
由圖1-1可知,服務(wù)器啟動(dòng)后,LoadServlet的初始化信息被打印出來(lái),即init()方法被調(diào)用了,由此說(shuō)明,LoadServlet在Tomcat啟動(dòng)時(shí)就被自動(dòng)加載并初始化了
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://m.8y3kgpwe.cn/javaee