JSP語法基礎(chǔ)課件_第1頁
JSP語法基礎(chǔ)課件_第2頁
JSP語法基礎(chǔ)課件_第3頁
JSP語法基礎(chǔ)課件_第4頁
JSP語法基礎(chǔ)課件_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第3章JSP語法

■3.1了解JSP的基本構(gòu)成N

-3.2JSP的指令標(biāo)識弋

■3.3JSP的腳本標(biāo)識q

■3.4JSP的注釋q

■3.5動作標(biāo)識<

3.1了解JSP的基本構(gòu)成

在學(xué)習(xí)JSP語法之前,首先來初步了解一下

JSP頁面的基本結(jié)構(gòu)。請看下面的代碼:

V--JSP中的指令標(biāo)識—>

<%@pagelanguage="java"contentType="text/html;charset=gb2312"%>

<%@pageimport-'java.util.Date"%>

<!-HTML標(biāo)記語言一〉

<html>

<head><title>JSP頁面的基本構(gòu)成</title></head>「在上面的代碼中,并沒有包括JSP

<body>

<center>中的所有元素,但它仍然構(gòu)成了一

<!-嵌入的Java代碼->個動態(tài)的JSP程序。訪問包含了該

<%Stringtoday=newDate().toLocaleString();%>代碼的JSP頁面后,將顯示用戶訪

<!--JSP表達(dá)式一〉問該頁面的當(dāng)前時間。暫且不對其

今天是:<%=today%>功能實(shí)現(xiàn)進(jìn)行講解,先來介紹該頁

<!-HTML標(biāo)記語言-->\面的組成元素。

</center>

</body>

</html>

3.1Java語言基礎(chǔ)

3.1.1JSP中的指令標(biāo)識'

3.1.2HTML標(biāo)記語言N

3.1.3嵌入的Java代碼片段q

3.1.4JSP表達(dá)式N

3.1.1JSP中的指令標(biāo)識

利用JSP指令可以使服務(wù)器按照指令的設(shè)置

來執(zhí)行動作和設(shè)置在整個JSP頁面范圍內(nèi)有效

的屬性。例如,上述代碼中的第一個page指令

指定了在該頁面中編寫JSF叩一t_n_t上>匚、:x?

Java,并且還指定了頁面在把輸出結(jié)果傳送到瀏覽器上的時候,瀏覽

器必須啟動相應(yīng)的應(yīng)用程序來處理這個輸出

JSP字符的編碼;第二個|文檔。這可以通過多種類型MIME(多功能

網(wǎng)際郵件擴(kuò)充協(xié)議)來完成。在HTTP中,

能類似于Java中的importMIME類型被定義在Content-Typeheader中。

JSP文件中導(dǎo)入需要用到I超文本標(biāo)記語言文本:text/html

普通文本:text/plain

au聲音文件:audio/basic

GIF圖形:image/gif

JPEG圖形:image/jpeg

3.1.2HTML標(biāo)i己語言

HTML標(biāo)記在JSP頁面中作為靜態(tài)的內(nèi)容,

瀏覽器將會識別這些HTML標(biāo)記并執(zhí)行。在

JSP程序開發(fā)中,這些HTML標(biāo)記語言主要負(fù)

責(zé)頁面的布局、設(shè)計(jì)和美觀,可以說是網(wǎng)頁的

框架。

3.1.3嵌入的Java代碼片段

嵌入到JSP頁面中的Java代碼,在客戶端瀏

覽器中是不可見的。它們需要被服務(wù)器執(zhí)行,

然后由服務(wù)器將執(zhí)行結(jié)果與HTML標(biāo)記語言一

同發(fā)送給客戶端進(jìn)行顯示。通過向JSP頁面中

嵌入Java代碼,可以使該頁面生成動態(tài)的內(nèi)容。

3.1.4JSP表達(dá)式

JSP表達(dá)式主要用于數(shù)據(jù)的輸出。它可以向

頁面輸出內(nèi)容以顯示給用戶,還可以用來動態(tài)

地指定HTML標(biāo)記中屬性的值。

3.2JSP的指令標(biāo)識

指令標(biāo)識在客戶端是不可見的,它是被服務(wù)器

解釋并被執(zhí)行的。通過指令標(biāo)識可以使服務(wù)器按

照指令的設(shè)置來執(zhí)行動作和設(shè)置在整個JSP頁面范

圍內(nèi)有效的屬性。在一個指令中可以設(shè)置多個屬

性,這些屬性的設(shè)置可以影響到整個頁面。

在JSP中主要包含3種指令,分別是page指令

(頁面指令)、include指令和taglib指令。

指令通常以“v%@”標(biāo)記開始,以“%>”標(biāo)記結(jié)

束,以上3種指令的通用格式如下:

3.2JSP的指令標(biāo)識

<%?指令名稱屬性1二"屬性值”屬性2=”屬性值”...%>

下面將分別介紹JSP的3種指令格式。

■3.2.1使用page指令7

■3.2.2使用include指令7

■3.2.3使用taglib指令<

3.2.1使用page指令

page指令即頁面指令,可以定義在整個JSP頁

面范圍內(nèi)有效的屬性,其使用格式如下:________

<%@pageattributel-'valuel"attribute2="value2"...%>

page指令可以放在JSP頁面中的任意行,但為了利于程序

代碼的閱讀,習(xí)慣上放在文件的開始部分。Page指令具有多

種屬性,通過這些屬性的設(shè)置可以影響到當(dāng)前的JSP頁面。

例如,在頁面中正確設(shè)置當(dāng)前頁面響應(yīng)的MIME類型為

text/html,如果MIME類型設(shè)置不正確,則當(dāng)服務(wù)器將數(shù)據(jù)傳

輸給客戶端進(jìn)行顯示時,客戶端將無法識別傳送來的數(shù)據(jù),從

而不能正確地顯示內(nèi)容。

3.2.1使用page指令

Page指令中除import屬性外,其他屬性只能在

指令中出現(xiàn)一次。Page指令具有的屬性如下:

<%@page

