鍍金池/ 教程/ Java/ JSP - 生命周期
JSP - 異常處理
JSP - 標(biāo)準(zhǔn)標(biāo)簽庫(kù)
JSP - 操作
JSP - 語(yǔ)法
JSP - 概述
JSP - 過(guò)濾器
JSP - 文件上傳
JSP - 指令
JSP - 訪問(wèn)數(shù)據(jù)庫(kù)
JSP - 國(guó)際化
JSP - 隱式對(duì)象
JSP - 面試問(wèn)題
JSP - 體系結(jié)構(gòu)
JSP - 發(fā)送電子郵件
JSP - 客戶端請(qǐng)求
JSP - 服務(wù)器響應(yīng)
JSP - 表達(dá)式語(yǔ)言
JSP - 自定義標(biāo)簽
JSP - HTTP 狀態(tài)碼
JSP - 調(diào)試
JSP - XML 數(shù)據(jù)
JSP - 有用的資源
JSP - 處理日期
JSP - 生命周期
JSP - 會(huì)話跟蹤
JSP - JavaBeans
JSP - 自動(dòng)刷新
JSP - 頁(yè)面重定向
JSP - 點(diǎn)擊計(jì)數(shù)器
JSP - 安全性
JSP - Cookies 處理
JSP - 環(huán)境配置
JSP - 表單處理

JSP - 生命周期

理解 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" />

JSP 編譯

當(dāng)瀏覽器請(qǐng)求一個(gè) JSP,JSP 引擎首先檢查是否需要編譯頁(yè)面。如果頁(yè)面從未被編譯,或者 JSP 自上次編譯后被修改了,那么 JSP 引擎就會(huì)編譯頁(yè)面。

編譯過(guò)程包括三個(gè)步驟:

  • 解析 JSP。

  • 將 JSP 轉(zhuǎn)換為 servlet。

  • 編譯 servlet。

JSP 初始化

當(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 執(zhí)行

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 生命周期的破壞階段代表 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.
}