JSP page 指令是頁面指令,可以定義在整個 JSP 頁面范圍有效的屬性和相關的功能。利用 page 指令,可以指定腳本語言,導入需要的類,指明輸出內容的類型,指定處理異常的錯誤頁面,以及指定頁面輸出緩存的大小,還可以一次設置多個屬性。
page 指令的屬性如下:
<%@ page
[language="java"]
[contentType="mimeType[ ;charset=CHARSET ]"]
[import="{package.class|package.*},..."]
[info="text"]
[extends="package.class"]
[session="true|false"]
[errorPage="relativeURL"]
[isThreadSafe="true|false"]
[buffer="none|8kb|size kb"]
[autoFlush="true|false"]
[isThreadSafe="true|false"]
[isELIgnored="true|false"]
[page Encoding="CHARSET"]
%>
提示:
語法格式說明中的“[”和“]”符號括起來的內容表示可選項。
可以在一個頁面上使用多個 page 指令,其中的屬性只能使用一次(import 屬性除外)。
JSP page 指令將使用這些屬性的默認值來設置 JSP 頁面,下面介紹 page 指令的 13 個屬性。
1、language 屬性:設置當前頁面中編寫 JSP 腳本所使用的語言,默認值為 java。
例如:
<%@ page language="java" %>
目前只可以使用 Java 語言。
2、contenType 屬性:設置發送到客戶端文檔響應報頭的 MIME(Multipurpose Internet MailExtention)類型和字符編碼,多個值之間用“;”分開。contenType 的用法如下:
<%@ page contenType="MIME 類型; charset=字符編碼" %>
MIME 類型被設置為 text/html,如果該屬性設置不正確,如設置為 text/css,則客戶端瀏覽器顯示 HTML 樣式時,不能對 HTML 標識進行解釋,而直接顯示 HTML 代碼。
在 JSP 頁面中,默認情況下設置的字符編碼為 ISO-8859-1,即 contentType="text/html;charset=ISO-8859-1"。但一般情況下,應該將該屬性設置為
contentType="text/html;charset=utf-8"
此處設置 MIME 類型為 text/html,網頁所用字符集為 utf-8。
3、import 屬性:用來導入程序中要用到的包或類,可以有多個值,無論是 Java 核心包中自帶的類還是用戶自行編寫的類,都要在 import 中引入。import 屬性的用法如下:
<%@ page import="包名.類名" %>
如果想要導入包里的全部類,可以這樣使用:
<%@ page import="包名.*" %>
在 JSP page 指令中,可多次使用該屬性來導入多個類。例如:
<%@ page import="包名.類1" %> <%@ page import="包名.類2" %>
或者通過逗號間隔來導入多個類:
<%@ page import="包名.類1,包名.類2" %>
在 JSP 中,已經默認導入了以下包:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
所以,即使沒有用 import 屬性進行導入,在 JSP 頁面中也可以調用上述包中的類。
【例1】顯示歡迎信息和用戶登錄的日期時間。
本例通過導入 java.util.Date 類來顯示當前的日期時間。具體步驟如下。
① 使用 page 指令的 import 屬性將 java.util.Date 類導入,然后向用戶顯示歡迎信息,并把當前日期時間顯示出來。具體代碼如下:
<%@ page import="java.util.Date" language="java" contentType="text/html;charset=utf-8"%>
<html>
<body>
您好,歡迎光臨動力節點Java學院!<br/>
您登錄的時間是<%=new Date() %>
</body>
</html>
② 運行該頁面,結果如圖 1 所示。
圖1 顯示歡迎信息和用戶登錄的日期時間
4、info 屬性:設置 JSP 頁面的相關信息,如當前頁面的作者、編寫時間等。此值可設置為任意字符串,由 Servlet.getServletInfo() 方法來獲取所設置的值。
【例2】設置并顯示 JSP 頁面的作者等相關信息。
本例通過 page 指令的 info 屬性來設置頁面的相關信息,通過 Servlet.getServletInfo() 方法來獲取所設置的值,具體步驟如下。
① 使用 page 指令的 info 屬性設置頁面的作者、版本以及編寫時間等。具體代碼如下:
<%@ page import="java.util.Date" language="java" contentType="text/html;charset=utf-8"%>
<%@ page info="作者:www.ilovecolors.com.cn <br/> 版本: v1.0 <br/> 編寫時間:2018年11月21 星期三 <br/> 敬請關注, 謝謝!"%>
<html>
<body>
<%
String str=this.getServletInfo();
out.print (str) ;
%>
</body>
<html>
② 運行該頁面,結果如圖 2 所示。
圖2 設置并顯示JSP頁面的作者相關信息
5、extends 屬性:指定將 JSP 頁面轉換為 Servlet 后繼承的類。在 JSP 中,通常不會設置該屬性,JSP 容器會提供繼承的父類。并且,如果設置了該屬性,一些改動會影響 JSP 的編譯能力。
6、session 屬性:表示當前頁面是否支持 session,如果為 false,則在 JSP 頁面中不能使用 session 對象以及 scope=session 的 JavaBean 或 EJB。該屬性的默認值為 true。
7、errorPage 屬性:用于指定JSP文件的相對路徑,在頁面出錯時,將轉到這個 JSP 文件來進行處理。與此相適應,需要將這個 JSP 文件的 isErrorPage 屬性設為 true。
設置 errorPage 屬性后,JSP 網頁中的異常仍然會產生,只不過此時捕捉到的異常將不由當前網頁進行處理,而是由 errorPage 屬性所指定的網頁進行處理。如果該屬性值設置為以“/”開頭的路徑,則錯誤處理頁面在當前應用程序的根目錄下;否則在當前頁面所在的目錄下。
8、isErrorPage 屬性:指示一個頁面是否為錯誤處理頁面。設置為 true 時,在這個 JSP 頁面中的內置對象 exception 將被定義,其值將被設定為調用此頁面的 JSP 頁面的錯誤對象,以處理該頁面所產生的錯誤。
isErrorPage 屬性的默認值為 false,此時不能使用內置對象 exception 來處理異常,否則將產生編譯錯誤。
例如,在發生異常的頁面上有如下用法:
<%@ page errorPage="error.jsp" %>
用上面的代碼,就可以指明當該 JSP 頁面出現異常時,跳轉到 error.jsp 去處理異常。而在 error.jsp 中,需要使用下面的語句來說明可以進行錯誤處理:
<%@ page isErrorPage="true" %>
【例3】頁面出現異常的處理。
本例通過 page 指令的 errorPage 和 isErrorPage 兩個屬性來演示當頁面出現異常時應如何處理。具體步驟如下。
① 創建 2-18.jsp 頁面,使用 page 指令的 errorPage 屬性指定頁面出現異常時所轉向的頁面。具體代碼如下:
<%@ page contentType="text/html; charset=utf-8" errorPage="2-18error.jsp" %>
<html>
<body>
<%
//此頁面如果發生異常,將向2-18error.jsp拋出異常,并令其進行處理
int x1=5;
int x2=0;
int x3=x1/x2;
out .print (x3);
%>
</body>
</html>
該程序執行的是除法運算,如果除數為 0,將會拋出一個數學運算異常,從 errorPage="2-18error.jsp" 可以看出,程序指定 2-18error.jsp 為其處理異常。
② 創建 2-18error.jsp 頁面,使用 page 指令的 isErrorPage 屬性指定為出錯頁面,此頁面可以使用 exception 異常對象處理錯誤信息。具體代碼如下:
<%@ page contentType="text/html; charset=utf-8" isErrorPage="true" %>
<html>
<body>
出現錯誤,錯誤如下:<br/>
<hr>
<%=exception.getMessage() %>
</body>
</html>
③ 運行 2-18.jsp 頁面,結果如圖 3 所示。
圖3 頁面出現異常處理
提示:
為了確譯當頁面出錯時跳轉到 errorPage 所指的頁面,需要打開 IE 瀏覽器,選擇“工具”→“Internet 選項”菜單命令,在彈出的對話框中選擇“高級”選項卡,取消選中“顯示友好 HTTP 錯誤信息”復選框。
9、 buffer 屬性:內置輸出流對象 out 負責將服務器的某些信息或運行結果發送到客戶端顯示,buffer 屬性用來指定 out 緩沖區的大小。其值可以是 none、8KB 或是給定的 KB 值。
值為 none 表示沒有緩存,直接輸出至客戶端的瀏覽器中;如果將該屬性指定為數值,則輸出緩沖區的大小不應小于該值,默認為 8KB(因不同的服務器而不同,但大多數情況下都為 8KB)。
10、 autoFlush 屬性:當緩沖區滿時,設置是否自動刷新緩沖區。默認值為 true,表示當緩沖區滿時,自動將其中的內容輸出到客戶端;如果設為 false,則當緩沖區滿時會出現 JSP Buffer overflow 溢出異常。
提示:
當 buffer 屬性的值設置為 none 時,autoFush 屬性的值不能設置為 false。
11、isThreadSafe 屬性:設置 JSP 頁面是否可以多線程訪問。默認值為 true,表示當前 JSP 頁面被轉換為 Servlet 后,會以多線程的方式處理來自多個用戶的請求;如果設置為 false,則轉換后的 Servlet 會實現 SingleThreadMode 接口,并且將以單線程的方式來處理用戶請求。
12、pageEncoding 屬性:設置 JSP 頁面字符的編碼,常見的編碼類型有 ISO-8859-1、gb2312、utf-8 和 GBK 等。默認值為 ISO-8859-1。其用法如下:
<%@ page pageEncoding="字符編碼" %>
例如:
<%@ page pageEncoding="utf-8" %>
這表示網頁使用了 utf-8 編碼,與 contentType 屬性中的字符編碼設置作用相同。
13、isELIgnored 屬性:其值可設置為 true 或 false,表示是否在此 JSP 網頁中執行或忽略表達式語言 ${}。設置為 true 時,JSP 容器將忽略表達式語言。