[language-'java"]

[contentType="mimeType;charset=CHARSET"]

[import="{package.class|pageage.*},..]

[extends="package.class"]「雖然Page指令具有如此多的屬性,:

[session="true|false"]

[buffer="nonelAkblsizekb]但在實(shí)際編程過程中,并不是每個

[autoFlush="true|false"]屬性都必須一一列出,其中很多屬

[isThreadSafe="true|false"]性可以忽略,此時Page指令將使

[info="text"]用這些屬性的默認(rèn)值來設(shè)置JSP頁

[errorPage="relativellRL"]'_1丁面J

[isErrorPage="true|false"]

[isELIgnored="true|false"]

[pageEncoding="CHARSET"]

%>

3.2.1使用page指令

language屬性:設(shè)置當(dāng)前頁面中編寫JSP腳

本使用的語言,默認(rèn)值為java,例如:

<%@pagelanguage-'java"%>

上述代碼設(shè)置了當(dāng)前頁面中使用Java語言來編寫JSP腳本,

目前只能設(shè)置為Java。

contentType屬性:設(shè)置頁面響應(yīng)的MlME類型,通常被設(shè)置

為text/html,例如:

<%@pagecontentType=Mtext/htmr,%>

如果該屬性設(shè)置不正確,如設(shè)置為text/css,那么客戶端瀏

覽器在顯示HTML樣式時,不能對HTML標(biāo)識進(jìn)行解釋,而直接

顯示HTML代碼。

3.2.1使用page指令

在該屬性中還可以設(shè)置JSP字符的編碼,例如:

<%@pagecontentType="text/html;charset=gb2312"%>

默認(rèn)的編碼為Iso-88597o

import屬性:import屬性藥沙手典va中的import語句,用

來向JSP文件中導(dǎo)入需要用到的黃丁營指令中可多次使

用該屬性來導(dǎo)入多個包。例如:A一,

<%@pageimport="java.util.*"%>端的中文顯示需要使用字符

集gb2312,而HTTP傳輸編

nn

<%@pageimport=java.text.*%>碼用ISO88591字符集

______________J

或者通過逗號間隔,來導(dǎo)入多個包。

<%@pageimport=njava.util.*,java.text.*n%>

.(附?)JSP文件的漢字問題

JSP中的漢字字符串在服務(wù)器端用gb2312,在編譯為

ServIet時自動轉(zhuǎn)換為iso8859_1。漢字在傳輸中是正確的,

但在沒有特別指示下,瀏覽器,無法正確顯示。在HTML中指

示瀏覽器文檔的編碼為:<metahttp-equiv="Content-

Type"content="text/html;charset=gb2312”>;在JSP

中指示JSP引擎文檔的編碼為:<%@page

contentType="text/html;charset=gb2312,z%>,每個要顯

示漢字的JSP文檔都應(yīng)該包含該語句。

(附⑥)表單處理中的漢字問題

表單處理涉及到客戶端和服務(wù)器的完整交互過程,在客

戶端和服務(wù)器是gb2312,傳輸用IS088591,在服務(wù)器端接

收到客戶端數(shù)據(jù)時需要轉(zhuǎn)換為gb23],2后迸行處理,方法如:

name=newString(name.getBytesCIS08859」〃),

〃gb2312〃);而服務(wù)器端洞示客戶端漢字的顯示編碼為:,

<%@pagecontentType=,,text/html;charset=gb2312,z%>

(附②UTF-8、GBK和GB2312之區(qū)另U

UTF-8:UnicodeTransformationFormat-8bit,允許含BOM,但

通常不含BOM。是用以解決國際上字符的一種多字節(jié)編碼,它對英文

使用8位(即一個字節(jié)),中文使用24為(三個字節(jié))來編碼。UTF-8

包含全世界所有國家需要用到的字符,是國際編碼,通用性強(qiáng)。UTF-8

編碼的文字可以在各國支持UTF8字符集的瀏覽器上顯示。如,如果是

UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的

中文語言支持包。

GBK是國家標(biāo)準(zhǔn)GB2312基礎(chǔ)上擴(kuò)容后兼容GB2312的標(biāo)準(zhǔn)。GBK

的文字編碼是用雙字節(jié)來表示的,即不論中、英文字符均使用雙字節(jié)來

表示,為了區(qū)分中文,將其最高位都設(shè)定成1。GBK包含全部中文字符,

是國家編碼,通用性比UTF8差,不過UTF8占用的數(shù)據(jù)庫比GBD大。

GBK、GB2312等與UTF8之間者B必須通過Unicode編碼才能相互轉(zhuǎn)

換.

GBK>GB2312--Unicode--UTF8

UTF8--Unicode--GBK>GB2312

對于一個網(wǎng)站、論壇來說,如果英文字符較多,則建議使用UTF—

8節(jié)省空間。不過現(xiàn)在很多論壇的插件一般只支持GBK。

3.2.1使用page指令

在JSP中已經(jīng)默認(rèn)導(dǎo)入了以下包:

java.lang.*

javax.servlet.*

javax.servlet.jsp.*

javax.servlet.http.

所以,即使沒有通過import屬性進(jìn)行導(dǎo)入,在JSP頁面中也

可以調(diào)用上述包中的類。

若要在頁面中使用編寫的JavaBean,也可通過import屬

性來導(dǎo)入。還可以通過<jsp:useBean>動作標(biāo)識來創(chuàng)建一個

JavaBean實(shí)例進(jìn)行調(diào)用。

3.2.1使用page指令

extends屬性:extends屬性用于指定將一個JSP頁面轉(zhuǎn)

換為Servlet后繼承的類。在JSP中通常不會設(shè)置該屬性,

JSP容器會提供繼承的父類。并且如果設(shè)置了該屬性,一些

改動會影響JSP的編譯能力。

session屬性:該屬性默認(rèn)值為true,表示當(dāng)前頁面支持

session,設(shè)為faIse表示不支持sessionQ

buffer屬性:該屬性用來設(shè)置out對象(JspWriter類對象)

使用的緩沖區(qū)的大小。若設(shè)置為none,表示不使用緩存,而

直接通過PrintWriter對象進(jìn)行輸出;如果將該屬性指定為

數(shù)值,則輸出緩沖區(qū)的大小不應(yīng)小于該值,默認(rèn)值為8KB

(因不同的服務(wù)器而不同,但大多數(shù)情況下都為8KB)。

3.2.1使用page指令

autoFlush屬性:該屬性默認(rèn)值為true,表示當(dāng)緩沖區(qū)

已滿時,自動將其中的內(nèi)容輸出到客戶端。如果設(shè)為false,

則當(dāng)緩沖區(qū)中的內(nèi)容超出其設(shè)置的大小時,會產(chǎn)生“JSP

Bufferoverflow”溢出異常。

注意:若buffer屬性設(shè)為none,則autoFIush不能設(shè)為faIseo

isThreadSafe屬性:該屬性默認(rèn)值為true,表示當(dāng)前

JSP頁面被轉(zhuǎn)換為ServIet后,會以多線程的方式來處理來自

多個用戶的請求;如果設(shè)為false,則轉(zhuǎn)換后的Servlet會實(shí)

現(xiàn)SigIeThreadModeI接口,該ServIet將以單線程的方式來

處理用戶請求,即其他請求必須等待直到前一個請求處理結(jié)

束。

3.2.1使用page指令

inf。屬性:該屬性可設(shè)置為任意字符串,如當(dāng)前頁面的

作者或其他有關(guān)的頁面信息??赏ㄟ^

ServIet.getServIetInfo()方法來獲取設(shè)置的字符串。例如:

<%@pageinfo="Thisisindex.jsp!"%>

<%=this.getServletlnfo()%>

訪問頁面后,將顯示:Thisisindex.jsp!

errorPage屬性:該屬性用來指定一個當(dāng)前頁面出現(xiàn)異常時

所要調(diào)用的頁面。如果屬性值是以開頭的路徑,則將

在當(dāng)前應(yīng)用程序的根目錄下查找文件;否則,將在當(dāng)前頁面

的目錄下查找文件。

3.2.1使用page指令

isErrorPage屬性:將該屬性值設(shè)為true,此時在當(dāng)前

頁面中可以使用exception異常對象。若在其他頁面中通過

errorPage屬性指定了該頁面,則當(dāng)前者出現(xiàn)異常時,會跳

轉(zhuǎn)到該頁面,并可在該頁面中通過exception對象輸出錯誤

信息。相反,如果將該屬性設(shè)置為faIse,則在當(dāng)前頁面中

不能使用exception對象。該屬性默認(rèn)值為faIseo

【例3T】errorPage屬性及isErrorPage屬性的應(yīng)用

isELIgnored屬性:通過該屬性的設(shè)置,可以使JSP容器忽略

表達(dá)式語言“${}”。其值只能為true或faIse。設(shè)為true,

則忽略表達(dá)式語言。

3.2.1使用page指令

pageEncoding屬性:該屬性用來設(shè)置JSP頁面字符的編

碼。默認(rèn)值為ISO-88597。

3.2.2使用include指令

該指令用于在當(dāng)前的JSP頁面中,在當(dāng)前使用該指令的

位置嵌入其他的文件,如果被包含的文件中有可執(zhí)行的代碼,

則顯示代碼執(zhí)行后的結(jié)果。該指令的使用格式如下:

<%@includefile二”文件的絕對路徑或相對路徑”%>

file屬性:該屬性指定被包含的文件,該屬性不支持任何表

達(dá)式,也不允許通過如下的方式來傳遞參數(shù)。

<%@includefile="welcome.jsp?name=yxq"%>

如果該屬性值以開頭,那么指定的是一個絕對路徑,

將在當(dāng)前應(yīng)用的根目錄下查找文件;如果是以文件名稱或文

件夾名開頭,那么指定的是一個相對路徑,將在當(dāng)前頁面的

目錄下查找文件。

3.2.2使用include指令

使用include指令引用外部文件,可以減少代碼的冗余。

例如,有兩個JSP頁面都需要應(yīng)用下圖所示的網(wǎng)頁模板進(jìn)行

布局。

LOGO圖片區(qū):top.jsp

側(cè)欄內(nèi)容顯示區(qū):main.jsp

left.jsp

頁尾:end.jsp

其中,這兩個頁面中的LOGO圖片區(qū)、側(cè)欄和頁尾的內(nèi)容都不

會發(fā)生變化。如果通過基本JSP語句來編寫這兩個頁面,會

導(dǎo)致編寫的JSP文件出現(xiàn)大量的冗余代碼,不僅降低了開發(fā)

進(jìn)程而且會給程序的維護(hù)帶來很大的困難。為了解決該問題,

可以將這個復(fù)雜的頁面分成若干個獨(dú)立的部分,將相同的部

分在單獨(dú)的JSP文件中進(jìn)行編寫。

13.2.2使用include指令

這樣在多個頁面中應(yīng)用上述的頁面模板時,就可通過

incIude指令在相應(yīng)的位置上引入這些文件,從而只需對內(nèi)

容顯示區(qū)進(jìn)行編碼即可。類似的頁面代碼如下:

<%@pagecontentType="text/html;charset=gb2312"%>

<table>

<tr><tdcolspan="2"><%@includefile="top.jsp"%></td></tr>

<tr>

<td><%@includefile="side.jsp"%></td>

vtd>在這里對內(nèi)容顯示區(qū)進(jìn)行編碼v/td>

</tr>

<tr><tdcolspan="2"><%@includefile="end.jsp"%></td></tr>

</table>

3.2.3使用taglib指令

在JSP頁面中,可以直接使用JSP提供的一些動作元素標(biāo)

識來完成特定功能,如使用<jsp:include)包含一個文件。

通過使用taglib指令,開發(fā)者就可以在頁面中使用這些基本

標(biāo)識或自定義的標(biāo)識來完成特殊的功能。

taglib指令的使用格式如下:

<%@tagliburi="tagURI”prefix="tagPrefix"%>

uri屬性:該屬性指定了標(biāo)簽描述符,該描述符是一個對標(biāo)

簽描述文件(*.tld)的映射。在tld標(biāo)簽描述文件中定義了

該標(biāo)簽庫中的各個標(biāo)簽名稱,并為每個標(biāo)簽指定一個標(biāo)簽處

理類。

4323使用taglib指令

prefix屬性:該屬性指定一個在頁面中使用由uri屬性

指定的標(biāo)簽庫的前綴。前綴不能命名為jsp、jspx、java、

javax>sun>servIet和sunw。

開發(fā)者可通過前綴來引用標(biāo)簽庫中的標(biāo)簽。以下為一個簡單

的使用JSTL的代碼:

<%@tagliburi="/jsp/jstl/core"prefix="c"%>

<c:setvar="name"value="hello'7>l

該段代碼通過<c:set>標(biāo)簽將hello值

賦給了變量name。

3.3JSP的腳本標(biāo)識

在JSP頁面中,腳本標(biāo)識使用得最為頻繁。因

為它們能夠很方便、靈活地生成頁面中的動態(tài)內(nèi)

容,特別是Scriptlet腳本程序。JSP中的腳本標(biāo)識

包括以下三種元素:聲明標(biāo)識(Declaration)、

JSP表達(dá)式(Expression)和腳本程序

(Scriptlet)。通過這些元素,就可以在JSP頁面

中像編寫Java程序一樣來聲明變量、定義函數(shù)或

進(jìn)行各種表達(dá)式的運(yùn)算。在JSP頁面中需要通過特

殊的約定來表示這些元素,并且對于客戶端這些

元素是不可見的,它們由服務(wù)器執(zhí)行。

3.3JSP的腳本標(biāo)識

■3.3.1JSP表達(dá)式(Expression)N

■3.3.2聲明標(biāo)識(Declaration)工

■3.3.3腳本程序(SEMet)N

3.3.1JSP表達(dá)式

表達(dá)式用于向頁面中輸出信息,其使用格式為:

<%=變量或可以返回值的方法或Java表達(dá)式%>

特別要注意,“<%”與“二”之間不要有空格。

JSP表達(dá)式在頁面被轉(zhuǎn)換為ServIet后,轉(zhuǎn)換為了out.print()

方法。所以JSP表達(dá)式與JSP頁面中嵌入到小腳本程序中的

out.print。方法實(shí)現(xiàn)的功能相同。如果通過JSP表達(dá)式輸出

一個對象,則該對象的toString()方法會被自動調(diào)用,表達(dá)

式將輸出toString()方法返回的內(nèi)容。

JSP表達(dá)式可以應(yīng)用到以下幾種情況。

(1)向頁面輸出內(nèi)容,例如下面的代碼:

3.3.1JSP表達(dá)式

運(yùn)行該段代碼將顯示:

<%Stringname="";%>

、用戶名:,

用戶名:〈%=name%>

(2)生成動態(tài)的鏈接地址,例如下面的代碼:

<%Stringpath="welcome.jspn;%>

<ahref="v%=path%>”>鏈接到welcom.jspv/a>—一"

/L\

運(yùn)行該段代碼將生成下面的HTML代碼:

、<ahref="welcome.jsp”>鏈接至Uwelcome.jspv/a〉,

(3)動態(tài)指定Form表單處理頁面,例如下面的代碼:

<%Stringname="logon.jsp";%>

<formaction=''<%=name%>',></form^^^^^

運(yùn)行該段代碼將生成下面的HTML代碼:

、〈formaction="logon.jsp”>v/form〉,

3.3.1JSP表達(dá)式

(4)為通過循環(huán)語句生成的元素命名,例如下面的代碼:

<%for(inti=1;i<3;i++){%>

file<%=i%>:<inputtype="text"

name="<%="file"+i%>"><br>

<%}%>

運(yùn)行該段代碼將生成下面的HTML代碼:

filel:<inputtype=*'text"name="file1"><br>

、file2:〈inputtype="text"name="file2">〈br>/

43.3.2聲明標(biāo)識(Declaration)

在JSP頁面中可以聲明變量或方法,其聲明格式為:

<%!聲明變量或方法的代碼%>

特別要注意,在“〈%”與“!”之間不要有空格。聲明的語

法與在Java語言中聲明變量和方法時是一樣的。

在頁面中通過聲明標(biāo)識聲明的變量和方法,在整個頁面內(nèi)都

有效,它們將成為JSP頁面被轉(zhuǎn)換為Java類后類中的屬性和

方法。并且它們會被多個線程即多個用戶共享。也就是說,

其中的任何一個線程對聲明的變量或方法的修改都會改變它

們原來的狀態(tài)。它們的生命周期從創(chuàng)建到服務(wù)器關(guān)閉后結(jié)束。

下面將通過一個具體實(shí)例來介紹聲明標(biāo)識的應(yīng)用。

【例3-2】一個簡單的網(wǎng)站計(jì)數(shù)器W

、333腳本程序(Scriptlet)

腳本程序是在JSP頁面中使用“跳”與“%>”標(biāo)記起來的一段

Java代碼。在腳本程序中可以定義變量、調(diào)用方法和進(jìn)行各

種表達(dá)式運(yùn)算,且每行語句后面要加入分號。在腳本程序中

定義的變量在當(dāng)前的整個頁面內(nèi)都有效,但不會被其他的線

程共享,當(dāng)前用戶對該變量的操作不會影響到其他的用戶。

當(dāng)變量所在的頁面關(guān)閉后就會被銷毀。

腳本程序使用格式如下:

<%Java程序片段%>

腳本程序的使用比較靈活,它所實(shí)現(xiàn)的功能是JSP表達(dá)式無

法實(shí)現(xiàn)的。

【例3-3】腳本程序的應(yīng)用八j

13.4JSP的注釋

在JSP頁面中可以應(yīng)用多種注釋,如HTML中的注釋、

Java中的注釋和在嚴(yán)格意義上說屬于JSP頁面自己的注釋:

帶有JSP表達(dá)式和隱藏的注釋。在JSP規(guī)范中,它們都屬

于JSP中的注釋,并且它們的語法規(guī)則和運(yùn)行的效果有所

不同。下面將介紹JSP中的各種注釋。

■3.4.1HTML中的注釋N

■3.4.2帶有JSP表達(dá)式的注釋N

■3.4.3隱藏注釋

■3.4.4腳本程序(S程diet)中的注釋7

3.4.1HTML中的注釋

JSP文件是由HTML標(biāo)記和嵌入的Java程序片段組成的,

所以在HTML中的注釋同樣可以在JSP文件中使用。注釋格式

如下:

<!一注釋內(nèi)谷一>

【例3-4】HTML注釋的應(yīng)用

3.4.2帶有JSP表達(dá)式的注釋

在HTML注釋中可以嵌入JSP表達(dá)式,注釋格式如下:

<!-comment<%=expression%>->

包含該注釋語句的JSP頁面被請求后,服務(wù)器能夠識別

注釋中的JSP表達(dá)式,從而來執(zhí)行該表達(dá)式,而對注釋中的

其他內(nèi)容不做任何操作。當(dāng)服務(wù)器將執(zhí)行結(jié)果返回給客戶端

后,客戶端瀏覽器會識別該注釋語句,所以被注釋的內(nèi)容不

會顯示在瀏覽器中。

【例3-5】帶有JSP表達(dá)式注釋的應(yīng)用

3.4.3隱藏注釋

在前面已經(jīng)介紹了如何應(yīng)用HTML中的注釋,這種注釋

雖然在客戶端瀏覽頁面時不會看見,但它卻存在于源代碼中,

可通過在客戶端查看源代碼看到被注釋的內(nèi)容。所以嚴(yán)格來

說,這種注釋并不安全。下面將介紹一種隱藏注釋,注釋格

式如下:

v%--汪釋內(nèi)容--%>

使用該方法注釋的內(nèi)容,不僅在客戶端瀏覽時看不到,而且

即使是通過在客戶端查看HTML源代碼,也不會看到,所以安

全性較高。

【例3-6】隱藏注釋的應(yīng)用

3.4.4腳本程序(Scriptlet)中

」的注釋

在腳本程序中所包含的是一段Java代碼,所以在腳本

程序中的注釋和在Java中的注釋是相同的。腳本程序中包括

下面3種注釋方法。

1.單行注釋

單行注釋的格式如下:

〃注釋內(nèi)容

該方法進(jìn)行單行注釋,符號“//”后面的所有內(nèi)容為注釋的

內(nèi)容,服務(wù)器對該內(nèi)容不進(jìn)行任何操作。因?yàn)槟_本程序在客

