- Java Web從入門到精通(第3版)
- 明日科技
- 2398字
- 2020-06-29 17:33:57
5.2 指令標(biāo)識(shí)
指令標(biāo)識(shí)主要用于設(shè)定整個(gè)JSP頁面范圍內(nèi)都有效的相關(guān)信息,它是被服務(wù)器解釋并執(zhí)行的,不會(huì)產(chǎn)生任何內(nèi)容輸出到網(wǎng)頁中。也就是說,指令標(biāo)識(shí)對(duì)于客戶端瀏覽器是不可見的。JSP頁面的指令標(biāo)識(shí)與我們的身份證類似,雖然公民身份證可以標(biāo)識(shí)公民的身份,但是它并沒有對(duì)所有見到過我們的人公開。
JSP指令標(biāo)識(shí)的語法格式如下:
<%@ 指令名 屬性1="屬性值1" 屬性2="屬性值2"……%>
參數(shù)說明:
指令名:用于指定指令名稱,在JSP中包含page、include和taglib 3條指令。
屬性:用于指定屬性名稱,不同的指令包含不同的屬性。在一個(gè)指令中,可以設(shè)置多個(gè)屬性,各屬性之間用逗號(hào)或空格分隔。
屬性值:用于指定屬性值。
例如,在應(yīng)用Eclipse創(chuàng)建JSP文件時(shí),在文件的最頂端會(huì)默認(rèn)添加一條指令,用于指定JSP所使用的語言、編碼方式等。這條指令的具體代碼如下:
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
注意
指令標(biāo)識(shí)的<%@和%>是完整的標(biāo)記,不能添加空格,但是標(biāo)簽中定義的屬性與指令名之間是有空格的。
5.2.1 page指令
page是JSP頁面最常用的指令,用于定義整個(gè)JSP頁面的相關(guān)屬性,這些屬性在JSP被服務(wù)器解析成Servlet時(shí)會(huì)轉(zhuǎn)換為相應(yīng)的Java程序代碼。page指令的語法格式如下:
<%@ page attr1="value1" attr2="value2" ……%>
page指令包含的屬性有15個(gè),下面對(duì)一些常用的屬性進(jìn)行介紹。
1.language屬性
該屬性用于設(shè)置JSP頁面使用的語言,目前只支持Java語言,以后可能會(huì)支持其他語言,如C++、C#等。該屬性的默認(rèn)值為Java。
【例5.2】 設(shè)置JSP頁面語言屬性,代碼如下:
<%@ page language="java" %>
2.extends屬性
該屬性用于設(shè)置JSP頁面繼承的Java類,所有JSP頁面在執(zhí)行之前都會(huì)被服務(wù)器解析成Servlet,而Servlet是由Java類定義的,所以JSP和Servlet都可以繼承指定的父類。該屬性并不常用,而且有可能影響服務(wù)器的性能優(yōu)化。
3.import屬性
該屬性用于設(shè)置JSP導(dǎo)入的類包。JSP頁面可以嵌入Java代碼片段,這些Java代碼在調(diào)用API時(shí)需要導(dǎo)入相應(yīng)的類包。
【例5.3】 在JSP頁面中導(dǎo)入類包,代碼如下:
<%@ page import="java.util.*" %>
4.pageEccoding屬性
該屬性用于定義JSP頁面的編碼格式,也就是指定文件編碼。JSP頁面中的所有代碼都使用該屬性指定的字符集,如果該屬性值設(shè)置為ISO-8859-1,那么這個(gè)JSP頁面就不支持中文字符。通常設(shè)置編碼格式為GBK,因?yàn)樗梢燥@示簡(jiǎn)體中文和繁體中文,而MyEclipse默認(rèn)支持最新的GB18030編碼格式,并未提供GBK編碼選項(xiàng)。
【例5.4】 設(shè)置JSP頁面編碼格式,代碼如下:
<%@ page pageEncoding="GB18030"%>
5.contentType屬性
該屬性用于設(shè)置JSP頁面的MIME類型和字符編碼,瀏覽器會(huì)據(jù)此顯示網(wǎng)頁內(nèi)容。
【例5.5】 設(shè)置JSP頁面的MIME類型和字符編碼,代碼如下:
<%@ page contentType="text/html; charset=UTF-8"%>
注意
JSP頁面的默認(rèn)編碼格式為ISO-8859-1,該編碼格式是不支持中文的,要想讓頁面支持中文需要將頁面的編碼格式設(shè)置成UTF-8或者是GBK的形式。
6.session屬性
該屬性指定JSP頁面是否使用HTTP的session會(huì)話對(duì)象。其屬性值是boolean類型,可選值為true和false。默認(rèn)值為true,表示可以使用session會(huì)話對(duì)象;如果設(shè)置為false,則當(dāng)前JSP頁面將無法使用session會(huì)話對(duì)象。
【例5.6】 設(shè)置JSP頁面是否使用HTTP的session會(huì)話對(duì)象,代碼如下:
<%@ page session="false"%>
上述代碼設(shè)置JSP頁面不使用session對(duì)象,任何對(duì)session對(duì)象的引用都會(huì)發(fā)生錯(cuò)誤。
說明
session是JSP的內(nèi)置對(duì)象之一,在后面的章節(jié)中將會(huì)介紹。
7.buffer屬性
該屬性用于設(shè)置JSP的out輸出對(duì)象使用的緩沖區(qū)大小,默認(rèn)大小為8KB,且單位只能使用KB。建議程序開發(fā)人員使用8的倍數(shù)16、32、64、128等作為該屬性的屬性值。
【例5.7】 設(shè)置JSP的out輸出對(duì)象使用的緩沖區(qū)大小,代碼如下:
<%@ page buffer="128kb"%>
說明
out對(duì)象是JSP的內(nèi)置對(duì)象之一,在后面的章節(jié)中將會(huì)介紹。
8.a(chǎn)utoFlush屬性
該屬性用于設(shè)置JSP頁面緩存滿時(shí),是否自動(dòng)刷新緩存。默認(rèn)值為true;如果設(shè)置為false,則緩存被填滿時(shí)將拋出異常。
【例5.8】 設(shè)置JSP頁面不自動(dòng)刷新緩存,代碼如下:
<%@ page autoFlush="false"%>
上述代碼取消了頁面緩存的自動(dòng)刷新。
9.isErrorPage屬性
通過該屬性可以將當(dāng)前JSP頁面設(shè)置成錯(cuò)誤處理頁面來處理另一個(gè)JSP頁面的錯(cuò)誤,也就是異常處理。這意味著當(dāng)前JSP頁面業(yè)務(wù)的改變。
【例5.9】 將當(dāng)前JSP頁面設(shè)置成錯(cuò)誤處理頁面,代碼如下:
<%@ page isErrorPage = "true"%>
10.errorPage屬性
該屬性用于指定處理當(dāng)前JSP頁面異常錯(cuò)誤的另一個(gè)JSP頁面,指定的JSP錯(cuò)誤處理頁面必須設(shè)置isErrorPage屬性為true。errorPage屬性的屬性值是一個(gè)url字符串。
【例5.10】 設(shè)置處理JSP頁面異常錯(cuò)誤的頁面,代碼如下:
<%@ page errorPage="error/loginErrorPage.jsp"%>
注意
如果設(shè)置該屬性,那么在web.xml文件中定義的任何錯(cuò)誤頁面都將被忽略,而優(yōu)先使用該屬性定義的錯(cuò)誤處理頁面。
5.2.2 include指令
文件包含指令include是JSP的另一條指令標(biāo)識(shí)。通過該指令可以在一個(gè)JSP頁面中包含另一個(gè)JSP頁面。不過該指令是靜態(tài)包含,也就是說被包含文件中所有內(nèi)容會(huì)被原樣包含到該JSP頁面中,即使被包含文件中有JSP代碼,在包含時(shí)也不會(huì)被編譯執(zhí)行。使用include指令,最終將生成一個(gè)文件,所以在被包含和包含的文件中,不能有相同名稱的變量。include指令包含文件的過程如圖5.3所示。

