jsp編譯指令用於設置jsp程序的屬性以及由jsp生成的servlet中的屬性。
jsp常用的編譯指令有3個:include指令、page指令、taglib指令。
一、page指令
1、概念:用來設置整個JSP頁面的相關屬性和功能,其作用范圍是整個JSP頁面,包括使用include指令引用的其他文件。但是page指令不能作用於動態的包含文件,例如對使用<jsp:include>包含的文件,page指令的設置是無效的。一般情況下,page編譯指令位於頁面最上方,一個頁面可以有多個編譯配置指令。
2、語法格式:<%@page attribute1="value1" attribute2="value2"... %>
3、指令的屬性:
(1)language屬性:定義當前JSP頁面使用的腳本語言,默認為java。少數服務器支持JavaBean。
(2)import屬性:導入使用的包。jsp中用import指明多個包,用逗號隔開。
(3)contentType屬性:指定當前頁面的MIME類型和字符編碼。MIME類型有:text/plain、text/html(默認)、image/gif、image/jpeg等。默認字符編碼方式:ISO-8859-1,若需要中文,可修改為GB2312或UTF-8。
(4)pageEncoding屬性:設定jsp源文件保存時所使用的編碼。由於jsp文件要響應客戶端的請求,因此它會被編譯成一個servlet。而servlet是一個java類,java類在內存中是以Unicode進行編碼的,若jsp引擎不知道jsp的編碼格式,就無法進行解碼,並將其轉換成內存中的Unicode編碼。
(5)session屬性:指定這個jsp頁面是否支持session機制,默認為true。
(6)extends屬性:指定jsp編譯生成的servlet所繼承的父類或所實現的接口。
(7)errorPage屬性:指定錯誤處理頁面的地址。若本頁面產生了異常或者錯誤,而該jsp頁面沒有對應的處理代碼,此時就會自動調用該屬性所指向的jsp頁面。
(8)isErrorPage屬性:與errorPage屬性配合使用,指定當前頁面是否可以作為另一個jsp頁面的錯誤處理頁面。
(9)info屬性:定義jsp頁面的描述信息。在jsp頁面中,可以直接調用getServletInfo()方法獲取該值。這是由於jsp是servlet,而任何一個servlet都實現了servlet接口,servlet接口中含有getServletInfo()方法。
(10)buffer屬性:指定out對象使用緩沖區的大小。jsp的隱式對象out用於緩存jsp對客戶端瀏覽器的輸出,默認為8KB.
(11)autoFlush屬性:當輸出緩沖區即將溢出時,是否需要強制輸出緩沖區的內容,默認為true。設置為true時可正常輸出;則會在buffer溢出時產生一個異常。
(12)isThreadSafe屬性:指定對jsp頁面的訪問是否為線程安全,默認為true。若設置為true,則表示該jsp文件支持多線程;若為false則表示不支持。
(13)trimDirectiveWhitespaces屬性:是否去掉指令前后的空白字符,默認為flase。該屬性是jsp2.1規范中新增的;當屬性值是true時,取消空白字符串。
項目ch04案例:
1、創建page.jsp頁面,使0作為被除數:
2、創建錯誤頁面error.jsp:
3、結果:http://localhost:8080/ch04/error.jsp
使用page指令中的errorPage屬性,當page.jsp頁面出現異常時,內容跳轉到error.jsp頁面的內容,而地址欄中的地址沒有改變,仍然為~~~page.jsp。
二、include指令
1、概念:include是jsp的靜態包含指令,使用該指令可將一個外部文件包含到此jsp程序中。一般在jsp頁面被編譯成servlet時引入其中包含的HTML文件、jsp文件或文本文件。在include指令中,包含頁面和被包含頁面同一類型的參數不能被定義兩次。include指令通常用來包含網址中經常出現的重復性頁面,被包含文件中的任何一部分改變了,所有包含該文件的主jsp文件都需要重新進行編譯。
2、語法格式:<%@include file="文件路徑" %>
file必須是相對路徑,不需要指定端口、協議、域名等。若路徑以“/”開頭,則該路徑等同於參照jsp應用的上下文關系路徑;若路徑是以文件名或目錄名開頭,則路徑就是當前jsp文件所在的路徑。
項目ch04案例:
1、創建top.jsp頁面
2、創建footer.jsp頁面
3、使用include包含兩個頁面
4、結果:http://localhost:8080/ch04/include.jsp
三、taglib指令
1、概念:允許頁面使用用戶自定義的標簽。
2、語法格式:<%@taglib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix" %>
uri屬性:用來指明自定義標記庫的存放位置。該屬性的唯一的標識和前綴相關的標簽庫描述符,可以是絕對或相對的URL。
tagdir屬性:指示前綴將被用於標識安裝在/WEB-INF/tags/目錄或子目錄下的標簽文件,一個隱含的標簽庫描述符被使用。
prefix屬性:定義一個prefix:tagname形式的字符串前綴,用於區分多個自定義標簽。以jsp:、jspx:、java:、javax:、servlet:、sun:和sunw:開始的前綴被保留,前綴的命名必須遵循XML名稱空間的命名約定。
ch04項目案例:
結果:http://localhost:8080/ch04/taglib.jsp