jspInit(){}:jsp Page被初始化的時候調用該方法,並且該方法僅再初始化時執行一次,所以客以在這裡進行一些初始化的參數配置等一次性工作,由作者創建
jspDestroy(){}:jsp Page因某些原因而關閉的時候呼叫方法,有作者創建
jspService(){}:由jsp容器自動建立的處理jsp Page的方法,由jsp容器建立
準確的說,jsp應該由三個內部方法,也就是jspInit(),_jspService(),jspDestroy(),這三個方法中jspInit()和jspDestroy()可以由作者定義,而_jspService()由jsp容器根據jsp Pge的內容定義,不能由作者定義。
先說一下jsp網頁的內部原理,當jsp檔案第一次被處理時,他會被轉化成一個servlet。 jsp引擎先把jsp檔案轉換成一個java來源文件,如果在轉換過程中發生錯誤的話,會立刻中止,同時傳送錯誤訊息到伺服器端和客戶端錯誤訊息;如果轉換成功了,就會產生一個class類別。然後再建立一個Servlet對象,先執行jspInit()方法進行初始化操作,由於整個執行過程jspInit()方法只執行一次,所以可以在這個方法中進行一些必要的操作比如連接資料庫,初始化部分參數等等,接著執行_jspService()方法,對客戶端的請求進行處理,對每一個請求會創建一個線程,如果同時有多個請求需要處理的話就會創建多個線程,由於servlet長期貯存與內存中,所以執行速度快,但是由於初始化需要編譯,所以第一次執行還是比較慢的,如果由於某種原因導致jsp網頁關閉或者銷毀的話會執行jspDestroy()方法。
<%@ page language="java" contentType="text/html; charset=gbk"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
< meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>測試</title>
</head>
<body>
<%!
public void jspInit(){
System.out. print("開始");
}
%>
<%!
public void jspDestroy(){
System.out.print("結束");
}
%>
</body>
</html>
執行這個jsp檔案再關閉,查看tomcat/logs下的當天的日誌,會發現內容是“開始結束”,這就是因為開始執行jsp檔案的時候調用jspInit()方法,在日誌中記錄下內容“開始” ,在關閉jsp檔案的時候呼叫jspDestroy()方法,在日誌中記錄下內容「結束」。