Servlet學習筆記(一)--Servlet生命周期
阿新 • • 發佈:2018-12-26
con scrip conf 映射 p標簽 有關 import 內容 let
??如果需要在init()方法中執行一些運算量大、耗時長的工作,可以把init()方法的執行時間提前。
用實例來觀察servlet方法的調用順序,創建一個類實現servlet接口:
package com.servlet.HelloServlet; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class servlet_lifecycle implements Servlet{ @Override public void init(ServletConfig arg0) throws ServletException { System.out.println("init方法被調用"); } @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("service方法被調用"); } @Override public void destroy() { System.out.println("destroy方法被調用"); } @Override public ServletConfig getServletConfig() { // TODO Auto-generated method stub return null; } @Override public String getServletInfo() { // TODO Auto-generated method stub return null; } }
-
修改web.xml配置文件
??寫好servlet的class代碼之後,還要修改WebContent文件夾下的WEB-INF文件夾裏面的web.xml配置文件。打開文件夾之後突然發現沒有web.xml文件.....解決方法如下:
??鼠標移動到項目名稱上右鍵,點擊Java EE Tools,點擊Generate Deployment Descriptor Stub,至此web.xml文件就自動生成了。 -
在xml文件中添加以下內容
-
- <servlet>標簽的作用是告訴tomcat該應用裏有這個servlet,servlet名字以及類的全路徑
- <servlet-mapping>標簽的作用是註冊映射,根據<servlet-name>找到具體的servlet,<url-pattern>是寫在地址欄上的path
- <servlet>和<servlet-mapping>標簽中的<servlet-name>要相同
- <servlet-class>標簽中填寫的是自己寫的servlet類的全路徑
-
修改好xml文件之後就可以在服務器運行項目了
- 第一次在瀏覽器輸入地址
- 打開第二個瀏覽器窗口訪問
- 打開第三個瀏覽器窗口訪問
- 正常關閉服務器
??由此可見,默認情況下,init()方法只會在創建類實例的時候調用一次,servlet只會初始化一次,接下來無論再打開多少次該頁面,都不會再調用init()方法。而service()可以被調用多次,一個客戶端請求,就會調用一次service()。當servlet被銷毀時,執行destroy()方法。要註意的是,關閉瀏覽器並不會成功調用destroy方法,因為瀏覽器是客戶端,只有關閉服務器端才會調用該方法。將項目從tomcat上移除,或者正常shutdown tomcat都會使destroy方法被調用。
??如果需要在init()方法中執行一些運算量大、耗時長的工作,可以把init()方法的執行時間提前。
<servlet> <servlet-name>servlet_lifecycle</servlet-name> <servlet-class>com.servlet.HelloServlet.servlet_lifecycle</servlet-class> <load-on-startup>3</load-on-startup> </servlet>
在web.xml的servlet標簽內,加上load-on-startup標簽,裏面的數字要是正數或0,數字越小越早被初始化。
init()方法提前調用結果如下,在服務器開啟時就執行初始化:
Servlet學習筆記(一)--Servlet生命周期