1. 程式人生 > >JSP生命週期和內建物件

JSP生命週期和內建物件

理解JSP底層功能的關鍵就是去理解它們所遵守的生命週期。

JSP生命週期就是從建立到銷燬的整個過程,類似於servlet生命週期,區別在於JSP生命週期還包括將JSP檔案編譯成servlet。

以下是JSP生命週期中所走過的幾個階段:

  • 編譯階段:

    servlet容器編譯servlet原始檔,生成servlet類

  • 初始化階段:

    載入與JSP對應的servlet類,建立其例項,並呼叫它的初始化方法

  • 執行階段:

    呼叫與JSP對應的servlet例項的服務方法

  • 銷燬階段:

    呼叫與JSP對應的servlet例項的銷燬方法,然後銷燬servlet例項

很明顯,JSP生命週期的四個主要階段和servlet生命週期非常相似,下面給出圖示:

編譯

當瀏覽器請求JSP頁面時,JSP引擎會首先去檢查是否需要編譯這個檔案。如果這個檔案沒有被編譯過,或者在上次編譯後被更改過,則編譯這個JSP檔案。

編譯的過程包括三個步驟:

  • 解析JSP檔案。
  • 將JSP檔案轉為servlet。
  • 編譯servlet。

初始化

容器載入JSP檔案後,它會在為請求提供任何服務前呼叫jspInit()方法。如果您需要執行自定義的JSP初始化任務,複寫jspInit()方法就行了,就像下面這樣:

public void jspInit(){
  // 初始化程式碼
}

一般來講程式只初始化一次,servlet也是如此。通常情況下您可以在jspInit()方法中初始化資料庫連線、開啟檔案和建立查詢表。

執行

這一階段描述了JSP生命週期中一切與請求相關的互動行為,直到被銷燬。

當JSP網頁完成初始化後,JSP引擎將會呼叫_jspService()方法。

_jspService()方法需要一個HttpServletRequest物件和一個HttpServletResponse物件作為它的引數,就像下面這樣:

void _jspService(HttpServletRequest request,
                 HttpServletResponse response)
{
   // 服務端處理程式碼
}

_jspService()方法在每個request中被呼叫一次並且負責產生與之相對應的response,並且它還負責產生所有HTTP方法的迴應,比如GET、POST、DELETE等等。

清理

JSP生命週期的銷燬階段描述了當一個JSP網頁從容器中被移除時所發生的一切。

jspDestroy()方法在JSP中等價於servlet中的銷燬方法。當您需要執行任何清理工作時複寫jspDestroy()方法,比如釋放資料庫連線或者關閉資料夾等等。

jspDestroy()方法的格式如下:

public void jspDestroy()
{
   // 清理程式碼
}

內建物件:

--------------------------------------------------------------------------------

request物件      
使用該物件可以獲取使用者提交資訊 response物件    
對客戶的請求做出動態的響應,向客戶端傳送資料。 session物件      
從一個客戶開啟瀏覽器並連線到伺服器開始,到客戶關閉瀏覽器離開這個伺服器結束,被稱為一個會話。當一個客戶訪問一個伺服器時,可能會在這個伺服器的幾個頁面之間反覆連線,反覆重新整理一個頁面,伺服器應當通過某種辦法知道這是同一個客戶,這就需要session物件。 application物件 
伺服器啟動後就產生了這個application物件,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個application物件都是同一個,直到服務 器關閉。但是與session不同的是,所有客戶的application物件都是同一個,即所有客戶共享這個內建的application物件 out物件 
out物件是一個輸出流,用來向客戶端輸出資料。out物件用於各種資料的輸出 page物件
page物件就是指向當前JSP頁面本身,有點象類中的this指標,它是java.lang.Object類的例項。JSP網頁本身,page物件是當前頁面轉換後的Servlet類的例項。從轉換後的Servlet類的程式碼中,可以看到這種關係:Object page = this;在JSP頁面中,很少使用page物件。 config物件
javax.servlet. ServletConfig 的例項,該例項代表該JSP 的配置資訊 exception物件 
java.lang.Throwable 的例項,該例項代表其他頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性為true 時,該物件才可以使用 pageContext 物件 
javax.servlet.jsp.PageContext 的例項,該物件代表該JSP 頁面上下文,使用該物件可以訪問頁面中的共享資料。常用的方法有getServletContext()和getServletConfig()等
-------------------------------------------------------------------------------------------------------------------
總結:
 jsp 初始化很像Android,但是由於Android有所不同:Android如果使用XML進行佈局檔案,在編譯階段會先把xml檔案轉化對應的JAVA元件,而JSP頁面則是轉化servlet(Java類)。Android的生命週期:初始化-建立檢視-業務邏輯處理-銷燬檢視-銷燬 而JSP頁面同樣會有編輯- 初始化- 執行 -銷燬(清理)這樣的生命週期。Android存在application物件是在應用在建立時候就被初始化伴隨著整個應用的生命週期。而JSP也同樣擁有applicatuon一致到使用者結束當前訪問。Android每一個活動場景叫做activity,而J2ee每個活動連結都是一個JSP頁面 。Android和JSP同樣都有很多內建物件,方便操作使用。