戶端通過查看源代碼是不可見的,所以在腳本程序中通過該

方法被注釋的內(nèi)容也是不可見的,并且在后面將要提到的通

過多行注釋和提示文檔進(jìn)行注釋的內(nèi)容都是不可見的。

3.4.4腳本程序(Scriptlet)中

工的注釋

-h【

【例3-7】單行注釋的應(yīng)用

2.多行注釋

多行注釋的是通過“/*”與“*/”符號進(jìn)行標(biāo)記,它們必須

成對出現(xiàn),在它們之間輸入的注釋內(nèi)容可以換行。注釋格式

女月下:

注釋內(nèi)容1

注釋內(nèi)容2

*/

為了程序代碼的美觀,開發(fā)員習(xí)慣上在每行的注釋內(nèi)容

前面加入一個號,構(gòu)成以下的注釋格式:

3.4.4腳本程序(Scriptlet)中

j的注釋

/*

*注釋內(nèi)容1

*注釋內(nèi)容2

*/

同單行注釋一樣,在“/*”與“*/”之間被注釋的所有內(nèi)容,

即使是JSP表達(dá)式或其他的腳本程序,服務(wù)器都不會做任何

處理,并且多行注釋的開始標(biāo)記和結(jié)束標(biāo)記可以不在同一個

