JSP生命週期

忘塵天外天發表於2017-08-20

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

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

  JSP的生命週期有這麼幾個階段:

  編譯階段:

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

  初始化階段:

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

  執行階段:

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

  銷燬階段:

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

JSP編譯

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

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

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

JSP 初始化

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

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

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

JSP執行

  這一階段描述了JSP生命週期中一切與請求相關的互動行為,直到銷燬。當JSP頁面完成初始化後,JSP引擎會呼叫_jspService()方法。_jspService()需要一個HttpServletRequest物件和一個HttpServletResponse物件作為它的引數,

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

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

JSP清理

  JSP生命週期的銷燬階段描述了當一個JSP頁面從容器中被移除時發生的一切。jspDestroy()方法在JSP 中等價servlet中的銷燬方法。當相應執行任何清理工作時重寫jspDestroy(),例如,釋放資料庫連線或者關閉檔案等。jspDestroy()方法:

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

 JSP生命週期程式碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>life.jsp</title>
<body>
<%! 
        private  int   initVar=0;
        private  int   serviceVar = 0 ;
        private  int   destroyVar = 0;
%>

<%public  void  jspInit(){
               initVar++ ;
              System.out.println("jspInit():JSP被初始化了"+initVar+"次");
           }

          public  void  jspDestroy(){
                destroyVar++;
System.out.println("jspDestroy(): JSP被銷燬了"+destroyVar+"次");
          }
%>
<%
       serviceVaar++;
       System.out.println("_jspService():JSP共響應了"+serviceVar+"次請求");

        String  content1 = "初始化次數:"+initVar ;
        String  content2 = "響應客戶請求次數:"+ serviceVar ;
        String  content3 = "銷燬次數:"+destroyVar ;
%>
<P><%=content1 %></p>
<P><%=content2 %></p>
<P><%=content3 %></p>

</body>
</html>

JSP語法

指令碼程式

  指令碼程式可以包含任意量的Java語句、變數、方法或表示式,只要它們在指令碼語言中是有效的。

  指令碼程式的語法格式:

<%   程式碼片段   %>

 中文編碼問題

  要在頁面上正常顯示中文,需要在JSP檔案頭部新增一下程式碼:

<%@ page language="java"  contentType="text/html ; charset=UTF-8"  
                 pageEncoding="UTF-8" %>

 JSP宣告

  一個宣告語句可以宣告一個或多個變數、方法,供後面的Java程式碼使用。在JSP檔案中,必須信宣告這些變數和方法然後才能使用。JSP宣告的語法格式:

<%!  declaration1 ;  declaration2 ; ...  %>

 JSP表示式

  一個JSP表示式中包含的指令碼語言表示式,先被轉化成String,然後插入到表示式出現的地方。由於表示式的值會被轉化成String,可以在一個文字行中使用表示式而不用去管它是否HTML標籤。表示式元素中可以包含任何符合Java語言規範的表示式,但是不能使用分號來結束表示式。

           <%=表示式 %>

 JSP註釋

J  SP註釋主要有兩個作用:為程式碼做註釋以及將某段程式碼註釋掉。JSP註釋的語法規則:

語法 描述
<%-- 註釋--%> JSP註釋,註釋的內容不被髮送至瀏覽器甚至不被編譯
<!-- 註釋--> HTML註釋,通過瀏覽器檢視網頁原始碼可以看見註釋內容
<\% 代表靜態<%常量
%\> 代表靜態%>常量
\' 在屬性中使用單引號
\" 在屬性中使用的雙引號