程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP技術模型(二)JSP頁面生命周期

JSP技術模型(二)JSP頁面生命周期

編輯:關於JSP

一、JSP頁面的兩個要點   1、JSP頁面也是Servlet   JSP頁面盡管從結構上看類似於HTML頁面,但他實質上是作為Servlet運行。當JSP頁面被訪問時,容器解析JSP頁面並轉換成相應的Java文件,該文件申明了一個Servlet類,其成員直接映射到JSP文件的元素上。接下來,容器編譯該類並將其裝入內存,然後與其他Servlet一樣執行並將其輸出結果發送到客戶端。   2、理解轉換單元   在JSP頁面中可以使用include指令把另一個文件(如JSP頁面、HTML頁面等)的內容包含到當前到當前頁面中。容器在為當前JSP頁面產生Java代碼時,它也被包含的文件的內容插入到產生的Servlet中。這些被轉換成單個Servlet類的頁面集合稱為轉換單元。有些JSP標簽影響整個轉換單元而不只是他們所在的頁面。   (1)、page指令影響整個轉換單元。   (2)、在一個轉換單元中一個變量不能多次聲明。例如一個變量在主頁面中申明了,就不能在被包含的頁面中申明。   (3)、在一個轉換單元中不能使用<jsp:userBean>動作對一個bean申明兩次。   二、JSP生命周期階段   1、頁面轉換:對頁面解析並創建一個包含對應Servlet的Java源文件;   2、頁面編譯:對Java源文件編譯;   3、加載類:將編譯後的類加載到容器中;   4、創建實例:創建一個Servlet實例;   5、調用jspInit()方法:調用其他方法之前用該方法初始化;   6、調用_jspService()方法:對每個請求調用一次該方法;   7、調用jspDestroy()方法:當Servlet容器決定停止Servlet服務器時調用該方法。   (1)、創建Servlet實例   [1]、轉換階段:在轉換階段,容器解讀JSP頁面對其解析,並將其轉換成Java源代碼。在這個階段,容器需要檢查JSP頁面所使用的標簽的語法、指令中屬性/值對與標准動作的合法性、同一個JavaBeans名稱在一個轉換單元中沒有被多次使用、使用的自定義標簽以及用法是否合法,如果發現錯誤將不能轉換。   一旦驗證完成,容器將創建一個public的包含Servlet類的Java源文件。該文件位於<CATALINA_HOME>\work\Catalina\localhost\helloapp\org\apache\jsp目錄中,它包含對應於JSP文件的Servlet。   [2]、編譯階段:在將JSP頁面轉換成Java文件後,容器調用java編譯器javac編譯改文件。在該階段,編譯器將檢查在申明中、小腳本中以及表達式中所寫的全部Java代碼。   [3]、轉載與實例化:編譯成功後,容器將Servlet類裝入內存並實例化之。   (2)、調用JSP生命周期方法   JSP頁面產生的Servlet類實現了javax.servlet.jsp.HttpJspPage接口。HttpJspPage接口擴展了同一個包中的JspPage接口,該接口又擴展了javax.servlet包中的Servlet接口。因此,JSP頁面產生的Servlet類實現了這三個接口中所有的方法,故也被稱為頁面實現類。   JspPage接口只申明了兩個方法:jspInit()和jspDestroy()方法。所有的JSP頁面都應該實現這兩個方法。HttpJspPage接口中申明了一個方法:_jspService()。下面是這三個JSP方法的標志:   public void jspInit();   public void _jspService(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;   public void jspDestroy();   這三個方法稱為JSP頁面的生命周期。JSP頁面的jspInit()、_jspService()、jspDestroy()方法分別等價於Servlet的init()、Service()、destroy()方法。   [1]、jspInit()方法:容器調用該方法初始化Servlet實例。該方法是在任何其他方法調用之前調用的,並對每個Servlet實例只調用一次。通常在該方法中完成初始化或只需一次的設置工作。   [2]、_jspService()方法:對每次請求容器都調用一次該方法,並給他傳遞請求和相應對象。JSP頁面中的所有HTML元素、JSP小腳本以及JSP表達式在轉換階段都成為該方法的一部分。   [3]、jspDestroy()方法:當容器決定停止該實例提供服務時,它將調用該方法,這是在Servlet實例上調用的最後一個方法,它主要用來清理jspInit()方法獲得的資源。   一般不需要事先jspInit()和jspDestroy()方法,他們已經由基類實現了,但可以根據需要使用JSP的申明標簽<%! ... %>覆蓋這兩個方法。然而,不能覆蓋_就是jspService()方法,該方法由容器自動產生。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved