1. 程式人生 > >Servlet學習筆記(一)--Servlet生命周期

Servlet學習筆記(一)--Servlet生命周期

con scrip conf 映射 p標簽 有關 import 內容 let

用實例來觀察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生命周期