理解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註釋,通過瀏覽器檢視網頁原始碼可以看見註釋內容 |
<\% | 代表靜態<%常量 |
%\> | 代表靜態%>常量 |
\' | 在屬性中使用單引號 |
\" | 在屬性中使用的雙引號 |