jsp中page指令用法詳解
本文實(shí)例講述了jsp中page指令用法。分享給大家供大家參考。具體如下:
一、JSP 指令
JSP 指令(directive)影響由 JSP 頁(yè)面生成的 servlet 的整體結(jié)構(gòu)。下面的模板給出指令的兩種可能形式。屬性值兩邊的雙引號(hào)可以替換為單引號(hào),但引號(hào)標(biāo)記不能完全省略。如果要在屬性值中使用引號(hào),則要在它們之前添加反斜杠,' 使用 \'," 使用 \"
<% directive attribute="value" %> <% directive attribute1="value1" attribute2="value2" ...... attribute3="value3" %>
在 JSP 中,主要有3種類型的指令:page,include 和 taglib。page 指令允許通過(guò)類的導(dǎo)入、servlet 超類的定制、內(nèi)容類型的設(shè)置、以及諸如此類的事物來(lái)控制 servlet 的結(jié)構(gòu)。page 指令可以放在文檔中的任何地方。第二個(gè)指令,include 允許在 JSP 文件轉(zhuǎn)換到 servlet 時(shí),將一個(gè)文件插入到 JSP 頁(yè)面中。include 指令應(yīng)該放 置在文檔中希望插入文件的地方。第三個(gè)指令,taglib,定義自 定義的標(biāo)記標(biāo)簽。
二、JSP page 指令
page 指令可以定義下面這些大小寫敏感的屬性(大致按照使用的頻率列出):import、contentType、pageEncoding、session、isELIgnored(只限 JSP 2.0)、buffer、autoFlush、info、errorPage、isErrorPage、isThreadSafe、language 和 extends。
2.1 import 屬性
使用 page 指令的 import 屬性指定 JSP 頁(yè)面轉(zhuǎn)換成的 servlet 應(yīng)該輸入的包。在 JSP 中,包是絕對(duì)必需的。原因是,如果沒(méi)有使用包,系統(tǒng)則認(rèn)為所引用的類與當(dāng)前類在同一個(gè)包中。例如,假定一個(gè) JSP 頁(yè)面包含下面的 scriptlet:
在此,如果 Test 在某個(gè)輸入包中,則沒(méi)有歧義。但是,如果 Test 不在包中,或者頁(yè)面沒(méi)有明確地導(dǎo)入 Test 所屬的包,那么系統(tǒng)將會(huì)認(rèn)為 Test 就在這個(gè)自動(dòng)生成的 servlet 所在的包中。但問(wèn)題是自動(dòng)生成的 servlet 所在的包是未知的!服務(wù)器在創(chuàng)建 servlet 時(shí),常常會(huì)根據(jù) JSP 頁(yè)面所在的目錄來(lái)決定它的包。別的服務(wù)器可能使用其他不同的方式。因此,不能指望不使用包的類能夠正常工作。對(duì)于 bean 也同樣如此,因?yàn)?bean 不過(guò)是遵循某些簡(jiǎn)單命名約定和結(jié)構(gòu)約定的類。
默認(rèn)情況下,servlet 導(dǎo)入 java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*,也許還包括一些服務(wù)器特有的包。編寫 JSP 代碼時(shí),絕不要依靠任何自動(dòng)導(dǎo)入的服務(wù)器特有類。這樣做會(huì)使得代碼不可移植。
使用 import 屬性時(shí),可以采用下面兩種形式:
<%@ page import="package.class" %> <%@ page import="package.class1, ..., package.classN" %>
例如,下面的指令表示 java.util 包和 cn.foololdfat 包中的所有類在使用時(shí)無(wú)需給出明確的包標(biāo)識(shí)符:
import 是 page 的屬性中惟一允許在同一文檔中多次出現(xiàn)的屬性。盡管 page 指令可以出現(xiàn)在文檔中的任何地方,但一般不是將 import 語(yǔ)句放在文檔頂部附近,就是放在相應(yīng)的包首次使用之前。
2.2 contentType 和 pageEncoding 屬性
contentType 屬性設(shè)置 Content-Type 響應(yīng)報(bào)頭,標(biāo)明即將發(fā)送到客戶程序的文檔的 MIME 類型。有關(guān)MIME 類型的更多信息,參見(jiàn)Java Web 開(kāi)發(fā) (5) HTTP 響應(yīng)報(bào)頭。
使用 contentType 屬性時(shí),可以采用下面兩種形式:
<%@ page contentType="MIME-TYPE" %> <%@ page contentType="MIME-Type; charset=Character-Set" %>
例如,指令
和下面的 scriptlet 所起到的作用基木相同
兩種形式的第一點(diǎn)不同是,response.setContentType 使用明確的 Java 代碼(這是一些開(kāi)發(fā)人員力圖避免使用的方式),而 page 指令只用到 JSP 語(yǔ)法。第二點(diǎn)不同是,指令被特殊處理,它們不是在出現(xiàn)的位置直接成為 _jspService 代碼。這意味著 response.setContentType 能夠有條件地調(diào)用,而 page 指令不能。條件性地設(shè)置內(nèi)容的類型主要用在同一內(nèi)容能夠以多種不同的形式進(jìn)行顯示的情況下。
不同于常規(guī) servlet (默認(rèn)的 MIME 類型為 text/plain),JSP 頁(yè)面的默認(rèn) MIME 類型是 text/html (默認(rèn)字符集為 ISO-8859-1)。因此,如果 JSP 頁(yè)曲以 Latin 字符集輸出 HTML則根本無(wú)需使用 contentType,如果希望同時(shí)更改內(nèi)容的類型和字符集,可以使用下面的語(yǔ)句:
但是,如果只想更改字符集,使用 pageEncoding 屬性更為簡(jiǎn)單。例如,中文 JSP 頁(yè)面可以使用下面的語(yǔ)句:
可考慮將Java Web 開(kāi)發(fā) (5) HTTP 響應(yīng)報(bào)頭中生成 Excel 表格的例子用 JSP 實(shí)現(xiàn),以體會(huì) contentType 的作用。
2.3 session 屬性
session 屬性控制頁(yè)面是否參與 HTTP 會(huì)話。使用這個(gè)屬性時(shí),可以采用下面兩種形式:
<%@ page session="true" %> <%--Default--%> <%@ page session="false" %>
true 值(默認(rèn))表示,如果存在已有會(huì)話,則預(yù)定義變量 session (類型為HttpSession)應(yīng)該綁定到現(xiàn)有的會(huì)話;否則,創(chuàng)建新的會(huì)話并將其綁定到 session。false 值表示不自動(dòng)創(chuàng)建會(huì)話,在 JSP 頁(yè)面轉(zhuǎn)換成 servlet 時(shí),對(duì)變量 session 的訪問(wèn)會(huì)導(dǎo)致錯(cuò)誤。
對(duì)于高流量的網(wǎng)站,使用 session="false" 可以節(jié)省大量的服務(wù)器內(nèi)存。但要注意,session="false" 并不禁用會(huì)話跟蹤,它只是阻止 JSP 頁(yè)面為那些尚不擁有會(huì)話的用戶創(chuàng)建新的會(huì)話。由于會(huì)話是針對(duì)用戶,不是針對(duì)貞面,所以,關(guān)閉某個(gè)頁(yè)面的會(huì)話跟蹤沒(méi)有任何益處,除非有可能在同一客戶會(huì)話中訪問(wèn)到的相關(guān)頁(yè)面都關(guān)閉會(huì)話跟蹤。
2.4 isELIgnored 屬性
isELIgnored 屬性控制的是:忽略(true)JSP 2.0 表達(dá)式語(yǔ)言(EL),還是進(jìn)行正常的求值(false)。這是 JSP 2.0 新引入的屬性;在只支持 JSP 1.2 及早期版本的服務(wù)器中,使用這項(xiàng)屬性是不合法的。這個(gè)屬性的默認(rèn)值依賴于 Web 應(yīng)用所使用的 web.xml 的版本。如果 web.xml 指定 servlet 2.3(對(duì)應(yīng)JSP 1.2)或更早版本,默認(rèn)值為 true(但變更默認(rèn)值依舊是合法的,JSP 2.0 兼容的服務(wù)器中都允許使用這項(xiàng)屬性,不管 web.xml 的版本如何)。如果 web.xml 指定 servlet 2.4(對(duì)應(yīng) JSP 2.0)或之后的版本,那么默認(rèn)值為false。使用這個(gè)屬性時(shí),可以采用下面兩種形式:
<%@ page isELIgnored="false" %> <%@ page isELIgnored="true" %>
2.5 buffer 和 autoFlush 屬性
buffer 屬性指定 out 變量(類型為 JspWriter )使用的緩沖區(qū)的大小。使用這個(gè)屬性時(shí),可以采用下面兩種形式:
<%@ page buffer="sizekb" %> <%@ page buffer="none" %>
服務(wù)器實(shí)際使用的緩沖區(qū)可能比指定的更大,但不會(huì)小于指定的大小。例如,<%@ page buffer="32kb" %> 表示應(yīng)該對(duì)文檔的內(nèi)容進(jìn)行緩存,除非累積至少為32KB、頁(yè)面完成或明確地對(duì)輸出執(zhí)行清空(例如使用 response. flushBuffer),否則不將文檔發(fā)送給客戶。
默認(rèn)的緩沖區(qū)大小與服務(wù)器相關(guān),但至少8KB。如果要將緩沖功能關(guān)閉,應(yīng)該十分小心:這樣做要求設(shè)置報(bào)頭或狀態(tài)代碼的 JSP 元素都要出現(xiàn)在文件的頂部,位于任何 HTML 內(nèi)容之前。另一方面,有時(shí)輸出內(nèi)容的每一行都需要較長(zhǎng)的生成時(shí)間,此時(shí)禁用緩沖或使用小緩沖區(qū)會(huì)更有效率;這樣,用戶能夠在每一行生成之后立即看到它們,而不是等待更長(zhǎng)的時(shí)間看到成組的行。
autoFlush 屬性控制當(dāng)緩沖區(qū)充滿之后,是應(yīng)該自動(dòng)清空輸出緩沖區(qū)(默認(rèn)),還是在緩沖區(qū)溢出后拋出一個(gè)異常(autoFlush="false")。使用這個(gè)屬性時(shí),可以采用下面兩種形式:
<%@ page autoFlush="true" %> <%--Default--%> <%@ page autoFlush="false" %>
在 buffer="none" 時(shí),false 值是不合法的。如果客戶程序是常規(guī)的 Web 瀏覽器,那么 autoFlush="false" 的使用極為罕見(jiàn)。但是,如果客戶程序是定制應(yīng)用程序,可能希望確保應(yīng)用程序要么接收到完整的消息,要么根本沒(méi)有消息。false 值還可以用來(lái)捕獲產(chǎn)生過(guò)多數(shù)據(jù)的數(shù)據(jù)庫(kù)查詢,但是,一般說(shuō)來(lái),將這些邏輯放在數(shù)據(jù)訪問(wèn)代碼中(而非表示代碼)要更好一些。
2.6 info 屬性
info 屬性定義一個(gè)可以在 servlet 中通過(guò) getServletInfo 方法獲取的字符串,使用 info 屬性時(shí),采用下面的形式:
2.7 errorPage 和 isErrorPage 屬性
errorPage 屬性用來(lái)指定一個(gè) JSP 頁(yè)面,由該頁(yè)面來(lái)處理當(dāng)前頁(yè)面中拋出但未被捕獲的任何異常(即類型為 Throwable 的對(duì)象)。它的應(yīng)用方式如下:
指定的錯(cuò)誤頁(yè)面可以通過(guò) exception 變量訪問(wèn)拋出的異常。
isErrorPage 屬性表示當(dāng)前頁(yè)是否可以作為其他 JSP 頁(yè)面的錯(cuò)誤頁(yè)面。使用 isErrorPage 屬性時(shí),可以采用下面兩種形式:
<%@ page isErrorPage="true" %> <%@ page isErrorPage="false" %> <%--Default--%>
2.8 isThreadSafe 屬性
isThreadSafe 屬性控制由 JSP 頁(yè)面生成的 servlet 是允許并行訪問(wèn)(默認(rèn)),還是同一時(shí)間不允許多個(gè)請(qǐng)求訪問(wèn)單個(gè) servlet 實(shí)例(isThreadSafe="false")。使用 isThreadSafe 屬性時(shí),可以采用下面兩種形式:
<%@ page isThreadSafe="true" %> <%--Default--%> <%@page isThreadSafe="false" %>
遺憾的是,阻止并發(fā)訪問(wèn)的標(biāo)準(zhǔn)機(jī)制是實(shí)現(xiàn) SingleThreadModel接口。盡管在早期推薦使用 SingleThreadModel 和 isThreadSafe="false",但最近的經(jīng)驗(yàn)表明 SingleThreadModel 的設(shè)計(jì)很差,使得它基本土毫無(wú)用處。因而,應(yīng)該避免使用 isThreadSafe,采用顯式的同步措施取而代之。
2.9 extends 屬性
extends 屬性指定 JSP 頁(yè)面所生成的 servlet 的超類(superclass )。它采用下面的形式:
這個(gè)屬性一般為開(kāi)發(fā)人員或提供商保留,由他們對(duì)頁(yè)面的運(yùn)作方式做出根本性的改變(如添加個(gè)性化特性)。一般人應(yīng)該避免使用這個(gè)屬性,除非引用由服務(wù)器提供商專為這種目的提供的類。
2.10 language 屬性
從某種角度講,language 屬性的作用是指定頁(yè)面使用的腳本語(yǔ)言,如下所示:
就現(xiàn)在來(lái)說(shuō),由于 Java 既是默認(rèn)選擇,也是惟一合法的選擇,所以沒(méi)必要再去關(guān)心這個(gè)屬性。
希望本文所述對(duì)大家的JSP程序設(shè)計(jì)有所幫助。
相關(guān)文章
處理jsp顯示文字過(guò)長(zhǎng)問(wèn)題的解決方法
處理jsp顯示文字過(guò)長(zhǎng)問(wèn)題的解決方法,需要的朋友可以參考一下2013-03-03解決JSP開(kāi)發(fā)中Web程序顯示中文三種方法
JSP顯示中文方法小結(jié)2008-11-11jsp 開(kāi)發(fā)之struts2中s:select標(biāo)簽的使用
這篇文章主要介紹了jsp 開(kāi)發(fā)之struts2中s:select標(biāo)簽的使用的相關(guān)資料,需要的朋友可以參考下2017-08-08JSP下動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別分析
這篇文章給大家介紹了JSP下動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別分析,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2007-12-12JSP對(duì)URL鏈接中的中文亂碼處理方法總結(jié)
這篇文章主要介紹了JSP對(duì)URL鏈接中的中文亂碼處理方法總結(jié),注意一下各瀏覽器的兼容顯示情況,需要的朋友可以參考下2016-01-01JSP中include指令和include行為的區(qū)別
我們都知道在jsp中include有兩種形式,分別是2008-07-07