版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JSP程序設(shè)計(jì)教程(第3章)JSP程序設(shè)計(jì)教程第3章 JSP語(yǔ)法JSP程序設(shè)計(jì)教程(第3章)第 3 章 JSP語(yǔ)法n3.1 了解JSP的基本構(gòu)成n3.2 JSP的指令標(biāo)識(shí)n3.3 JSP的腳本標(biāo)識(shí)n3.4 JSP的注釋n3.5 動(dòng) 作 標(biāo) 識(shí)JSP程序設(shè)計(jì)教程(第3章) JSP頁(yè)面的基本構(gòu)成 今天是: 3.1 了解JSP的基本構(gòu)成 在學(xué)習(xí)JSP語(yǔ)法之前,首先來(lái)初步了解一下JSP頁(yè)面的基本結(jié)構(gòu)。請(qǐng)看下面的代碼:在上面的代碼中,并沒(méi)有包括JSP中的所有元素,但它仍然構(gòu)成了一個(gè)動(dòng)態(tài)的JSP程序。訪問(wèn)包含了該代碼的JSP頁(yè)面后,將顯示用戶訪問(wèn)該頁(yè)面的當(dāng)前時(shí)間。暫且不對(duì)其功能實(shí)現(xiàn)進(jìn)行講解,先來(lái)介紹該頁(yè)面
2、的組成元素。JSP程序設(shè)計(jì)教程(第3章)3.1 Java語(yǔ)言基礎(chǔ)3.1.1 JSP中的指令標(biāo)識(shí)3.1.2 HTML標(biāo)記語(yǔ)言3.1.3 嵌入的Java代碼片段3.1.4 JSP表達(dá)式JSP程序設(shè)計(jì)教程(第3章)3.1.1 JSP中的指令標(biāo)識(shí) 利用JSP指令可以使服務(wù)器按照指令的設(shè)置來(lái)執(zhí)行動(dòng)作和設(shè)置在整個(gè)JSP頁(yè)面范圍內(nèi)有效的屬性。例如,上述代碼中的第一個(gè)page指令指定了在該頁(yè)面中編寫JSP腳本使用的語(yǔ)言為Java,并且還指定了頁(yè)面響應(yīng)的MIME類型和JSP字符的編碼;第二個(gè)page指令所實(shí)現(xiàn)的功能類似于Java中的import語(yǔ)句,用來(lái)向當(dāng)前的JSP文件中導(dǎo)入需要用到的包文件。JSP程序設(shè)計(jì)教
3、程(第3章)3.1.2 HTML標(biāo)記語(yǔ)言 HTML標(biāo)記在JSP頁(yè)面中作為靜態(tài)的內(nèi)容,瀏覽器將會(huì)識(shí)別這些HTML標(biāo)記并執(zhí)行。在JSP程序開(kāi)發(fā)中,這些HTML標(biāo)記語(yǔ)言主要負(fù)責(zé)頁(yè)面的布局、設(shè)計(jì)和美觀,可以說(shuō)是網(wǎng)頁(yè)的框架。JSP程序設(shè)計(jì)教程(第3章)3.1.3 嵌入的Java代碼片段 嵌入到JSP頁(yè)面中的Java代碼,在客戶端瀏覽器中是不可見(jiàn)的。它們需要被服務(wù)器執(zhí)行,然后由服務(wù)器將執(zhí)行結(jié)果與HTML標(biāo)記語(yǔ)言一同發(fā)送給客戶端進(jìn)行顯示。通過(guò)向JSP頁(yè)面中嵌入Java代碼,可以使該頁(yè)面生成動(dòng)態(tài)的內(nèi)容。JSP程序設(shè)計(jì)教程(第3章)3.1.4 JSP表達(dá)式 JSP表達(dá)式主要用于數(shù)據(jù)的輸出。它可以向頁(yè)面輸出內(nèi)容以
4、顯示給用戶,還可以用來(lái)動(dòng)態(tài)地指定HTML標(biāo)記中屬性的值。JSP程序設(shè)計(jì)教程(第3章)3.2 JSP的指令標(biāo)識(shí) 指令標(biāo)識(shí)在客戶端是不可見(jiàn)的,它是被服務(wù)器解釋并被執(zhí)行的。通過(guò)指令標(biāo)識(shí)可以使服務(wù)器按照指令的設(shè)置來(lái)執(zhí)行動(dòng)作和設(shè)置在整個(gè)JSP頁(yè)面范圍內(nèi)有效的屬性。在一個(gè)指令中可以設(shè)置多個(gè)屬性,這些屬性的設(shè)置可以影響到整個(gè)頁(yè)面。 在JSP中主要包含3種指令,分別是page指令(頁(yè)面指令)、include指令和taglib指令。 指令通常以“”標(biāo)記結(jié)束,以上3種指令的通用格式如下:JSP程序設(shè)計(jì)教程(第3章)3.2 JSP的指令標(biāo)識(shí)下面將分別介紹JSP的3種指令格式。n3.2.1 使用page指令n3.2.
5、2 使用include指令 n3.2.3 使用taglib指令JSP程序設(shè)計(jì)教程(第3章)3.2.1 使用page指令 page指令即頁(yè)面指令,可以定義在整個(gè)JSP頁(yè)面范圍內(nèi)有效的屬性,其使用格式如下: page指令可以放在JSP頁(yè)面中的任意行,但為了利于程序代碼的閱讀,習(xí)慣上放在文件的開(kāi)始部分。Page指令具有多種屬性,通過(guò)這些屬性的設(shè)置可以影響到當(dāng)前的JSP頁(yè)面。例如,在頁(yè)面中正確設(shè)置當(dāng)前頁(yè)面響應(yīng)的MIME類型為text/html,如果MIME類型設(shè)置不正確,則當(dāng)服務(wù)器將數(shù)據(jù)傳輸給客戶端進(jìn)行顯示時(shí),客戶端將無(wú)法識(shí)別傳送來(lái)的數(shù)據(jù),從而不能正確地顯示內(nèi)容。JSP程序設(shè)計(jì)教程(第3章)3.2.1
6、 使用page指令 Page指令中除import屬性外,其他屬性只能在指令中出現(xiàn)一次。Page指令具有的屬性如下:雖然Page指令具有如此多的屬性,但在實(shí)際編程過(guò)程中,并不是每個(gè)屬性都必須一一列出,其中很多屬性可以忽略,此時(shí)Page指令將使用這些屬性的默認(rèn)值來(lái)設(shè)置JSP頁(yè)面JSP程序設(shè)計(jì)教程(第3章)3.2.1 使用page指令 language屬性:設(shè)置當(dāng)前頁(yè)面中編寫JSP腳本使用的語(yǔ)言,默認(rèn)值為java,例如:上述代碼設(shè)置了當(dāng)前頁(yè)面中使用Java語(yǔ)言來(lái)編寫JSP腳本,目前只能設(shè)置為Java。contentType屬性:設(shè)置頁(yè)面響應(yīng)的MIME類型,通常被設(shè)置為text/html,例如:如果該
7、屬性設(shè)置不正確,如設(shè)置為text/css,那么客戶端瀏覽器在顯示HTML樣式時(shí),不能對(duì)HTML標(biāo)識(shí)進(jìn)行解釋,而直接顯示HTML代碼。JSP程序設(shè)計(jì)教程(第3章)3.2.1 使用page指令 在該屬性中還可以設(shè)置JSP字符的編碼,例如:默認(rèn)的編碼為ISO-8859-1。import 屬性:import屬性類似于Java中的import語(yǔ)句,用來(lái)向JSP文件中導(dǎo)入需要用到的包。在Page指令中可多次使用該屬性來(lái)導(dǎo)入多個(gè)包。例如:或者通過(guò)逗號(hào)間隔,來(lái)導(dǎo)入多個(gè)包。JSP程序設(shè)計(jì)教程(第3章)3.2.1 使用page指令 在JSP中已經(jīng)默認(rèn)導(dǎo)入了以下包:java.lang.*javax.servlet.
8、*javax.servlet.jsp.*javax.servlet.http.*所以,即使沒(méi)有通過(guò)import屬性進(jìn)行導(dǎo)入,在JSP頁(yè)面中也可以調(diào)用上述包中的類。 若要在頁(yè)面中使用編寫的JavaBean,也可通過(guò)import屬性來(lái)導(dǎo)入。還可以通過(guò)動(dòng)作標(biāo)識(shí)來(lái)創(chuàng)建一個(gè)JavaBean實(shí)例進(jìn)行調(diào)用。JSP程序設(shè)計(jì)教程(第3章)3.2.1 使用page指令 extends屬性:extends屬性用于指定將一個(gè)JSP頁(yè)面轉(zhuǎn)換為Servlet后繼承的類。在JSP中通常不會(huì)設(shè)置該屬性,JSP容器會(huì)提供繼承的父類。并且如果設(shè)置了該屬性,一些改動(dòng)會(huì)影響JSP的編譯能力。session屬性:該屬性默認(rèn)值為true
9、,表示當(dāng)前頁(yè)面支持session,設(shè)為false表示不支持session。buffer屬性:該屬性用來(lái)設(shè)置out對(duì)象(JspWriter類對(duì)象)使用的緩沖區(qū)的大小。若設(shè)置為none,表示不使用緩存,而直接通過(guò)PrintWriter對(duì)象進(jìn)行輸出;如果將該屬性指定為數(shù)值,則輸出緩沖區(qū)的大小不應(yīng)小于該值,默認(rèn)值為8KB(因不同的服務(wù)器而不同,但大多數(shù)情況下都為8KB)。JSP程序設(shè)計(jì)教程(第3章)3.2.1 使用page指令 autoFlush屬性:該屬性默認(rèn)值為true,表示當(dāng)緩沖區(qū)已滿時(shí),自動(dòng)將其中的內(nèi)容輸出到客戶端。如果設(shè)為false,則當(dāng)緩沖區(qū)中的內(nèi)容超出其設(shè)置的大小時(shí),會(huì)產(chǎn)生“JSP Bu
10、ffer overflow”溢出異常。注意:若buffer屬性設(shè)為none,則autoFlush不能設(shè)為false。 isThreadSafe屬性:該屬性默認(rèn)值為true,表示當(dāng)前JSP頁(yè)面被轉(zhuǎn)換為Servlet后,會(huì)以多線程的方式來(lái)處理來(lái)自多個(gè)用戶的請(qǐng)求;如果設(shè)為false,則轉(zhuǎn)換后的Servlet會(huì)實(shí)現(xiàn)SigleThreadModel接口,該Servlet將以單線程的方式來(lái)處理用戶請(qǐng)求,即其他請(qǐng)求必須等待直到前一個(gè)請(qǐng)求處理結(jié)束。JSP程序設(shè)計(jì)教程(第3章)3.2.1 使用page指令 info屬性:該屬性可設(shè)置為任意字符串,如當(dāng)前頁(yè)面的作者或其他有關(guān)的頁(yè)面信息。可通過(guò)Servlet.get
11、ServletInfo()方法來(lái)獲取設(shè)置的字符串。例如:訪問(wèn)頁(yè)面后,將顯示:This is index.jsp!errorPage屬性:該屬性用來(lái)指定一個(gè)當(dāng)前頁(yè)面出現(xiàn)異常時(shí)所要調(diào)用的頁(yè)面。如果屬性值是以“/”開(kāi)頭的路徑,則將在當(dāng)前應(yīng)用程序的根目錄下查找文件;否則,將在當(dāng)前頁(yè)面的目錄下查找文件。JSP程序設(shè)計(jì)教程(第3章)3.2.1 使用page指令 isErrorPage屬性:將該屬性值設(shè)為true,此時(shí)在當(dāng)前頁(yè)面中可以使用exception異常對(duì)象。若在其他頁(yè)面中通過(guò)errorPage屬性指定了該頁(yè)面,則當(dāng)前者出現(xiàn)異常時(shí),會(huì)跳轉(zhuǎn)到該頁(yè)面,并可在該頁(yè)面中通過(guò)exception對(duì)象輸出錯(cuò)誤信息。
12、相反,如果將該屬性設(shè)置為false,則在當(dāng)前頁(yè)面中不能使用exception對(duì)象。該屬性默認(rèn)值為false?!纠?-1】 errorPage屬性及isErrorPage屬性的應(yīng)用isELIgnored屬性:通過(guò)該屬性的設(shè)置,可以使JSP容器忽略表達(dá)式語(yǔ)言“$”。其值只能為true或false。設(shè)為true,則忽略表達(dá)式語(yǔ)言。JSP程序設(shè)計(jì)教程(第3章)3.2.1 使用page指令 pageEncoding 屬性:該屬性用來(lái)設(shè)置JSP頁(yè)面字符的編碼。默認(rèn)值為ISO-8859-1。JSP程序設(shè)計(jì)教程(第3章)3.2.2 使用include指令 該指令用于在當(dāng)前的JSP頁(yè)面中,在當(dāng)前使用該指令的位置
13、嵌入其他的文件,如果被包含的文件中有可執(zhí)行的代碼,則顯示代碼執(zhí)行后的結(jié)果。該指令的使用格式如下:file屬性:該屬性指定被包含的文件,該屬性不支持任何表達(dá)式,也不允許通過(guò)如下的方式來(lái)傳遞參數(shù)。如果該屬性值以“/”開(kāi)頭,那么指定的是一個(gè)絕對(duì)路徑,將在當(dāng)前應(yīng)用的根目錄下查找文件;如果是以文件名稱或文件夾名開(kāi)頭,那么指定的是一個(gè)相對(duì)路徑,將在當(dāng)前頁(yè)面的目錄下查找文件。JSP程序設(shè)計(jì)教程(第3章)3.2.2 使用include指令 使用include指令引用外部文件,可以減少代碼的冗余。例如,有兩個(gè)JSP頁(yè)面都需要應(yīng)用下圖所示的網(wǎng)頁(yè)模板進(jìn)行布局。其中,這兩個(gè)頁(yè)面中的LOGO圖片區(qū)、側(cè)欄和頁(yè)尾的內(nèi)容都不
14、會(huì)發(fā)生變化。如果通過(guò)基本JSP語(yǔ)句來(lái)編寫這兩個(gè)頁(yè)面,會(huì)導(dǎo)致編寫的JSP文件出現(xiàn)大量的冗余代碼,不僅降低了開(kāi)發(fā)進(jìn)程而且會(huì)給程序的維護(hù)帶來(lái)很大的困難。為了解決該問(wèn)題,可以將這個(gè)復(fù)雜的頁(yè)面分成若干個(gè)獨(dú)立的部分,將相同的部分在單獨(dú)的JSP文件中進(jìn)行編寫。LOGO圖片區(qū):top.jsp側(cè)欄left.jsp內(nèi)容顯示區(qū):main.jsp頁(yè)尾:end.jspJSP程序設(shè)計(jì)教程(第3章)3.2.2 使用include指令 這樣在多個(gè)頁(yè)面中應(yīng)用上述的頁(yè)面模板時(shí),就可通過(guò)include指令在相應(yīng)的位置上引入這些文件,從而只需對(duì)內(nèi)容顯示區(qū)進(jìn)行編碼即可。類似的頁(yè)面代碼如下: 在這里對(duì)內(nèi)容顯示區(qū)進(jìn)行編碼 JSP程序設(shè)計(jì)教
15、程(第3章)3.2.3 使用taglib指令 在JSP頁(yè)面中,可以直接使用JSP提供的一些動(dòng)作元素標(biāo)識(shí)來(lái)完成特定功能,如使用包含一個(gè)文件。通過(guò)使用taglib指令,開(kāi)發(fā)者就可以在頁(yè)面中使用這些基本標(biāo)識(shí)或自定義的標(biāo)識(shí)來(lái)完成特殊的功能。taglib指令的使用格式如下:uri屬性:該屬性指定了標(biāo)簽描述符,該描述符是一個(gè)對(duì)標(biāo)簽描述文件(*.tld)的映射。在tld標(biāo)簽描述文件中定義了該標(biāo)簽庫(kù)中的各個(gè)標(biāo)簽名稱,并為每個(gè)標(biāo)簽指定一個(gè)標(biāo)簽處理類。JSP程序設(shè)計(jì)教程(第3章)3.2.3 使用taglib指令 prefix屬性:該屬性指定一個(gè)在頁(yè)面中使用由uri屬性指定的標(biāo)簽庫(kù)的前綴。前綴不能命名為jsp、js
16、px、java、javax、sun、servlet和sunw。開(kāi)發(fā)者可通過(guò)前綴來(lái)引用標(biāo)簽庫(kù)中的標(biāo)簽。以下為一個(gè)簡(jiǎn)單的使用JSTL的代碼:該段代碼通過(guò)標(biāo)簽將hello值賦給了變量name。JSP程序設(shè)計(jì)教程(第3章)3.3 JSP的腳本標(biāo)識(shí) 在JSP頁(yè)面中,腳本標(biāo)識(shí)使用得最為頻繁。因?yàn)樗鼈兡軌蚝芊奖恪㈧`活地生成頁(yè)面中的動(dòng)態(tài)內(nèi)容,特別是Scriptlet腳本程序。JSP中的腳本標(biāo)識(shí)包括以下三種元素:聲明標(biāo)識(shí)(Declaration)、JSP表達(dá)式(Expression)和腳本程序(Scriptlet)。通過(guò)這些元素,就可以在JSP頁(yè)面中像編寫Java程序一樣來(lái)聲明變量、定義函數(shù)或進(jìn)行各種表達(dá)式的運(yùn)
17、算。在JSP頁(yè)面中需要通過(guò)特殊的約定來(lái)表示這些元素,并且對(duì)于客戶端這些元素是不可見(jiàn)的,它們由服務(wù)器執(zhí)行。JSP程序設(shè)計(jì)教程(第3章)3.3 JSP的腳本標(biāo)識(shí)n3.3.1 JSP表達(dá)式(Expression)n3.3.2 聲明標(biāo)識(shí)(Declaration)n3.3.3 腳本程序(Scriptlet)JSP程序設(shè)計(jì)教程(第3章)3.3.1 JSP表達(dá)式 表達(dá)式用于向頁(yè)面中輸出信息,其使用格式為:特別要注意,“%”與“=”之間不要有空格。JSP表達(dá)式在頁(yè)面被轉(zhuǎn)換為Servlet后,轉(zhuǎn)換為了out.print()方法。所以JSP表達(dá)式與JSP頁(yè)面中嵌入到小腳本程序中的out.print()方法實(shí)現(xiàn)的功
18、能相同。如果通過(guò)JSP表達(dá)式輸出一個(gè)對(duì)象,則該對(duì)象的toString()方法會(huì)被自動(dòng)調(diào)用,表達(dá)式將輸出toString()方法返回的內(nèi)容。JSP表達(dá)式可以應(yīng)用到以下幾種情況。(1)向頁(yè)面輸出內(nèi)容,例如下面的代碼:JSP程序設(shè)計(jì)教程(第3章)3.3.1 JSP表達(dá)式 (2)生成動(dòng)態(tài)的鏈接地址,例如下面的代碼:用戶名:(3)動(dòng)態(tài)指定Form表單處理頁(yè)面,例如下面的代碼:運(yùn)行該段代碼將顯示:用戶名:a href=鏈接到welcom.jsp運(yùn)行該段代碼將生成下面的HTML代碼:鏈接到welcome.jspform action=運(yùn)行該段代碼將生成下面的HTML代碼:JSP程序設(shè)計(jì)教程(第3章)(4)為
19、通過(guò)循環(huán)語(yǔ)句生成的元素命名,例如下面的代碼:% for(int i=1;i :input type=text name=運(yùn)行該段代碼將生成下面的HTML代碼:file1:file2:3.3.1 JSP表達(dá)式JSP程序設(shè)計(jì)教程(第3章)3.3.2 聲明標(biāo)識(shí)(Declaration)在JSP頁(yè)面中可以聲明變量或方法,其聲明格式為:特別要注意,在“%”與“!”之間不要有空格。聲明的語(yǔ)法與在Java語(yǔ)言中聲明變量和方法時(shí)是一樣的。在頁(yè)面中通過(guò)聲明標(biāo)識(shí)聲明的變量和方法,在整個(gè)頁(yè)面內(nèi)都有效,它們將成為JSP頁(yè)面被轉(zhuǎn)換為Java類后類中的屬性和方法。并且它們會(huì)被多個(gè)線程即多個(gè)用戶共享。也就是說(shuō),其中的任何一
20、個(gè)線程對(duì)聲明的變量或方法的修改都會(huì)改變它們?cè)瓉?lái)的狀態(tài)。它們的生命周期從創(chuàng)建到服務(wù)器關(guān)閉后結(jié)束。下面將通過(guò)一個(gè)具體實(shí)例來(lái)介紹聲明標(biāo)識(shí)的應(yīng)用?!纠?-2】 一個(gè)簡(jiǎn)單的網(wǎng)站計(jì)數(shù)器JSP程序設(shè)計(jì)教程(第3章)3.3.3 腳本程序(Scriptlet)腳本程序是在JSP頁(yè)面中使用“”標(biāo)記起來(lái)的一段Java代碼。在腳本程序中可以定義變量、調(diào)用方法和進(jìn)行各種表達(dá)式運(yùn)算,且每行語(yǔ)句后面要加入分號(hào)。在腳本程序中定義的變量在當(dāng)前的整個(gè)頁(yè)面內(nèi)都有效,但不會(huì)被其他的線程共享,當(dāng)前用戶對(duì)該變量的操作不會(huì)影響到其他的用戶。當(dāng)變量所在的頁(yè)面關(guān)閉后就會(huì)被銷毀。腳本程序使用格式如下:腳本程序的使用比較靈活,它所實(shí)現(xiàn)的功能是JS
21、P表達(dá)式無(wú)法實(shí)現(xiàn)的。【例3-3】 腳本程序的應(yīng)用JSP程序設(shè)計(jì)教程(第3章)3.4 JSP的注釋 在JSP頁(yè)面中可以應(yīng)用多種注釋,如HTML中的注釋、Java中的注釋和在嚴(yán)格意義上說(shuō)屬于JSP頁(yè)面自己的注釋:帶有JSP表達(dá)式和隱藏的注釋。在JSP規(guī)范中,它們都屬于JSP中的注釋,并且它們的語(yǔ)法規(guī)則和運(yùn)行的效果有所不同。下面將介紹JSP中的各種注釋。n3.4.1 HTML中的注釋n3.4.2 帶有JSP表達(dá)式的注釋n3.4.3 隱藏注釋 n3.4.4 腳本程序(Scriptlet)中的注釋 JSP程序設(shè)計(jì)教程(第3章)3.4.1 HTML中的注釋 JSP文件是由HTML標(biāo)記和嵌入的Java程序片
22、段組成的,所以在HTML中的注釋同樣可以在JSP文件中使用。注釋格式如下:【例3-4】 HTML注釋的應(yīng)用JSP程序設(shè)計(jì)教程(第3章)3.4.2 帶有JSP表達(dá)式的注釋 在HTML注釋中可以嵌入JSP表達(dá)式,注釋格式如下:!- comment- 包含該注釋語(yǔ)句的JSP頁(yè)面被請(qǐng)求后,服務(wù)器能夠識(shí)別注釋中的JSP表達(dá)式,從而來(lái)執(zhí)行該表達(dá)式,而對(duì)注釋中的其他內(nèi)容不做任何操作。當(dāng)服務(wù)器將執(zhí)行結(jié)果返回給客戶端后,客戶端瀏覽器會(huì)識(shí)別該注釋語(yǔ)句,所以被注釋的內(nèi)容不會(huì)顯示在瀏覽器中?!纠?-5】 帶有JSP表達(dá)式注釋的應(yīng)用JSP程序設(shè)計(jì)教程(第3章)3.4.3 隱藏注釋 在前面已經(jīng)介紹了如何應(yīng)用HTML中的注
23、釋,這種注釋雖然在客戶端瀏覽頁(yè)面時(shí)不會(huì)看見(jiàn),但它卻存在于源代碼中,可通過(guò)在客戶端查看源代碼看到被注釋的內(nèi)容。所以嚴(yán)格來(lái)說(shuō),這種注釋并不安全。下面將介紹一種隱藏注釋,注釋格式如下:使用該方法注釋的內(nèi)容,不僅在客戶端瀏覽時(shí)看不到,而且即使是通過(guò)在客戶端查看HTML源代碼,也不會(huì)看到,所以安全性較高?!纠?-6】 隱藏注釋的應(yīng)用JSP程序設(shè)計(jì)教程(第3章)3.4.4 腳本程序(Scriptlet)中的注釋 在腳本程序中所包含的是一段Java代碼,所以在腳本程序中的注釋和在Java中的注釋是相同的。腳本程序中包括下面3種注釋方法。/ 注釋內(nèi)容該方法進(jìn)行單行注釋,符號(hào)“/”后面的所有內(nèi)容為注釋的內(nèi)容,服
24、務(wù)器對(duì)該內(nèi)容不進(jìn)行任何操作。因?yàn)槟_本程序在客戶端通過(guò)查看源代碼是不可見(jiàn)的,所以在腳本程序中通過(guò)該方法被注釋的內(nèi)容也是不可見(jiàn)的,并且在后面將要提到的通過(guò)多行注釋和提示文檔進(jìn)行注釋的內(nèi)容都是不可見(jiàn)的。1單行注釋單行注釋的格式如下:JSP程序設(shè)計(jì)教程(第3章)3.4.4 腳本程序(Scriptlet)中的注釋【例3-7】 單行注釋的應(yīng)用/* 注釋內(nèi)容1 注釋內(nèi)容2 */ 為了程序代碼的美觀,開(kāi)發(fā)員習(xí)慣上在每行的注釋內(nèi)容前面加入一個(gè)“*”號(hào),構(gòu)成以下的注釋格式:2多行注釋多行注釋的是通過(guò)“/*”與“*/”符號(hào)進(jìn)行標(biāo)記,它們必須成對(duì)出現(xiàn),在它們之間輸入的注釋內(nèi)容可以換行。注釋格式如下:JSP程序設(shè)計(jì)教程
25、(第3章)3.4.4 腳本程序(Scriptlet)中的注釋【例3-8】 多行注釋的應(yīng)用3提示文檔注釋同單行注釋一樣,在“/*”與“*/”之間被注釋的所有內(nèi)容,即使是JSP表達(dá)式或其他的腳本程序,服務(wù)器都不會(huì)做任何處理,并且多行注釋的開(kāi)始標(biāo)記和結(jié)束標(biāo)記可以不在同一個(gè)腳本程序中同時(shí)出現(xiàn)。/* * 注釋內(nèi)容1 * 注釋內(nèi)容2 * */JSP程序設(shè)計(jì)教程(第3章)3.4.4 腳本程序(Scriptlet)中的注釋 該種注釋會(huì)被Javadoc文檔工具生成文檔時(shí)所讀取,文檔是對(duì)代碼結(jié)構(gòu)和功能的描述。注釋格式如下:/* 提示信息1 提示信息2 */ 該注釋方法與前面介紹的多行注釋很相似,但細(xì)心的讀者會(huì)發(fā)現(xiàn)
26、它是以“/*”符號(hào)作為注釋的開(kāi)始標(biāo)記,而不是“/*”。與多行注釋一樣,被“/*”和“/*”符號(hào)注釋的所有內(nèi)容,服務(wù)器都不會(huì)做任何處理。JSP程序設(shè)計(jì)教程(第3章)3.4.4 腳本程序(Scriptlet)中的注釋 在Eclipse開(kāi)發(fā)工具中向創(chuàng)建的JSP文件輸入下面的代碼,然后將鼠標(biāo)指針移動(dòng)到指定的代碼上,將會(huì)出現(xiàn)提示信息。當(dāng)前訪問(wèn)次數(shù):JSP程序設(shè)計(jì)教程(第3章)3.4.4 腳本程序(Scriptlet)中的注釋將鼠標(biāo)指針移動(dòng)到代碼上,將出現(xiàn)下圖如圖所示的提示信息。JSP程序設(shè)計(jì)教程(第3章)3.5 動(dòng) 作 標(biāo) 識(shí) 在JSP中提供了一系列的使用XML語(yǔ)法寫成的動(dòng)作標(biāo)識(shí),這些標(biāo)識(shí)可用來(lái)實(shí)現(xiàn)特殊
27、的功能,例如請(qǐng)求的轉(zhuǎn)發(fā)、在當(dāng)前頁(yè)中包含其他文件、在頁(yè)面中創(chuàng)建一個(gè)JavaBean實(shí)例等。 動(dòng)作標(biāo)識(shí)是在請(qǐng)求處理階段按照在頁(yè)面中出現(xiàn)的順序被執(zhí)行的,只有它們被執(zhí)行的時(shí)候才會(huì)去實(shí)現(xiàn)自己所具有的功能。這與指令標(biāo)識(shí)是不同的,因?yàn)樵贘SP頁(yè)面被執(zhí)行時(shí)首先進(jìn)入翻譯階段,程序會(huì)先查找頁(yè)面中的指令標(biāo)識(shí)并將它們轉(zhuǎn)換成Servlet,所以這些指令標(biāo)識(shí)會(huì)首先被執(zhí)行,從而設(shè)置了整個(gè)的JSP頁(yè)面。 動(dòng)作標(biāo)識(shí)通用的使用格式如下:JSP程序設(shè)計(jì)教程(第3章)3.5 動(dòng) 作 標(biāo) 識(shí)或 在JSP中提供的常用的標(biāo)準(zhǔn)動(dòng)作標(biāo)識(shí)有:JSP程序設(shè)計(jì)教程(第3章)3.5 動(dòng) 作 標(biāo) 識(shí)nnnnnnnJSP程序設(shè)計(jì)教程(第3章) 動(dòng)作標(biāo)識(shí)用
28、于向當(dāng)前的頁(yè)面中包含其他的文件,這個(gè)文件可以是動(dòng)態(tài)文件也可以是靜態(tài)文件。該標(biāo)識(shí)的使用格式如下: page屬性:該屬性指定了被包含文件的路徑,其值可以是一個(gè)代表了相對(duì)路徑的表達(dá)式。當(dāng)路徑是以“/”開(kāi)頭時(shí),則按照當(dāng)前應(yīng)用的路徑查找這個(gè)文件;如果路徑是以文件名或目錄名稱開(kāi)頭,那么將按照當(dāng)前的路徑來(lái)查找被包含的文件。 或者向被包含的動(dòng)態(tài)頁(yè)面中傳遞參數(shù): JSP程序設(shè)計(jì)教程(第3章) flush屬性:表示當(dāng)輸出緩沖區(qū)滿時(shí),是否清空緩沖區(qū)。該屬性值為boolean型,默認(rèn)值為false,通常情況下設(shè)為true。 子標(biāo)識(shí)可以向被包含的動(dòng)態(tài)頁(yè)面中傳遞參數(shù)。 標(biāo)識(shí)對(duì)包含的動(dòng)態(tài)文件和靜態(tài)文件的處理方式是不同的。如
29、果被包含的是靜態(tài)的文件,則頁(yè)面執(zhí)行后,在使用了該標(biāo)識(shí)的位置處將會(huì)輸出這個(gè)文件的內(nèi)容。如果標(biāo)識(shí)包含的是一個(gè)動(dòng)態(tài)的文件,那么JSP編譯器將編譯并執(zhí)行這個(gè)文件。不能通過(guò)文件的名稱來(lái)判斷該文件是靜態(tài)的還是動(dòng)態(tài)的,標(biāo)識(shí)會(huì)識(shí)別出文件的類型。JSP程序設(shè)計(jì)教程(第3章) 動(dòng)作標(biāo)識(shí)與include指令都可用來(lái)包含文件,下面來(lái)介紹它們之間存在的差異。1屬性include指令通過(guò)file屬性來(lái)指定被包含的頁(yè)面,include指令將file屬性值看作一個(gè)實(shí)際存在的文件的路徑,所以該屬性不支持任何表達(dá)式。若在file屬性值中應(yīng)用JSP表達(dá)式,則會(huì)拋出異常,如下面的代碼:% include file= %該用法將拋出下
30、面的異常:File / not foundJSP程序設(shè)計(jì)教程(第3章) 動(dòng)作標(biāo)識(shí)通過(guò)page屬性來(lái)指定被包含的頁(yè)面,該屬性支持JSP表達(dá)式。2處理方式 使用include指令被包含的文件,它的內(nèi)容會(huì)原封不動(dòng)地插入到包含頁(yè)中使用該指令的位置,然后JSP編譯器再對(duì)這個(gè)合成的文件進(jìn)行翻譯。所以在一個(gè)JSP頁(yè)面中使用include指令來(lái)包含另外一個(gè)JSP頁(yè)面,最終編譯后的文件只有一個(gè)。 使用動(dòng)作標(biāo)識(shí)包含文件時(shí),當(dāng)該標(biāo)識(shí)被執(zhí)行時(shí),程序會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到(注意是轉(zhuǎn)發(fā),而不是請(qǐng)求重定向)被包含的頁(yè)面,并將執(zhí)行結(jié)果輸出到瀏覽器中,然后返回包含頁(yè)繼續(xù)執(zhí)行后面的代碼。因?yàn)榉?wù)器執(zhí)行的是兩個(gè)文件,所以JSP編譯器會(huì)分別
31、對(duì)這兩個(gè)文件進(jìn)行編譯。JSP程序設(shè)計(jì)教程(第3章)3包含方式 使用include指令包含文件,最終服務(wù)器執(zhí)行的是將兩個(gè)文件合成后由JSP編譯器編譯成的一個(gè)Class文件,所以被包含文件的內(nèi)容應(yīng)是固定不變的,若改變了被包含的文件,則主文件的代碼就發(fā)生了改變,因此服務(wù)器會(huì)重新編譯主文件。include指令的這種包含過(guò)程稱為靜態(tài)包含。 使用動(dòng)作標(biāo)識(shí)通常是來(lái)包含那些經(jīng)常需要改動(dòng)的文件。此時(shí)服務(wù)器執(zhí)行的是兩個(gè)文件,被包含文件的改動(dòng)不會(huì)影響到主文件,因此服務(wù)器不會(huì)對(duì)主文件重新編譯,而只需重新編譯被包含的文件即可。而對(duì)被包含文件的編譯是在執(zhí)行時(shí)才進(jìn)行的,也就是說(shuō),只有當(dāng)動(dòng)作標(biāo)識(shí)被執(zhí)行時(shí),使用該識(shí)包含的目標(biāo)文
32、件才會(huì)被編譯,否則被包含的文件不會(huì)被編譯,所以這種包含過(guò)程稱為動(dòng)態(tài)包含。JSP程序設(shè)計(jì)教程(第3章)4對(duì)被包含文件的約定使用include指令包含文件時(shí),對(duì)被包含文件有約定。【例3-9】 通過(guò)include指令包含文件【例3-10】 通過(guò)include動(dòng)作標(biāo)識(shí)包含文件技巧:如果要在JSP頁(yè)面中要顯示大量的文本文字,可以將文字寫入靜態(tài)文件中(如記事本),然后通過(guò)include指令或動(dòng)作標(biāo)識(shí)包含進(jìn)來(lái)。JSP程序設(shè)計(jì)教程(第3章) 動(dòng)作標(biāo)識(shí)用來(lái)將請(qǐng)求轉(zhuǎn)發(fā)到另外一個(gè)JSP、HTML或相關(guān)的資源文件中。當(dāng)該標(biāo)識(shí)被執(zhí)行后,當(dāng)前的頁(yè)面將不再被執(zhí)行,而是去執(zhí)行該標(biāo)識(shí)指定的目標(biāo)頁(yè)面。該標(biāo)識(shí)使用的格式如下: 如果
33、轉(zhuǎn)發(fā)的目標(biāo)是一個(gè)動(dòng)態(tài)文件,還可以向該文件中傳遞參數(shù),使用格式如下: JSP程序設(shè)計(jì)教程(第3章) page屬性:該屬性指定了目標(biāo)文件的路徑。如果該值是以“/”開(kāi)頭,表示在當(dāng)前應(yīng)用的根目錄下查找文件,否則就在當(dāng)前路徑下查找目標(biāo)文件。請(qǐng)求被轉(zhuǎn)向到的目標(biāo)文件必須是內(nèi)部的資源,即當(dāng)前應(yīng)用中的資源。如果想通過(guò)forward動(dòng)作轉(zhuǎn)發(fā)到應(yīng)用外部的文件中,例如,當(dāng)前應(yīng)用為A,在根目錄下的index.jsp頁(yè)面中存在下面的代碼用來(lái)將請(qǐng)求轉(zhuǎn)發(fā)到應(yīng)用B中的logon.jsp頁(yè)面。那么將出現(xiàn)下面的錯(cuò)誤提示:The requested resource (/) is not availableJSP程序設(shè)計(jì)教程(第3章
34、) 仔細(xì)觀察可以看到,錯(cuò)誤提示中的路徑前自動(dòng)加入了一個(gè)“/”,這是因?yàn)閕ndex.jsp頁(yè)面在應(yīng)用A的根目錄下,當(dāng)forward標(biāo)識(shí)被執(zhí)行時(shí),會(huì)在該目錄下來(lái)查找page屬性指定的目標(biāo)文件,所以會(huì)提示資源不存在的信息。 子標(biāo)識(shí)用來(lái)向動(dòng)態(tài)的目標(biāo)文件中傳遞參數(shù)。 這里重點(diǎn)提示一下,標(biāo)識(shí)實(shí)現(xiàn)的是請(qǐng)求的轉(zhuǎn)發(fā)操作,而不是請(qǐng)求重定向。它們之間的一個(gè)區(qū)別就是:進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)時(shí),存儲(chǔ)在request對(duì)象中的信息會(huì)被保留并被帶到目標(biāo)頁(yè)面中;而請(qǐng)求重定向是重新生成一個(gè)request請(qǐng)求,然后將該請(qǐng)求重定向到指定的URL,所以事先存儲(chǔ)在request對(duì)象中的信息都不存在了。JSP程序設(shè)計(jì)教程(第3章) 通過(guò)應(yīng)用動(dòng)作標(biāo)識(shí)
35、可以在JSP頁(yè)面中創(chuàng)建一個(gè)Bean實(shí)例,并且通過(guò)屬性的設(shè)置可以將該實(shí)例存儲(chǔ)到JSP中的指定范圍內(nèi)。如果在指定的范圍內(nèi)已經(jīng)存在了指定的Bean實(shí)例,那么將使用這個(gè)實(shí)例,而不會(huì)重新創(chuàng)建。通過(guò)標(biāo)識(shí)創(chuàng)建的Bean實(shí)例可以在Scriptlet中應(yīng)用。該標(biāo)識(shí)的使用格式如下:JSP程序設(shè)計(jì)教程(第3章)也可以在標(biāo)識(shí)體內(nèi)嵌入子標(biāo)識(shí)或其他內(nèi)容:JSP程序設(shè)計(jì)教程(第3章) 這兩種使用方法是有區(qū)別的。在頁(yè)面中應(yīng)用標(biāo)識(shí)創(chuàng)建一個(gè)Bean時(shí),如果該Bean是第一次被實(shí)例化,那么對(duì)于標(biāo)識(shí)的第二種使用格式,標(biāo)識(shí)體內(nèi)的內(nèi)容會(huì)被執(zhí)行,若已經(jīng)存在了指定的Bean實(shí)例,則標(biāo)識(shí)體內(nèi)的內(nèi)容就不再被執(zhí)行了。而對(duì)于第一種使用格式,無(wú)論在指
36、定的范圍內(nèi)是否已經(jīng)存在一個(gè)指定的Bean實(shí)例,標(biāo)識(shí)后面的內(nèi)容都會(huì)被執(zhí)行。JSP程序設(shè)計(jì)教程(第3章) 下面將對(duì)標(biāo)識(shí)中各屬性的用法進(jìn)行詳細(xì)介紹。1id屬性 該屬性指定一個(gè)變量,在所定義的范圍內(nèi)或Scriptlet中將使用該變量來(lái)對(duì)所創(chuàng)建的Bean實(shí)例進(jìn)行引用。該變量必須符合Java中變量的命名規(guī)則。JSP程序設(shè)計(jì)教程(第3章)2type=數(shù)據(jù)類型 type屬性用于設(shè)置由id屬性指定的變量的類型。type屬性可以指定要?jiǎng)?chuàng)建實(shí)例的類的本身、類的父類或者是一個(gè)接口。使用type屬性來(lái)設(shè)置變量類型的使用格式如下:如果在session范圍內(nèi),已經(jīng)存在了名為“us”的實(shí)例,則將該實(shí)例轉(zhuǎn)換為type屬性指定的
37、UserInfo類型(必須是合法的類型轉(zhuǎn)換)并賦值給id屬性指定的變量;若指定的實(shí)例不存在將拋出“bean us not found within scope”異常。JSP程序設(shè)計(jì)教程(第3章)3scope屬性 該屬性指定了所創(chuàng)建Bean實(shí)例的存取范圍,省略該屬性時(shí)的值為page。標(biāo)識(shí)被執(zhí)行時(shí),首先會(huì)在scope屬性指定的范圍來(lái)查找指定的Bean實(shí)例,如果該實(shí)例已經(jīng)存在,則引用這個(gè)Bean,否則重新創(chuàng)建,并將其存儲(chǔ)在 scope屬性指定的范圍內(nèi)。scope屬性具有的可選值如下。 page:指定了所創(chuàng)建的Bean實(shí)例只能夠在當(dāng)前的JSP文件中使用,包括在通過(guò)include指令靜態(tài)包含的頁(yè)面中有效
38、。 request:指定了所創(chuàng)建的Bean實(shí)例可以在請(qǐng)求范圍內(nèi)進(jìn)行存取。在請(qǐng)求被轉(zhuǎn)發(fā)至的目標(biāo)頁(yè)面中可通過(guò)request對(duì)象的getAttribute(id屬性值)方法獲取創(chuàng)建的Bean實(shí)例。JSP程序設(shè)計(jì)教程(第3章)一個(gè)請(qǐng)求的生命周期是從客戶端向服務(wù)器發(fā)出一個(gè)請(qǐng)求到服務(wù)器響應(yīng)這個(gè)請(qǐng)求給用戶后結(jié)束,所以請(qǐng)求結(jié)束后,存儲(chǔ)在其中的Bean的實(shí)例也就失效了。 session:指定了所創(chuàng)建的Bean實(shí)例的有效范圍為session。session是當(dāng)用戶訪問(wèn)Web應(yīng)用時(shí),服務(wù)器為用戶創(chuàng)建的一個(gè)對(duì)象,服務(wù)器通過(guò)session的ID值來(lái)區(qū)分其他的用戶。針對(duì)某一個(gè)用戶而言,在該范圍中的對(duì)象可被多個(gè)頁(yè)面共享。注
39、意:可以使用session對(duì)象的getAttribute(id屬性值)方法獲取存儲(chǔ)在session中的Bean實(shí)例,也可以使用session對(duì)象的getValue(id屬性值)來(lái)獲取,但該方法不建議使用。JSP程序設(shè)計(jì)教程(第3章) application:該值指定了所創(chuàng)建的Bean實(shí)例的有效范圍從服務(wù)器啟動(dòng)開(kāi)始到服務(wù)器關(guān)閉結(jié)束。application對(duì)象是在服務(wù)器啟動(dòng)時(shí)創(chuàng)建的,它被多個(gè)用戶共享。所以訪問(wèn)該application對(duì)象的所有用戶共享存儲(chǔ)于該對(duì)象中的Bean實(shí)例。注意:可以使用application對(duì)象的getAttribute(id屬性值)方法獲取存在于application中的
40、Bean實(shí)例。4class=package.className class屬性指定了一個(gè)完整的類名,其中package表示類包的名字,className表示類的Class文件名稱。通過(guò)class屬性指定的類不能是抽象的,它必須具有公共的、沒(méi)有參數(shù)的構(gòu)造方法。在沒(méi)有設(shè)置type屬性時(shí),必須設(shè)置class屬性。JSP程序設(shè)計(jì)教程(第3章)使用class屬性定位一個(gè)類的使用格式如下:程序首先會(huì)在session范圍中來(lái)查找是否存在名為“us”的UserInfo類的實(shí)例,如果不存在,那么會(huì)通過(guò)new操作符實(shí)例化UserInfo類來(lái)獲取一個(gè)實(shí)例,并以“us”為實(shí)例名稱存儲(chǔ)到session范圍內(nèi)。5clas
41、s=package.className type=數(shù)據(jù)類型 class屬性與type屬性可以指定同一個(gè)類,在標(biāo)識(shí)中class屬性與type屬性一起使用時(shí)的格式如下:JSP程序設(shè)計(jì)教程(第3章) 這里假設(shè)UserBase類為UserInfo類的父類。該標(biāo)識(shí)被執(zhí)行時(shí),程序首先創(chuàng)建了一個(gè)以type屬性的值為類型,以id屬性值為名稱的變量us,并賦值為null;然后在session范圍內(nèi)來(lái)查找這個(gè)名為“us”的Bean實(shí)例,如果存在,則將其轉(zhuǎn)換為type屬性指定的UserBase類型(類型轉(zhuǎn)換必須是合法的)并賦值給變量us;如果實(shí)例不存在,那么將通過(guò)new操作符來(lái)實(shí)例化一個(gè)UserInfo類的實(shí)例并賦
42、值給變量us,最后將us變量?jī)?chǔ)在session范圍內(nèi)。6beanName=package.className type=數(shù)據(jù)類型JSP程序設(shè)計(jì)教程(第3章)beanName屬性與type屬性可以指定同一個(gè)類,在標(biāo)識(shí)中beanName屬性與type屬性一起使用時(shí)的格式如下:這里假設(shè)UserBase類為UserInfo類的父類。該標(biāo)識(shí)被執(zhí)行時(shí),程序首先創(chuàng)建了一個(gè)以type屬性的值為類型,以id屬性值為名稱的變量us,并賦值為null;然后在session范圍內(nèi)來(lái)查找這個(gè)名為“us”的Bean實(shí)例,如果存在,則將其轉(zhuǎn)換為type屬性指定的UserBase類型(類型轉(zhuǎn)換必須是合法的)并賦值給變量us;
43、如果實(shí)例不存在,那么將通過(guò)instantiate()方法從UserInfo類中實(shí)例化一個(gè)類并將其轉(zhuǎn)換成UserBase類型后賦值給變量us,最后將變量us存儲(chǔ)在session范圍內(nèi)。JSP程序設(shè)計(jì)教程(第3章)通常情況下應(yīng)用標(biāo)識(shí)的格式如下:如果想在多個(gè)頁(yè)面中共享這個(gè)Bean實(shí)例,可將scope屬性設(shè)置為session。在頁(yè)面中使用標(biāo)識(shí)來(lái)實(shí)例化一個(gè)Bean實(shí)例后,可以通過(guò)屬性來(lái)設(shè)置或修改該Bean中的屬性,或者通過(guò)標(biāo)識(shí)來(lái)讀取該Bean中指定的屬性。JSP程序設(shè)計(jì)教程(第3章)標(biāo)識(shí)通常情況下與標(biāo)識(shí)一起使用,它將調(diào)用Bean中的setXxx()方法將請(qǐng)求中的參數(shù)賦值給由標(biāo)識(shí)創(chuàng)建的JavaBean中對(duì)
44、應(yīng)的簡(jiǎn)單屬性或索引屬性。該標(biāo)識(shí)的使用格式如下:JSP程序設(shè)計(jì)教程(第3章)name屬性用來(lái)指定一個(gè)存在JSP中某個(gè)范圍中的Bean實(shí)例。標(biāo)識(shí)將會(huì)按照page、request、session和application的順序來(lái)查找這個(gè)Bean實(shí)例,直到第一個(gè)實(shí)例被找到。若任何范圍內(nèi)不存在這個(gè)Bean實(shí)例,則會(huì)拋出異常。1name屬性property屬性取值為“*”時(shí),則request請(qǐng)求中所有參數(shù)的值將被一一賦給Bean中與參數(shù)具有相同名字的屬性。如果請(qǐng)求中存在值為空的參數(shù),那么Bean中對(duì)應(yīng)的屬性將不會(huì)被賦值為Null;如果Bean中存在一個(gè)屬性,但請(qǐng)求中沒(méi)有與之對(duì)應(yīng)的參數(shù),那么該屬性同樣不會(huì)被賦
45、值為Null,2property=*JSP程序設(shè)計(jì)教程(第3章)在這兩種情況下的Bean屬性都會(huì)保留原來(lái)或默認(rèn)的值。 該種使用方法要求請(qǐng)求中參數(shù)的名稱和類型必須與Bean中屬性的名稱和類型一致。但由于通過(guò)表單傳遞的參數(shù)都是String類型的,所以JSP會(huì)自動(dòng)將這些參數(shù)轉(zhuǎn)換為Bean中對(duì)應(yīng)屬性的類型。下表給出了JSP自動(dòng)將String類型轉(zhuǎn)換為其他類型時(shí)所調(diào)用的方法。JSP程序設(shè)計(jì)教程(第3章)其其 他他 類類 型型轉(zhuǎn)轉(zhuǎn) 換換 方法方法booleanjava.lang.Boolean.valueOf(String).booleanValue()Booleanjava.lang.Boolean.v
46、alueOf(String)bytejava.lang.Byte.valueOf(String).byteValue()Bytejava.lang.Byte.valueOf(String)doublejava.lang.Double.valueOf(String).doubleValue()Doublejava.lang.Double.valueOf(String)intjava.lang.Integer.valueOf(String).intValue()Integerjava.lang.Integer.valueOf(String)floatjava.lang.Float.valueOf(
47、String).floatValue();Floatjava.lang.Float.valueOf(String)longjava.lang.Long.valueOf(String).longValue()Longjava.lang.Long.valueOf(String)JSP程序設(shè)計(jì)教程(第3章) property屬性取值為Bean中的屬性時(shí),則只會(huì)將request請(qǐng)求中與該Bean屬性同名的一個(gè)參數(shù)的值賦給這個(gè)Bean屬性。更進(jìn)一步講,如果property屬性指定的Bean屬性為userName,那么指定Bean中必須存在setUserName()方法,否則會(huì)拋出類似于下面的異常:Can
48、not find any information on property userName in a bean of type erInfo在此基礎(chǔ)上,如果請(qǐng)求中沒(méi)有與userName同名的參數(shù),則該Bean屬性會(huì)保留原來(lái)或默認(rèn)的值,而不會(huì)被賦值為Null。與將property屬性賦值為“*”一樣,當(dāng)請(qǐng)求中參數(shù)的類型與Bean中屬性類型不一致時(shí),JSP會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換。3property=propertyNameJSP程序設(shè)計(jì)教程(第3章) param屬性指定一個(gè)request請(qǐng)求中的參數(shù),property屬性指定Bean中的某個(gè)屬性。該種使用方法允許將請(qǐng)求中的參數(shù)賦值給Bean中與該參數(shù)不同名
49、的屬性。如果param屬性指定參數(shù)的值為空,那么由property屬性指定的Bean屬性會(huì)保留原來(lái)或默認(rèn)的值而不會(huì)被賦為Null。4property=propertyName param=parameterName5property=propertyName value=值其中,value屬性指定的值可以是一個(gè)字符串?dāng)?shù)值或表示一個(gè)具體值的JSP表達(dá)式或EL表達(dá)式。該值將被賦給property屬性指定的Bean屬性。JSP程序設(shè)計(jì)教程(第3章) 當(dāng)value屬性指定的是一個(gè)字符串時(shí),如果指定的Bean屬性與其類型不一致時(shí),則會(huì)根據(jù)表3-3中的方法將該字符串值自動(dòng)轉(zhuǎn)換成對(duì)應(yīng)的類型。 當(dāng)value屬
50、性指定的是一個(gè)表達(dá)式時(shí),那么該表達(dá)式所表示的值的類型必須與property屬性指定的Bean屬性一致,否則會(huì)拋出“argument type mismatch”異常。 通常標(biāo)識(shí)與標(biāo)識(shí)一起使用,但這并不是絕對(duì)的,應(yīng)用如下的方法同樣可以將請(qǐng)求中的參數(shù)值賦給JavaBean中的屬性?!纠?-11】 標(biāo)識(shí)的使用JSP程序設(shè)計(jì)教程(第3章)屬性用來(lái)從指定的Bean中讀取指定的屬性值,并輸出到頁(yè)面中。該Bean必須具有g(shù)etXxx()方法。標(biāo)識(shí)的使用格式如下: name屬性:name屬性用來(lái)指定一個(gè)存在某JSP范圍中的Bean實(shí)例。標(biāo)識(shí)將會(huì)按照page、request、session和applicatio
51、n的順序來(lái)查找這個(gè)Bean實(shí)例,直到第一個(gè)實(shí)例被找到。若任何范圍內(nèi)不存在這個(gè)Bean實(shí)例則會(huì)拋出“Attempted a bean operation on a null object”異常。JSP程序設(shè)計(jì)教程(第3章) property屬性:該屬性指定了要獲取由name屬性指定的Bean中的哪個(gè)屬性的值。若它指定的值為“userName”,那么Bean中必須存在getUserName()方法,否則會(huì)拋出下面的異常:Cannot find any information on property userName in a bean of type 此處為類名 如果指定Bean中的屬性是一個(gè)對(duì)象
52、,那么該對(duì)象的toString()方法被調(diào)用,并輸出執(zhí)行結(jié)果。JSP程序設(shè)計(jì)教程(第3章)是的子標(biāo)識(shí),當(dāng)使用標(biāo)識(shí)加載Java小應(yīng)用程序或JavaBean失敗時(shí),可通過(guò)標(biāo)識(shí)向用戶輸出提示信息。該標(biāo)識(shí)的使用格式如下: 加載Java Applet小程序失敗! JSP程序設(shè)計(jì)教程(第3章) 使用標(biāo)識(shí)可以在頁(yè)面中插入Java Applet小程序或JavaBean,它們能夠在客戶端運(yùn)行。該標(biāo)識(shí)會(huì)根據(jù)客戶端瀏覽器的版本轉(zhuǎn)換成或HTML元素。該標(biāo)識(shí)的使用格式如下:jsp:plugin type=applet | bean code= codebase= name= archive= align= height= width= hspace= vspace= jreversion= nspluginurl= iepluginurl= jsp:param name=parameterName value=parameterValue | / 加載失敗提示信息JSP程序設(shè)計(jì)教程(第3章)標(biāo)識(shí)中的各屬性的簡(jiǎn)要介紹如下表所示。屬屬 性性說(shuō)說(shuō) 明明type該屬性指定了所要加載的插件對(duì)象的類型,可選值為“bean”和“applet”code指定了要加載的Java類文件的名稱。該名稱可包含擴(kuò)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高考物理總復(fù)習(xí)專題十三熱學(xué)第3講熱力學(xué)定律練習(xí)含答案
- 春運(yùn)期間全程出行安全手冊(cè)
- 《變壓器的簡(jiǎn)單介紹》課件
- 九年級(jí)歷史上冊(cè) 第6課 古代世界的戰(zhàn)爭(zhēng)與征服教案1 新人教版
- 2024-2025學(xué)年高中歷史 第二單元 古代歷史的變革(下)第4課 商鞅變法與秦的強(qiáng)盛(1)教學(xué)教案 岳麓版選修1
- 2024年秋八年級(jí)物理上冊(cè) 第一章 第4節(jié) 測(cè)量平均速度教案 (新版)新人教版
- 高中政治 第三專題 聯(lián)邦制、兩黨制、三權(quán)分立:以美國(guó)為例 第四框題 美國(guó)的利益集團(tuán)教案 新人教版選修3
- 2024年五年級(jí)語(yǔ)文上冊(cè) 第二單元 語(yǔ)文園地二配套教案 新人教版
- 2023六年級(jí)數(shù)學(xué)上冊(cè) 七 負(fù)數(shù)的初步認(rèn)識(shí)第1課時(shí) 認(rèn)識(shí)負(fù)數(shù)教案 西師大版
- 租賃工業(yè)吊扇合同范本(2篇)
- 初三【語(yǔ)文(統(tǒng)編)】《范進(jìn)中舉》中人物丑態(tài)的表現(xiàn)課件
- 2022年全國(guó)高中數(shù)學(xué)聯(lián)賽福建賽區(qū)預(yù)賽試卷參考答案
- 物業(yè)管理風(fēng)險(xiǎn)管控
- 電泳-厚-度-檢-測(cè)-記錄
- 治安巡防大隊(duì)績(jī)效考評(píng)細(xì)則
- 服務(wù)采購(gòu)詢比價(jià)表
- 衛(wèi)生院會(huì)議制度
- 小學(xué) 四年級(jí) 體育水平二 基本運(yùn)動(dòng)技能平衡篇 課件
- 巧克力簡(jiǎn)介課件
- 初中語(yǔ)文人教七年級(jí)上冊(cè)要拿我當(dāng)一挺機(jī)關(guān)槍使用
- 滬教版初中語(yǔ)文目錄(六到九年級(jí))
評(píng)論
0/150
提交評(píng)論