理解 JSP 的低級(jí)功能的關(guān)鍵是理解它們遵循的簡(jiǎn)單的生命周期。
JSP 生命周期可以被定義為從創(chuàng)建到銷毀的整個(gè)過(guò)程,這類似于一個(gè) servlet 的生命周期與一個(gè)額外的步驟,該步驟將一個(gè) JSP 編譯成 servlet。
以下是 JSP 帶著的步驟
編譯
初始化
執(zhí)行
JSP 生命周期的四個(gè)主要階段非常類似于 Servlet 生命周期,它們?nèi)缦滤荆?/p>
http://wiki.jikexueyuan.com/project/jsp/images/life_cycle1.jpg" alt="lifecyle1" />
當(dāng)瀏覽器請(qǐng)求一個(gè) JSP,JSP 引擎首先檢查是否需要編譯頁(yè)面。如果頁(yè)面從未被編譯,或者 JSP 自上次編譯后被修改了,那么 JSP 引擎就會(huì)編譯頁(yè)面。
編譯過(guò)程包括三個(gè)步驟:
解析 JSP。
將 JSP 轉(zhuǎn)換為 servlet。
當(dāng)容器加載 JSP時(shí),在響應(yīng)任何請(qǐng)求之前它會(huì)調(diào)用 jspInit()方法。如果你需要執(zhí)行 JSP-specific 初始化,那么就覆蓋 jspInit()方法:
public void jspInit(){
// Initialization code...
}
通常初始化只執(zhí)行一次,servlet init 方法也是只執(zhí)行一次。一般初始化數(shù)據(jù)庫(kù)連接,打開(kāi)文件,并在 jsplnit 方法中創(chuàng)建查找表。
JSP 生命周期的這個(gè)階段代表所有的交互請(qǐng)求,直到 JSP 被摧毀。
當(dāng)瀏覽器請(qǐng)求一個(gè) JSP 頁(yè)面時(shí)并且該頁(yè)面被加載并初始化,JSP 引擎就會(huì)在 JSP 中調(diào)用_jspService() 方法。
_jspService() 方法接受一個(gè) HttpServletRequest 和一個(gè) HttpServletResponse 作為其參數(shù),如下所示:
void _jspService(HttpServletRequest request,
HttpServletResponse response)
{
// Service handling code...
}
每次請(qǐng)求時(shí) JSP 的 _jspService()方法都會(huì)被調(diào)用,且該方法負(fù)責(zé)生成請(qǐng)求的響應(yīng),并且該方法還負(fù)責(zé)生成所有七個(gè) HTTP 方法的反應(yīng),即 GET、POST、DELETE 等。
JSP 生命周期的破壞階段代表 JSP 從容器中刪除。
jspDestroy()方法是 JSP 的相當(dāng)于 servlet 的銷毀方法。當(dāng)你需要執(zhí)行任何清理時(shí),覆蓋 jspDestroy,比如釋放數(shù)據(jù)庫(kù)鏈接或關(guān)閉打開(kāi)的文件。
jspDestroy()方法具有以下形式:
public void jspDestroy()
{
// Your cleanup code goes here.
}