JSP的編譯指令是通知JSP引擎的訊息,它不直接產生輸出。編譯指令都有預設值,因此開發人員無須為每個指令設定值。
常見的編譯指令有如下三個:
① page:該指令是針對當前頁面的指令。
② include: 用於指定包含另一個頁面。
③ taglib: 用於定義和訪問自訂標籤。
使用編譯指令的文法格式如下:
<%@ 編譯指令名 屬性名稱=“屬性值”...%>
page指令:
page指令通常位於JSP頁面的頂端,一個JSP頁面可以使用多條page指令。下面介紹page指令各屬性的含義:
language:聲明當前JSP頁面使用的指令碼語言的種類。目前該屬性的值只能為java,預設值也為java,所以通常無須設定。
import:用來匯入包。下面幾個包是預設自動匯入的,預設匯入的包有:java.lang.*, javax.servlet.*, javax.servlet.http.*, javax,.servlet.jsp.*.
contentType:用於告知用戶端,伺服器對此次請求所發回的響應的本文格式(MIME類型)和編碼字元集。預設的MIME類型為text/html,預設的字元集為ISO-8859-1,國內開發一般將字元集設定為UTF-8或者GBK。所以常見這一項為:contentType="text/html;charset=UTF-8",這就是說,告訴用戶端,伺服器的響應的本文檔案格式為text/html,這樣用戶端就會選擇以它自己的預設的瀏覽器開啟檔案,而不是別的應用程式。charset=UTF-8可以告知用戶端瀏覽器,伺服器返回的檔案的編碼格式為UTF-8,這樣瀏覽器就按照UTF-8格式進行解碼並且以UTF-8字元集進行顯示頁面。contentType的作用本質上相當於類比了一個Http協議的訊息頭。contentType雖然寫在JSP檔案中,但是因為JSP檔案其實並不能直接響應用戶端請求,它必須編譯成對應的Servlet以後才能響應請求。所以本質上這個contentType是針對Servlet的設定,即Servlet告訴用戶端,我返回的檔案(以流的形式,response.getWriter())的MIME類型為text/html,檔案的編碼字元集為UTF-8。
pageEncoding:設定JSP源檔案儲存時所使用的編碼(MyEclipse中右擊檔案->Properties->Resource->Text file encoding,對於MyEclipse,pageEncoding的值設定為哪種字元集,儲存時自動採用這種字元集儲存)。因為JSP檔案要想響應用戶端的請求,它就必須先被編譯成一個Servlet,而Servlet是一個Java類,Java類在記憶體中是以Unicode進行編碼的,如果JSP引擎(將JSP翻譯成對應的Servlet)不知道JSP的編碼格式,就無法進行解碼,然後將其轉換成記憶體中的Unicode編碼。注意區分contentType的charset和pageEncoding,charset是響應時Servlet(JSP已經編譯成了Servlet)告訴用戶端瀏覽器”我“是以這種字元編碼的,”你“也要以這種字元解碼並顯示,整個過程涉及伺服器和用戶端兩方面,而pageEncoding是伺服器端JSP檔案告訴JSP引擎要以何種編碼進行解碼,即此時JSP還沒被編譯成Servlet,它是被編譯成Servlet的前提準備工作,整個過程都發生在伺服器端,與用戶端無關。
session:設定這個JSP頁面是否支援session機制,預設為true,所以一般不需要設定,保持預設值即可。
errorPage:指定錯誤處理頁面的地址。如果本頁面產生了異常或者錯誤,而該JSP頁面沒有對應的處理代碼,此時就會自動調用該屬性所指向的JSP頁面。
isErrorPage:和errorPage屬性配合使用。設定本JSP頁面是否為錯誤處理頁面。
info:設定該JSP程式(不要忘記本質上是個Servlet)的資訊,也可以看做其說明。可以通過Servlet.getServletInfo()方法擷取該值。在JSP頁面中,可以直接調用getServletInfo()方法擷取該值如:<%=getServletInfo()%>.因為JSP是Servlet,而任何一個Servlet都實現了Servlet介面,Servlet介面中含有getServletInfo()方法。親,還記得大明湖畔的Servlet介面中的五個方法嗎!
extends:指定JSP編譯產生的Servlet所繼承的父類或所實現的介面,一般很少用。
buffer:指定輸出緩衝區的大小。JSP的隱含對象out(JSP有九大隱含對象或者說內建對象)用於緩衝JSP(其實是Servlet)對用戶端瀏覽器的輸出,預設值為8KB,可以設定為none,也可以設定為其他的值,單位為KB。
autoFlush:當輸出緩衝區即將溢出時,是否需要強制輸出緩衝區的內容。設定為true時可以正常輸出,設定為false時,則會在buffer溢出時產生一個異常。
上面11個屬性中最常用的還是import,contentType,pageEncoding,所以最常見的最簡單的JSP模版為:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><html><head><title>Insert title here</title></head><body></body></html>