腳本程序中同時出現(xiàn)。

【例3-8】多行注釋的應(yīng)用

3.提示文檔注釋

3.4.4腳本程序(Scriptlet)中

金的注釋

該種注釋會被Javadoc文檔工具生成文檔時所讀取,文

檔是對代碼結(jié)構(gòu)和功能的描述。

注釋格式如下:

/**

提示信息1

提示信息2

*/

該注釋方法與前面介紹的多行注釋很相似,但細(xì)心的讀

者會發(fā)現(xiàn)它是以“/**”符號作為注釋的開始標(biāo)記,而不是

。與多行注釋一樣,被“/**”和“/*”符號注釋的

所有內(nèi)容,服務(wù)器都不會做任何處理。

3.4,4腳本程序(Scriptlet)中

」的注釋

在EcIipse開發(fā)工具中向創(chuàng)建的JSP文件輸入下面的代碼,

然后將鼠標(biāo)指針移動到指定的代碼上,將會出現(xiàn)提示信息。

<%!

inti=0;

@作者:YXQ

@功能:該方法用來實(shí)現(xiàn)一個簡單的計(jì)數(shù)器

7

synchronizedvoidadd(){

i++;

)

%>

<%add();%>

當(dāng)前訪日次數(shù):<%=i%>

3.4.4腳本程序(Scriptlet)中

的注釋

將鼠標(biāo)指針移動到<%add0;%>代碼上,將出現(xiàn)下圖如圖所

示的提示信息。

:<0pagecontentType=,,cex€/htinl;charseu=gb2312rr-:>

<%?

inti=0;

/**

@作者:YXQ

@功能:該方法用來實(shí)現(xiàn)一個簡單的計(jì)數(shù)器

*/

synchronizedvoidadd(){

i++;

-add(]);

當(dāng)前訪問daa.addO

。作者

YXQ

0功能

該方法用來實(shí)現(xiàn)一個簡單的計(jì)數(shù)器

按“F2”以獲取急點(diǎn).

3.5動作標(biāo)識

在JSP中提供了一系列的使用XML語法寫成的動作標(biāo)識,

這些標(biāo)識可用來實(shí)現(xiàn)特殊的功能,例如請求的轉(zhuǎn)發(fā)、在當(dāng)

前頁中包含其他文件、在頁面中創(chuàng)建一個JavaBean實(shí)例等。

動作標(biāo)識是在請求處理階段按照在頁面中出現(xiàn)的順序

被執(zhí)行的,只有它們被執(zhí)行的時候才會去實(shí)現(xiàn)自己所具有

的功能。這與指令標(biāo)識是不同的,因?yàn)樵贘SP頁面被執(zhí)行

時首先進(jìn)入翻譯階段,程序會先查找頁面中的指令標(biāo)識并

將它們轉(zhuǎn)換成Servlet,所以這些指令標(biāo)識會首先被執(zhí)行,

從而設(shè)置了整個的JSP頁面。

動作標(biāo)識通用的使用格式如下:

3.5動作標(biāo)識

V動作標(biāo)識名稱屬性1二“值1”屬性2=“值2”…/>

v動作標(biāo)識名稱屬性1二“值1“屬性2二“值2"…〉

v子動作屬性1二“值1“屬性2二“值2"…/>

v/動作標(biāo)識名稱,

在JSP中提供的常用的標(biāo)準(zhǔn)動作標(biāo)識有:

□3.5動作標(biāo)識

■vjsp:include><

■vjsp:forward><

■vjsp:useBean>N

■vjsp:setProperty>N

■vjsp:getPrope<y><

■vjsp:fallback><

■vjsp:plugin>q

<jsp:include>

<jsp:include>動作標(biāo)識用于向當(dāng)前的頁面中包含其他

的文件,這個文件可以是動態(tài)文件也可以是靜態(tài)文件。該標(biāo)

識的使用格式如下:

<jsp:includepage二”被包含文件的路徑”flush="true|false'7>

或者向被包含的動態(tài)頁面中傳遞參數(shù):

<jsp:includepage二”被包含文件的路徑”flush="true|false">

<jsp:paramname二"參數(shù)名稱“valude="參數(shù)值"/>

</jsp:include>

page屬性:該屬性指定了被包含文件的路徑,其值可以

是一個代表了相對路徑的表達(dá)式。當(dāng)路徑是以開頭時,

則按照當(dāng)前應(yīng)用的路徑查找這個文件;如果路徑是以文件名

或目錄名稱開頭,那么將按照當(dāng)前的路徑來查找被包含的文

件。

<jsp:include>

flush屬性:表示當(dāng)輸出緩沖區(qū)滿時,是否清空緩沖區(qū)。

該屬性值為boolean型,默認(rèn)值為faIse,通常情況下設(shè)為

true。

<jsp:param>子標(biāo)識可以向被包含的動態(tài)頁面中傳遞參

數(shù)。

<jsp:include>標(biāo)識對包含的動態(tài)文件和靜態(tài)文件的處

理方式是不同的。如果被包含的是靜態(tài)的文件,則頁面執(zhí)行

后,在使用了該標(biāo)識的位置處將會輸出這個文件的內(nèi)容。如

果<jsp:include〉標(biāo)識包含的是一個動態(tài)的文件,那么JSP編

譯器將編譯并執(zhí)行這個文件。不能通過文件的名稱來判斷該

文件是靜態(tài)的還是動態(tài)的,<jsp:include》標(biāo)識會識別出文

件的類型。

<jsp:include>

<jsp:include〉動作標(biāo)識與incIude指令都可用來包含文

件,下面來介紹它們之間存在的差異。

1.屬性

小。1”6指令通過、Ie屬性來指定被包含的頁面,include指

令將fiIe屬性值看作一個實(shí)際存在的文件的路徑,所以該屬

性不支持任何表達(dá)式。若在fiIe屬性值中應(yīng)用JSP表達(dá)式,

則會拋出異常,如下面的代碼:

<%Stringpath-'logon.jsp";%>

<%@includefile="<%=path%>"%>

該用法將拋出下面的異常:

File〃/<%=path%>〃notfound

<jsp:include>

<jsp:include>動作標(biāo)識通過page屬性來指定被包含的

頁面,該屬性支持JSP表達(dá)式。

2.處理方式

使用incIude指令被包含的文件,它的內(nèi)容會原封不動地插入

到包含頁中使用該指令的位置,然后JSP編譯器再對這個合成的文

件進(jìn)行翻譯。所以在一個JSP頁面中使用incIude指令來包含另外

一個JSP頁面,最終編譯后的文件只有一個。

使用<jsp:include〉動作標(biāo)識包含文件時,當(dāng)該標(biāo)識被執(zhí)行時,

程序會將請求轉(zhuǎn)發(fā)到(注意是轉(zhuǎn)發(fā),而不是請求重定向)被包含

的頁面,并將執(zhí)行結(jié)果輸出到瀏覽器中,然后返回包含頁繼續(xù)執(zhí)

行后面的代碼。因?yàn)榉?wù)器執(zhí)行的是兩個文件,所以JSP編譯器會

分別對這兩個文件進(jìn)行編譯。

<jsp:include>

3.包含方式

使用inoIude指令包含文件,最終服務(wù)器執(zhí)行的是將兩個文件

合成后由JSP編譯器編譯成的一個Class文件,所以被包含文件的

內(nèi)容應(yīng)是固定不變的,若改變了被包含的文件,則主文件的代碼

就發(fā)生了改變,因此服務(wù)器會重新編譯主文件。include指令的這

種包含過程稱為靜態(tài)包含。

使用<jsp:incIude>動作標(biāo)識通常是來包含那些經(jīng)常需要改動

的文件。此時服務(wù)器執(zhí)行的是兩個文件,被包含文件的改動不會

影響到主文件,因此服務(wù)器不會對主文件重新編譯,而只需重新

編譯被包含的文件即可。而對被包含文件的編譯是在執(zhí)行時才進(jìn)

行的,也就是說,只有當(dāng)〈jsp:include〉動作標(biāo)識被執(zhí)行時,使用

該識包含的目標(biāo)文件才會被編譯,否則被包含的文件不會被編譯,

所以這種包含過程稱為動態(tài)包含。

<jsp:include>

47對被包含文件的約定

使用include指令包含文件時,對被包含文件有約定

(字符集編碼方式一致)。

【例3-9】通過include指令包含文件

【例370】通過include動作標(biāo)識包含文件

技巧:如果要在JSP頁面中要顯示大量的文本文字,

可以將文字寫入靜態(tài)文件中(如記事本),然后通

過incIude指令或動作標(biāo)識包含進(jìn)來。

<jsp:forward>

<jsp:forward〉動作標(biāo)識用來將請求轉(zhuǎn)發(fā)到另外一個JSP、

HTML或相關(guān)的資源文件中。當(dāng)該標(biāo)識被執(zhí)行后,當(dāng)前的頁面

將不再被執(zhí)行,而是去執(zhí)行該標(biāo)識指定的目標(biāo)頁面。

該標(biāo)識使用的格式如下:

<jsp:forwardpage二”文件路徑|表示路徑的表達(dá)式”/>

如果轉(zhuǎn)發(fā)的目標(biāo)是一個動態(tài)文件,還可以向該文件中傳

遞參數(shù),使用格式如下:

<jsp:forwardpage二”被包含文件的路徑"flush="true|false">

<jsp:paramname="參數(shù)名稱"valude="參救值”/>

</jsp:forward>

<jsp:forward>

page屬性:該屬性指定了目標(biāo)文件的路徑。如果該值是

以開頭,表示在當(dāng)前應(yīng)用的根目錄下查找文件,否則就

在當(dāng)前路徑下查找目標(biāo)文件。請求被轉(zhuǎn)向到的目標(biāo)文件必須

是內(nèi)部的資源,即當(dāng)前應(yīng)用中的資源。

如果想通過forward動作轉(zhuǎn)發(fā)到應(yīng)用外部的文件中,例如,

當(dāng)前應(yīng)用為A,在根目錄下的index.jsp頁面中存在下面的代

碼用來將請求轉(zhuǎn)發(fā)到應(yīng)用B中的logon.jsp頁面。

<jsp:forwardpage="http://localhost:8080/B/logon.jsp7>

那么將出現(xiàn)下面的錯誤提示:

Therequestedresource

(/http://locaIhost:8080/B/1ogon.jsp)isnot

avaiIabIe

<jsp:forward>

仔細(xì)觀察可以看到,錯誤提示中的路徑前自動加入了一

個“/”,這是因?yàn)閕ndex.jsp頁面在應(yīng)用A的根目錄下,當(dāng)

forward標(biāo)識被執(zhí)行時,會在該目錄下來查找page屬性指定

的目標(biāo)文件,所以會提示資源不存在的信息。

<jsp:param>子標(biāo)識用來向動態(tài)的目標(biāo)文件中傳遞參數(shù)。

這里重點(diǎn)提示一下,<jsp:forward〉標(biāo)識實(shí)現(xiàn)的是請求

的轉(zhuǎn)發(fā)操作,而不是請求重定向。它們之間的一個區(qū)別就是:

進(jìn)行請求轉(zhuǎn)發(fā)時,存儲在request對象中的信息會被保留并

被帶到目標(biāo)頁面中;而請求重定向是重新生成一個request

請求,然后將該請求重定向到指定的URL,所以事先存儲在

request對象中的信息都不存在了。

vjsp:forward>注意:

<jsp:forward?標(biāo)簽從一個JSP文件向另一個文件傳遞

—1^包含用戶請求的request對象。<jsp:forward〉標(biāo)

簽以下的代碼,將不能執(zhí)行。

熊夠向目標(biāo)文件傳送參數(shù)和值,如我們傳遞的參數(shù)名

為username,值為scott;如果使用了<jsp:param>標(biāo)

簽的話,目標(biāo)文件必須是一個動態(tài)的文件,能夠處理

參數(shù)。

如果使用了非緩沖輸出的話,那么使用Qsp:forward)

時要小心,如巢在使用<jsp:forward)之前,已經(jīng)有文

本被寫入輸出流而且頁面沒有設(shè)置緩沖,那么將拋出

—^IHegalStateException的異常。

【例3-11]<jsp:forward>標(biāo)識的使用(簡單的登陸驗(yàn)

證的頁面)

<jsp:useBean>

通過應(yīng)用<jsp:useBean>動作標(biāo)識可以在JSP頁面中創(chuàng)建

一個Bean實(shí)例,并且通過屬性的設(shè)置可以將該實(shí)例存儲到

JSP中的指定范圍內(nèi)。如果在指定的范圍內(nèi)已經(jīng)存在了指定

的Bean實(shí)例,那么將使用這個實(shí)例,而不會重新創(chuàng)建。通過

<jsp:useBean>標(biāo)識創(chuàng)建的Bean實(shí)例可以在ScriptIet中應(yīng)用。

該標(biāo)識的使用格式如下:

<jsp:useBean>

{}并不是真正的花括號,代

<jsp:useBean表以下選項(xiàng)可以是四選一,

id二”變量名“

scopeFpagelrequestlsessionlappJ^cTdf^

class="package.className"|

type="數(shù)據(jù)類型

class="package.className"type二"數(shù)據(jù)類型

beanName="package.className"type二”數(shù)據(jù)類型“

/>

<jsp:setPropertyname二“變量名“property="*'7>

也可以在標(biāo)識體內(nèi)嵌入子標(biāo)識或其他內(nèi)容:

<jsp:useBean>

<jsp:useBeanid="變量名”

scope="page|request|session|application"...>

<jsp:setPropertyname="變量名“property="*'7>

</jsp:useBean>

這兩種使用方法是有區(qū)別的。在頁面中應(yīng)用<jsp:useBean>

標(biāo)識創(chuàng)建一個Bean時,如果該Bean是第一次被實(shí)例化,那么

對于<jsp:useBean>標(biāo)識的第二種使用格式,標(biāo)識體內(nèi)的內(nèi)

容會被執(zhí)行,若已經(jīng)存在了指定的Bean實(shí)例,則標(biāo)識體內(nèi)的

內(nèi)容就不再被執(zhí)行了。而對于第一種使用格式,無論在指定

的范圍內(nèi)是否已經(jīng)存在一個指定的Bean實(shí)例,

<jsp:useBean>標(biāo)識后面的內(nèi)容都會被執(zhí)行。

<jsp:useBean>

下面將對<jsp:useBean>標(biāo)識中各屬性的用法進(jìn)行詳細(xì)

介紹。

1.id屬性

該屬性指定一個變量,在所定義的范圍內(nèi)或

Scriptlet中將使用該變量來對所創(chuàng)建的Bean實(shí)例進(jìn)

行引用。該變量必須符合Java中變量的命名規(guī)則。

<jsp:useBean>

2.type=〃數(shù)據(jù)類型〃

type屬性用于設(shè)置由id屬性指定的變量的類型。

type屬性可以指定要創(chuàng)建實(shí)例的類的本身、類的父

類或者是——y個4妾口O

使向type屬性來設(shè)置變量類型的使用格式如下:

<jsp:useBeanid="us"type="com.Bean.Userinfo"scope="session'7>

如果在session范圍內(nèi),已經(jīng)存在了名為“us”的實(shí)例,則

將該實(shí)例轉(zhuǎn)換為type屬性指定的UserInf。類型(必須是合法

的類型轉(zhuǎn)換)并賦值給id屬性指定的變量;若指定的實(shí)例不

存在將拋出"beanusnotfoundwithinscope”異常。

<jsp:useBean>

3.scope屬性

該屬性指定了所創(chuàng)建Bean實(shí)例的存取范圍,省略該屬性

時的值為page。<jsp:useBean>標(biāo)識被執(zhí)行時,首先會在

scope屬性指定的范圍來查找指定的Bean實(shí)例,如果該實(shí)例

已經(jīng)存在,則引用這個Bean,否則重新創(chuàng)建,并將其存儲在

scope屬性指定的范圍內(nèi)。scope屬性具有的可選值如下。

page:指定了所創(chuàng)建的Bean實(shí)例只能夠在當(dāng)前的JSP文

件中使用,包括在通過incIude指令靜態(tài)包含的頁面中有效。

request:指定了所創(chuàng)建的Bean實(shí)例可以在請求范圍內(nèi)

進(jìn)行存取。在請求被轉(zhuǎn)發(fā)至的目標(biāo)頁面中可通過request對

象的getAttribute(〃id屬性值〃)方法獲取創(chuàng)建的Bean實(shí)例。

<jsp:useBean>

一個請求的生命周期是從客戶端向服務(wù)器發(fā)出一個請求到服

務(wù)器響應(yīng)這個請求給用戶后結(jié)束,所以請求結(jié)束后,存儲在

其中的Bean的實(shí)例也就失效了。

session:指定了所創(chuàng)建的Bean實(shí)例的有效范圍為

sessionosession是當(dāng)用戶訪問Web應(yīng)用時,服務(wù)器為用戶

創(chuàng)建的一個對象,服務(wù)器通過session的ID值來區(qū)分其他的

用戶。針對某一個用戶而言,在該范圍中的對象可被多個頁

面共享。

注意:可以使用session對象的getAttribute(〃id屬性值〃)

方法獲取存儲在session中的Bean實(shí)例,也可以使用session

對象的getVaIue(〃id屬性值〃)來獲取,但該方法不建議使用。

<jsp:useBean>

application:該值指定了所創(chuàng)建的Bean實(shí)例的有效范

