一.JSP生命週期java
1.JSP編譯數據庫
當瀏覽器請求JSP頁面時,JSP引擎會首先去檢查是否須要編譯這個文件。若是這個文件沒有被編譯過,或者在上次編譯後被更改過,則編譯這個JSP文件。瀏覽器
編譯的過程包括三個步驟:緩存
2.JSP初始化安全
容器載入JSP文件後,它會在爲請求提供任何服務前調用jspInit()方法。若是您須要執行自定義的JSP初始化任務,複寫jspInit()方法就好了,就像下面這樣:服務器
public void jspInit(){ // 初始化代碼 }
通常來說程序只初始化一次,servlet也是如此。一般狀況下您能夠在jspInit()方法中初始化數據庫鏈接、打開文件和建立查詢表。session
3.JSP執行jsp
這一階段描述了JSP生命週期中一切與請求相關的交互行爲,直到被銷燬。編碼
當JSP網頁完成初始化後,JSP引擎將會調用_jspService()方法。url
_jspService()方法須要一個HttpServletRequest對象和一個HttpServletResponse對象做爲它的參數,就像下面這樣:
void _jspService(HttpServletRequest request, HttpServletResponse response) { // 服務端處理代碼 }
_jspService()方法在每一個request中被調用一次而且負責產生與之相對應的response,而且它還負責產生全部7個HTTP方法的迴應,好比GET、POST、DELETE等等。
4.JSP清理
JSP生命週期的銷燬階段描述了當一個JSP網頁從容器中被移除時所發生的一切。
jspDestroy()方法在JSP中等價於servlet中的銷燬方法。當您須要執行任何清理工做時複寫jspDestroy()方法,好比釋放數據庫鏈接或者關閉文件夾等等。
jspDestroy()方法的格式以下:
public void jspDestroy() { // 清理代碼 }
二.JSP語法
1.聲明
(1)<%! int a=1 %>
(2)<%! int a,b,c %>
(3)<%! int xx=0; public int cc(int a,int b){ return a+b;} %>2.腳本程序
<% xx=cc(10,5) %>注:<%!%> 與<%%>區別
(1)<%!%>裏面定義的屬性是成員屬性,至關於類的屬性,方法至關因而全局的方法,至關因而類裏面的方法.可是它是不能夠進行輸出的,由於它只是進行方法的定義和屬性的定義。
(2)<%%>這個裏面能夠進行屬性的定義,能夠輸出內容,可是它不能夠進行方法的定義,由於這對標籤裏面的內容未來是在此jsp被編譯爲servlet的時候放在了_jspService()方法裏面的,這個方法就是服務器向客戶端輸出 內容的地方,它自己就是一個方法,因此若是你在它裏面定義方法的話,那麼就至關因而在類的方法裏面嵌套定義了方法,這在java裏面是不容許的。可是你能夠在裏面定義本身的私有變量,由於方法裏面也能夠定義變量,也能夠調用方法,可是惟獨不能夠再定義方法了。
(3)<%!%>是用來定義成員變量屬性和方法的,<%%>主要是用來輸出內容的,所以若是涉及到了成員變量的操做,那麼咱們就應該使用<%!%>,而若是是涉及到了輸出內容的時候,就使用<%%>。
3.表達式
<%= a%> 輸出結果
4.指令
指令 | 描述 |
---|---|
<%@ page ... %> | 定義頁面的依賴屬性,好比腳本語言、error頁面、緩存需求等等 |
<%@ include ... %> | 包含其餘文件 |
<%@ taglib ... %> | 引入標籤庫的定義,能夠是自定義標籤 |
詳解:
(1)Page指令
Page指令爲容器提供當前頁面的使用說明。一個JSP頁面能夠包含多個page指令。
Page指令的語法格式:
<%@ page attribute="value" %>
等價的XML格式:
<jsp:directive.page attribute="value" />
屬性
下表列出與Page指令相關的屬性:
屬性 | 描述 |
---|---|
buffer | 指定out對象使用緩衝區的大小 |
autoFlush | 控制out對象的 緩存區 |
contentType | 指定當前JSP頁面的MIME類型和字符編碼 |
errorPage | 指定當JSP頁面發生異常時須要轉向的錯誤處理頁面 |
isErrorPage | 指定當前頁面是否能夠做爲另外一個JSP頁面的錯誤處理頁面 |
extends | 指定servlet從哪個類繼承 |
import | 導入要使用的Java類 |
info | 定義JSP頁面的描述信息 |
isThreadSafe | 指定對JSP頁面的訪問是否爲線程安全 |
language | 定義JSP頁面所用的腳本語言,默認是Java |
session | 指定JSP頁面是否使用session |
isELIgnored | 指定是否執行EL表達式 |
isScriptingEnabled | 肯定腳本元素可否被使用 |
(2)Include指令
JSP能夠經過include指令來包含其餘文件。被包含的文件能夠是JSP文件、HTML文件或文本文件。包含的文件就好像是該JSP文件的一部分,會被同時編譯執行。
Include指令的語法格式以下:
<%@ include file="文件相對 url 地址" %>
include 指令中的文件名其實是一個相對的 URL 地址。
若是您沒有給文件關聯一個路徑,JSP編譯器默認在當前路徑下尋找。
等價的XML語法:
<jsp:directive.include file="文件相對 url 地址" />
(3)Taglib指令
JSP API容許用戶自定義標籤,一個自定義標籤庫就是自定義標籤的集合。
Taglib指令引入一個自定義標籤集合的定義,包括庫路徑、自定義標籤。
Taglib指令的語法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri屬性肯定標籤庫的位置,prefix屬性指定標籤庫的前綴。
等價的XML語法:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />