JSP指令用來聲明JSP頁面的一些屬性,例如編碼格式、文檔類型等。這些指令用來告知JSP引擎如何處理該JSP頁面。經常使用的編譯指令有以下三個:
使用編譯指令的語法格式如下:
<%@ 編譯指令名 屬性名=“屬性值”...%>
現在就分別對以上三個編譯指令進行總結。對於taglib
指令,將在後續的自定義標簽庫文章中再詳細總結。
page
指令是最常用的指令,用來聲明JSP頁面的屬性等。比如:
<%@ page language="java" contentType="text/html"; charset="utf-8" %>
需要注意的是,任何page
允許的屬性都只能出現一次,否則會出現編譯錯誤;import
屬性除外,import
可以多次出現。
我們可以在page
指令中設置以下的屬性:
屬性名稱
取值范圍
描述
language
java
指定解釋該JSP文件時采用的語言,默認為java
extends
任何類的全名(包含包名)
指定JSP頁面編譯所產生的Java類所繼承的父類,或所實現的接口
import
任何類名、包名
引入該JSP中用到的類、包等。JSP會默認導入四個包:java.lang.*
、javax.servlet.*
、javax.servlet.jsp.*
、javax.servlet.http
session
true、false
指明該JSP頁面是否內置Session對象。如果為true,則內置Session對象;否則不內置Session對象。默認為true
buffer
none、數字+kb
指定緩存大小。當autoFlush為true時有效
autoFlush
true、false
是否運行緩存。如果為true,則使用out.println()
等方法輸出的字符串並不是立刻到達客戶端的,而是暫存在緩存中;當緩存滿、程序執行完畢或者執行out.flush()
操作時才到客戶端。默認為true
isThreadSafe
true、false
用來設置JSP頁面是否可以多線程訪問。當設置為true時,JSP頁面能同時響應多個客戶的請求;當設置為false時,JSP頁面同一時刻只能響應一個客戶的請求,其他客戶需要排隊等待。默認值為true
info
任意字符串
指明JSP的信息。該信息可以通過Servlet.getServletInfo()
方法獲得
errorPage
某個JSP頁面的相對路徑
指明一個錯誤顯示頁面。如果該JSP程序拋出了一個未捕獲的異常,則轉到errorPage指定的頁面。errorPage指定的頁面通常isErrorPage屬性為true,且內置的exception對象為未捕獲的異常
contentType
合法的文檔類型
客戶端根據該屬性判斷文檔類型,具體的請參見這裡
pageEncoding
指定生成網頁的編碼字符集
JSP文件本身的編碼,將JSP翻譯成Java源碼時,就是根據pageEncoding的編碼格式讀取的
isErrorPage
true、false
設置JSP頁面是否為錯誤處理頁面;如果該頁面本身已是錯誤處理頁面,則通常無須指定errorPage屬性
使用include
指令,可以將一個外部文件嵌入到當前的JSP文件中。編譯時,當前的JSP文件完全包含了被包含頁面的代碼。舉個例子說明:
頁面一(page1.jsp)主要代碼:
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page pageEncoding="UTF-8"%>
<body>
<%
out.println("這是頁面一");
%>
<%-- 這裡包含頁面二 --%>
<%@ include file="page2.jsp" %>
</body>
頁面二(page2.jsp)主要代碼:
<%@ page pageEncoding="UTF-8"%>
<%out.println("這是頁面二");
%>
運行該程序,在生成class和java目錄下,我們都無法找到page2_jsp.class和page2_jsp.java。這說明頁面二還未經過編譯就已經添加到頁面一中了,這就好比直接將頁面二的代碼寫到頁面一中,請記住這一點,這將和後面總結到的include動作是截然相反的原理。
JSP支持標簽技術,使用標簽功能可以實現視圖代碼重用,很少量的代碼就能實現很復雜的顯示效果。由於taglib指令
是一項非常重要的技術,我們可以自定義我們自己的標簽庫,後續總結自定義標簽庫中我再結合自定義的標簽庫一起總結taglib
指令,這裡就不廢話了。
都是很基礎的總結,隨便一本書都可以找到我這裡總結的內容;但是,自己親手總結一遍,對每個指令的每個屬性又加深了熟悉。就是這樣,每一次總結,都有收獲,誰說不是呢!!!生日快樂!!!