圖5.3 include指令包含文件的過程
include指令的語法格式如下:
<%@ include file="path"%>
該指令只有一個(gè)file屬性,用于指定要包含文件的路徑。該路徑可以是相對(duì)路徑,也可以是絕對(duì)路徑。但是不可以是通過<%=%>表達(dá)式所代表的文件。
說明
使用include指令包含文件可以大大提高代碼的重用性,而且也便于以后的維護(hù)和升級(jí)。
【例5.11】 應(yīng)用include指令包含網(wǎng)站Banner和版權(quán)信息欄。(實(shí)例位置:資源包\TM\sl\5\2)
(1)編寫一個(gè)名稱為top.jsp的文件,用于放置網(wǎng)站的Banner信息和導(dǎo)航條。這里將Banner信息和導(dǎo)航欄設(shè)計(jì)為一張圖片。這樣完成top.jsp文件,只需要在該頁面通過<img>標(biāo)記引入圖片即可。top.jsp文件的代碼如下:
<%@ page pageEncoding="GB18030"%> <img src="images/banner.JPG">
(2)編寫一個(gè)名稱為copyright.jsp的文件,用于放置網(wǎng)站的版權(quán)信息。copyright.jsp文件的具體代碼如下:

(3)創(chuàng)建一個(gè)名稱為index.jsp的文件,在該頁面中包括top.jsp和copyright.jsp文件,從而實(shí)現(xiàn)一個(gè)完整的頁面。index.jsp文件的具體代碼如下:

運(yùn)行程序,將顯示如圖5.4所示的效果。

圖5.4 包含版權(quán)信息頁
技巧
在應(yīng)用include指令進(jìn)行文件包含時(shí),為了使整個(gè)頁面的層次結(jié)構(gòu)不發(fā)生沖突,建議在被包含頁面中將<html>、<body>等標(biāo)記刪除。因?yàn)樵诎擁撁娴奈募幸呀?jīng)指定這些標(biāo)記。
5.2.3 taglib指令
在JSP文件中,可以通過taglib指令標(biāo)識(shí)聲明該頁面中所使用的標(biāo)簽庫,同時(shí)引用標(biāo)簽庫,并指定標(biāo)簽的前綴。在頁面中引用標(biāo)簽庫后,就可以通過前綴來引用標(biāo)簽庫中的標(biāo)簽。taglib指令的語法格式如下:
<%@ taglib prefix="tagPrefix" uri="tagURI" %>
參數(shù)說明:
prefix:用于指定標(biāo)簽的前綴。該前綴不能命名為jsp、jspx、java、javax、sun、servlet和sunw。
uri:用于指定標(biāo)簽庫文件的存放位置。
【例5.12】 在頁面中引用JSTL中的核心標(biāo)簽庫。示例代碼如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
說明
關(guān)于引用JSTL中的核心標(biāo)簽庫,以及使用JSTL核心標(biāo)簽庫中的標(biāo)簽的相關(guān)內(nèi)容,請(qǐng)參見第12章,這里不進(jìn)行詳細(xì)介紹。
- Oracle從新手到高手
- Learning Elixir
- Kali Linux Wireless Penetration Testing Beginner's Guide(Third Edition)
- Modern JavaScript Applications
- 小程序開發(fā)原理與實(shí)戰(zhàn)
- Java EE核心技術(shù)與應(yīng)用
- Babylon.js Essentials
- JavaScript腳本特效編程給力起飛
- Elasticsearch Essentials
- Vue.js光速入門及企業(yè)項(xiàng)目開發(fā)實(shí)戰(zhàn)
- R語言數(shù)據(jù)挖掘:實(shí)用項(xiàng)目解析
- C++17 By Example
- Visual C#(學(xué)習(xí)筆記)
- Puppet Cookbook(Third Edition)
- 零基礎(chǔ)學(xué)Java(升級(jí)版)