圍從服務(wù)器啟動開始到服務(wù)器關(guān)閉結(jié)束。application對象

是在服務(wù)器啟動時創(chuàng)建的,它被多個用戶共享。所以訪問該

appIication對象的所有用戶共享存儲于該對象中的Bean實(shí)

例。

注意:可以使用appIication對象的getAttribute注d屬性值”)方法獲取

存在于appIication中的Bean實(shí)例。

4.cIass="package.cIassName”

class屬性指定了一個完整的類名,其中package表示類

包的名字,cIassName表示類的CIass文件名稱。通過cIass

屬性指定的類不能是抽象的,它必須具有公共的、沒有參數(shù)

的構(gòu)造方法。在沒有設(shè)置type屬性時,必須設(shè)置class屬性。

<jsp:useBean>

使用class屬性定位一個類的使用格式如下:

<jsp:useBeanid="us"class="com.Bean.Userinfo"

scope="session'7>

程序首先會在session范圍中來查找是否存在名為“us”的

UserInfo類的實(shí)例,如果不存在,那么會通過new操作符實(shí)

例化UserInfo類來獲取一個實(shí)例,并以“us”為實(shí)例名稱存

儲到session范圍內(nèi)。

5.cIass="package,cIassName“type=''數(shù)據(jù)類型”

class屬性與type屬性可以指定同一個類,在

<jsp:useBean>標(biāo)識中cIass屬性與type屬性一起使用時的格

式如下:

<jsp:useBean>

<jsp:useBeanid="us"class="com.Bean.Userinfo"

type="com.Bean.UserBase"scope="session'7>

這里假設(shè)UserBase類為UserInfo類的父類。該標(biāo)識被執(zhí)

行時,程序首先創(chuàng)建了一個以type屬性的值為類型,以id屬

性值為名稱的變量us,并賦值為null;然后在session范圍

內(nèi)來查找這個名為“us”的Bean實(shí)例,如果存在,則將其轉(zhuǎn)

換為type屬性指定的UserBase類型(類型轉(zhuǎn)換必須是合法的)

并賦值給變量us;如果實(shí)例不存在,那么將通過new操作符

來實(shí)例化一個UserInfo類的實(shí)例并賦值給變量us,最后將us

變量儲在session范圍內(nèi)。

6.beanName=,,package.className,ztype="數(shù)據(jù)類型〃

<jsp:useBean>

beanName屬性與type屬性可以指定同一個類,在

<jsp:useBean>標(biāo)識中beanName屬性與type屬性一起使用

同的格式如下:

<jsp:useBeanid="us"beanName="com.Bean.Userinfo"

type="com.Bean.UserBase7>

這里假設(shè)卜6山256類為卜?口村0類的父類。該標(biāo)識被執(zhí)行時,程

序首先創(chuàng)建了一個以type屬性的值為類型,以id屬性值為名稱的

變量us,并賦值為null;然后在session范圍內(nèi)來查找這個名為

“us”的Bean實(shí)例,如果存在,則將其轉(zhuǎn)換為type屬性指定的

UserBase類型(類型轉(zhuǎn)換必須是合法的)并賦值給變量us;如果

實(shí)例不存在,那么將通過instantiate()方法從Userinfo類中實(shí)例

化一個類并將其轉(zhuǎn)換成UserBase類型后賦值給變量us,最后將變

量us存儲在session范圍內(nèi)。

J<jsp:useBean>

通常情況下應(yīng)用<jsp:useBean>標(biāo)識的格式如下:_______

<jsp:useBeanid二“變量名“class="package.className7>

如果想在多個頁面中共享這個Bean實(shí)例,可將scope屬性設(shè)

置為session0

在頁面中使用<jsp:useBean>標(biāo)識來實(shí)例化一^f^Bean實(shí)例后,

可以通過<jsp:setProperty>屬性來設(shè)置或修改該Bean中的

屬性,或者通過<jsp:getProperty>標(biāo)識來讀取該Bean中指

定的屬性。

<jsp:setProperty>

<jsp:setProperty>標(biāo)識通常情況下與<jsp:useBean>標(biāo)識

一起使用,它將調(diào)用Bean中的setXxx()方法將請求中的參

數(shù)賦值給由<jsp:useBean>標(biāo)識創(chuàng)建的JavaBean中對應(yīng)的

簡單屬性或索引屬性。該標(biāo)識的使用格式如下:

<jsp:setProperty

name="Bean實(shí)例名”

(

property="*"|

property="propertyName"|

property="propertyName"param="parameterName"|

property="propertyName"value二“值“

}/>

<jsp:setProperty>

1.name屬性

name屬性用來指定一個存在JSP中某個范圍中的Bean實(shí)例。

<jsp:setProperty>標(biāo)識將會按照page、request、session

和application的順序來查找這個Bean實(shí)例,直到第一個實(shí)

例被找到。若任何范圍內(nèi)不存在這個Bean實(shí)例,則會拋出異

常。〃〃

2.property=〃*〃

property屬性取值為時,則request請求中所有參數(shù)的

值將被一一賦給Bean中與參數(shù)具有相同名字的屬性。如果請

求中存在值為空的參數(shù),那么Bean中對應(yīng)的屬性將不會被賦

值為Null;如果Bean中存在一個屬性,但請求中沒有與之對

應(yīng)的參數(shù),那么該屬性同樣不會被賦值為Null,在這兩種情

<jsp:setProperty>

下的Bean屬性都會保留原來或默認(rèn)的值。

該種使用方法要求請求中參數(shù)的名稱和類型必須與

Bean中屬性的名稱和類型一致。但由于通過表單傳遞的參

數(shù)都是String類型的,所以JSP會自動將這些參數(shù)轉(zhuǎn)換為

Bean中對應(yīng)屬性的類型。下表給出了JSP自動將String類

型轉(zhuǎn)換為其他類型時所調(diào)用的方法。

<jsp:setProperty>

其他類型轉(zhuǎn)換方法

booleanjava.lang.Boolean.valueOf(String).booleanValue()

Booleanjava.lang.Boolean.valueOfifString)

bytejava.lang.Byte.valueOf(String).byteValue()

Bytejava.lang.Byte.valueOf(String)

doublejava.lang.Double.valueOf(String).doubleValue()

Doublejava.lang.Double.valueOffString)

intjava.lang.Integer.valueOfi(String).intValue()

Integerjava.lang.Integer.valueOf(String)

floatjava.lang.Float.valueOf(String).floatValue();

Floatjava.lang.Float.valueOf(String)

longjava.lang.Long.valueOf(String

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論