《Jaa程序設(shè)計(jì)基礎(chǔ)》第13章:JSP技術(shù)基礎(chǔ).ppt

上傳人:za****8 文檔編號(hào):16087060 上傳時(shí)間:2020-09-18 格式:PPT 頁(yè)數(shù):118 大?。?74KB
收藏 版權(quán)申訴 舉報(bào) 下載
《Jaa程序設(shè)計(jì)基礎(chǔ)》第13章:JSP技術(shù)基礎(chǔ).ppt_第1頁(yè)
第1頁(yè) / 共118頁(yè)
《Jaa程序設(shè)計(jì)基礎(chǔ)》第13章:JSP技術(shù)基礎(chǔ).ppt_第2頁(yè)
第2頁(yè) / 共118頁(yè)
《Jaa程序設(shè)計(jì)基礎(chǔ)》第13章:JSP技術(shù)基礎(chǔ).ppt_第3頁(yè)
第3頁(yè) / 共118頁(yè)

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《《Jaa程序設(shè)計(jì)基礎(chǔ)》第13章:JSP技術(shù)基礎(chǔ).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《Jaa程序設(shè)計(jì)基礎(chǔ)》第13章:JSP技術(shù)基礎(chǔ).ppt(118頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、第13章 JSP技術(shù)基礎(chǔ),學(xué)習(xí)重點(diǎn): 網(wǎng)絡(luò)應(yīng)用結(jié)構(gòu) J2EE的主體結(jié)構(gòu) JSP基本原理 JSP運(yùn)行環(huán)境配制 JSP基本語(yǔ)法 JSP基本指令與標(biāo)準(zhǔn)動(dòng)作 JSP的內(nèi)置對(duì)象的特點(diǎn)與使用,第13章 JSP技術(shù)基礎(chǔ),13.1 網(wǎng)絡(luò)應(yīng)用的系統(tǒng)結(jié)構(gòu) 13.1.1 兩層結(jié)構(gòu) 13.1.2 三層結(jié)構(gòu) 13.1.3 網(wǎng)絡(luò)應(yīng)用構(gòu)架中的一些補(bǔ)充概念 13.2 J2EE技術(shù)簡(jiǎn)介 13.2.1 J2EE的結(jié)構(gòu) 13.2.2 J2EE中的主要組件 13.3 JSP技術(shù)概述 13.3.1 JSP的技術(shù)原理 13.3.2 JSP與ASP

2、 13.3.3 JSP與Servlet的比較 13.3.4 JSP運(yùn)行環(huán)境的配置,,13.4 JSP基本語(yǔ)法 13.4.1 變量聲明與表達(dá)式 13.4.2 程序段 13.4.3 基本指令 13.4.4 將JSP與HTML結(jié)合起來(lái) 13.4.5 本節(jié)綜合實(shí)例 13.5 JSP標(biāo)準(zhǔn)動(dòng)作 13.5.1 jsp:include動(dòng)作 13.5.2 使用Java Bean 13.5.3 jsp:forward動(dòng)作 13.5.4 jsp:plugin動(dòng)作,,13.6 JSP的內(nèi)置對(duì)象 13

3、.6.1 對(duì)象的可見(jiàn)范圍 13.6.2 與輸入輸出有關(guān)的內(nèi)置對(duì)象 13.6.3 session對(duì)象 13.6.4 與上下文有關(guān)的內(nèi)置對(duì)象 13.6.5 用于錯(cuò)誤處理的內(nèi)置對(duì)象 13.6.6 與Servlet有關(guān)的內(nèi)置對(duì)象 13.7 練習(xí)題,13.1 網(wǎng)絡(luò)應(yīng)用的系統(tǒng)結(jié)構(gòu),基于網(wǎng)絡(luò)的應(yīng)用系統(tǒng)需要有服務(wù)器與客戶端的交互,需要通過(guò)網(wǎng) 絡(luò)傳輸數(shù)據(jù)才能實(shí)現(xiàn)應(yīng)用邏輯。而如何處理好服務(wù)器與客戶端的關(guān) 系,是網(wǎng)絡(luò)應(yīng)用要解決的核心問(wèn)題。,13.1.1 兩層結(jié)構(gòu),傳統(tǒng)的網(wǎng)絡(luò)應(yīng)用通常是建立在兩層結(jié)構(gòu)基礎(chǔ)上的,所謂兩層結(jié) 構(gòu),即指客戶機(jī)/服務(wù)器(Client/Server)

4、兩層,這類應(yīng)用系統(tǒng)往往 需要在客戶端安裝相應(yīng)的應(yīng)用程序,一旦應(yīng)用邏輯即客戶需求發(fā)生 變化,需要對(duì)客戶端程序進(jìn)行修改和升級(jí)。,13.1.2 三層結(jié)構(gòu),這三層服務(wù)包括: 第一層用戶服務(wù)層,提供信息交互、瀏覽定位、保證用戶界面的一致性和完整性。 第二層業(yè)務(wù)服務(wù)和其他的“中間”服務(wù),制訂維護(hù)和共享業(yè)務(wù)邏輯,從數(shù)據(jù)中生成需要的業(yè)務(wù)信息,保證業(yè)務(wù)信息的合法性和一致性,使原始數(shù)據(jù)和用戶需求的信息相互獨(dú)立。 第三層數(shù)據(jù)服務(wù),數(shù)據(jù)的定義,永久數(shù)據(jù)的存貯和檢索,數(shù)據(jù)一致性的保證。,三層結(jié)構(gòu)的特點(diǎn)如下:,把應(yīng)用邏輯從客戶機(jī)中分離出來(lái),使客戶端程序簡(jiǎn)單、標(biāo)準(zhǔn),使用方便,同時(shí)提供更豐富的交互式的信息發(fā)布形式。 系統(tǒng)維護(hù)

5、簡(jiǎn)單,擺脫了由于客戶有多個(gè)應(yīng)用而造成的復(fù)雜運(yùn)行環(huán)境的維護(hù)。 應(yīng)用邏輯的改變即不影響底層數(shù)據(jù),也不影響用戶的使用。,13.1.3 網(wǎng)絡(luò)應(yīng)用構(gòu)架中的一些補(bǔ)充概念,1. Web服務(wù)器 Web服務(wù)器即萬(wàn)維網(wǎng)服務(wù)器是瀏覽網(wǎng)頁(yè)需要的最根本的后臺(tái)支持,它能 夠接收來(lái)自客戶端(通常都是用戶使用的瀏覽器)的請(qǐng)求,并根據(jù)請(qǐng)求中的 某些信息做出相應(yīng)的應(yīng)答。 在訪問(wèn)Web頁(yè)面時(shí),通常情況下使用的是HTTP協(xié)議,所謂協(xié)議,可以認(rèn) 為它是交互雙方的一種約定,更形象地說(shuō)就像是服務(wù)器與客戶端之間的語(yǔ) 言,只有雙方使用同樣的語(yǔ)言,才能互相理解和進(jìn)行溝通。,幾種流行的Web服務(wù)器,Apache Microsoft IIS i

6、Planet Web Server(Netscape Enterprise Server) Novell NetWare WebServer Oracle WebServer IBM WebSphere WebSphere,2. HTTP協(xié)議,絕大多數(shù)的基于Web的J2EE Client都使用HTTP協(xié)議與J2EE服務(wù)器 通訊。HTTP協(xié)議定義了一個(gè)Client,它包括可以向服務(wù)器發(fā)送哪些 請(qǐng)求(Request)以及服務(wù)器可能返回什么樣的應(yīng)答(Reply)。每個(gè)請(qǐng) 求都包含一個(gè)URL(Uniform Resource Locator,統(tǒng)一資源定位), 它是一個(gè)字符串,它能夠惟一標(biāo)識(shí)一個(gè)Web組

7、件或者一個(gè)靜態(tài)對(duì) 象,如HTML頁(yè)面或者圖形文件。 J2EE服務(wù)器把HTTP請(qǐng)求轉(zhuǎn)換成HTTP請(qǐng)求對(duì)象,并將其發(fā)送給這個(gè) 請(qǐng)求中URL指向的Web組件,Web組件根據(jù)請(qǐng)求,生成一個(gè)相應(yīng)的應(yīng) 答對(duì)象,J2EE服務(wù)器再把這個(gè)應(yīng)答對(duì)象轉(zhuǎn)換成HTTP應(yīng)答,返回給 Client。,HTTP請(qǐng)求的常見(jiàn)方法如下:,get獲取URL指定的資源 head返回URL指定資源的頭部 post向服務(wù)器發(fā)送一組沒(méi)有長(zhǎng)度限制的數(shù)據(jù) put在URL指定的資源中存儲(chǔ)數(shù)據(jù) delete在URL指定的資源中刪除數(shù)據(jù) options返回服務(wù)器支持的HTTP方法 trace返回trace請(qǐng)求的頭部,HTTP應(yīng)答狀態(tài)代碼,HTTP應(yīng)答

8、包含有一個(gè)結(jié)果編號(hào)、頭部和應(yīng)答體三個(gè)部分,HTTP應(yīng)答有 以下一些常見(jiàn)結(jié)果編號(hào): 404找不到請(qǐng)求的資源 401請(qǐng)求需要HTTP認(rèn)證 403無(wú)訪問(wèn)該資源權(quán)限 500服務(wù)器內(nèi)部錯(cuò)誤 503服務(wù)器忙,3. 靜態(tài)網(wǎng)頁(yè)與動(dòng)態(tài)網(wǎng)頁(yè),HTML是編制網(wǎng)頁(yè)的基本語(yǔ)言,但它只能用于靜態(tài)的網(wǎng)頁(yè)。 動(dòng)態(tài)頁(yè)面技術(shù),系統(tǒng)的頁(yè)面不再是完全的HTML,而是在其中嵌入了很多從后臺(tái)數(shù)據(jù)庫(kù)取回的內(nèi)容。 例子:在靜態(tài)頁(yè)面中,假設(shè)用戶Teresa打開(kāi)一個(gè)頁(yè)面時(shí),由于這個(gè)頁(yè)面上所有的信息都是在寫(xiě)好的HTML文件中,所以它只能顯示出這樣的歡迎詞:“你好,尊敬的用戶!”,而有了動(dòng)態(tài)頁(yè)面技術(shù),Teresa可以有自己的賬號(hào)來(lái)登錄這個(gè)系統(tǒng),登錄

9、上之后,系統(tǒng)能夠自動(dòng)找到所有與這個(gè)用戶相關(guān)的個(gè)性化信息,這時(shí),系統(tǒng)的歡迎詞可能就是這樣的:“你好!Teresa,這是你第10次登錄本系統(tǒng),你上次登錄時(shí)間是2001年7月3日,你最近購(gòu)買的產(chǎn)品是:VCD小叮當(dāng)15集”等。,常見(jiàn)的動(dòng)態(tài)頁(yè)面技術(shù)有4種,即:,CGI(Common Gateway Interface) 公共網(wǎng)管接口,用戶可以使用不同的程序編寫(xiě)適合的CGI程序。 ASP(Active Server Pages) ASP是Microsoft公司開(kāi)發(fā)的一種類似HTML和Script(腳本)與CGI(Common GAteway Interface,通用網(wǎng)關(guān)接口)的結(jié)合體,它沒(méi)有提供自己專門的

10、編程語(yǔ)言,而是允許用戶使用包括VBScript和JavaScript等在內(nèi)的許多已有的腳本語(yǔ)言編寫(xiě)ASP的應(yīng)用程序。 PHP(Hypertext Preprocessor,超文本預(yù)處理器) PHP是一種易于學(xué)習(xí)和使用的服務(wù)器端腳本語(yǔ)言,是生成動(dòng)態(tài)網(wǎng)頁(yè)的工具之一。它是嵌入HTML文件的一種腳本語(yǔ)言。 JSP(Java Server Pages) JSP是由Sun Microsystem公司于1999年6月推出的新技術(shù),是基于Java Servlet以及整個(gè)Java體系的Web開(kāi)發(fā)技術(shù)。利用這一技術(shù)可以建立先進(jìn)、安全和跨平臺(tái)的動(dòng)態(tài)網(wǎng)站。,13.2 J2EE技術(shù)簡(jiǎn)介,Sun公司的J2EE體系結(jié)構(gòu)是針

11、對(duì)上述三層結(jié)構(gòu)中中間層的一個(gè)集 成框架,它能夠滿足低費(fèi)用、高可用性、高可靠性以及可擴(kuò)展性的 應(yīng)用需求。通過(guò)提供統(tǒng)一的開(kāi)發(fā)平臺(tái),J2EE降低了開(kāi)發(fā)多層應(yīng)用的 費(fèi)用和復(fù)雜性,同時(shí)提供對(duì)現(xiàn)有應(yīng)用程序集成強(qiáng)有力支持。利用 J2EE,各公司可以更為方便地在中間層加速分布式項(xiàng)目部署,而在 企業(yè)開(kāi)發(fā)工作中利用這種體系結(jié)構(gòu),開(kāi)發(fā)者將不必?fù)?dān)心系統(tǒng)的運(yùn)營(yíng) 環(huán)境,從而可以集中精力重視商業(yè)邏輯的設(shè)計(jì)和應(yīng)用的表示。,13.2.1 J2EE的結(jié)構(gòu),J2EE將電子商務(wù)應(yīng)用分為4個(gè)層次,其中,客戶層和企業(yè)信息系 統(tǒng)層分別對(duì)應(yīng)上面三層結(jié)構(gòu)的第一、三層,而Web層和業(yè)務(wù)層對(duì)應(yīng) 三層結(jié)構(gòu)的中間層。,1. 客戶層(Client Ti

12、er),在一個(gè)基于Web 的J2EE 應(yīng)用中,用戶的瀏覽器在客戶層中運(yùn)行,并從一個(gè)Web服務(wù)器上下載Web層中的靜態(tài)HTML 頁(yè)面或由JSP或Servlets生成的動(dòng)態(tài)HTML 頁(yè)面 。 在一個(gè)不基于Web 的J2EE 應(yīng)用程序可能是一個(gè)獨(dú)立客戶端程序,也可能是運(yùn)行在其他一些基于網(wǎng)絡(luò)的系統(tǒng)(如手持設(shè)備或汽車電話)中的Applet 程序。這些程序在不經(jīng)過(guò)Web 層就可以直接訪問(wèn)業(yè)務(wù)層中的組件,以實(shí)現(xiàn)業(yè)務(wù)邏輯。,2. Web層,J2EE Web 組件可以由JSP 頁(yè)面、基于Web 的Applets 以及顯示 HTML 頁(yè)面的Servlets 組成。 Web上的組件通常是依賴容器(Containe

13、r)來(lái)支持上述服務(wù)的。,3. 業(yè)務(wù)層,負(fù)責(zé)解決或滿足某個(gè)特定業(yè)務(wù)領(lǐng)域(如銀行、零售或金融業(yè))需要的業(yè)務(wù)邏輯,通常由一些特定的組件來(lái)完成,即Enterprise Java Beans(EJB)。 業(yè)務(wù)層有時(shí)候也被稱作Enterprise Java Beans層,業(yè)務(wù)層和Web 層一起構(gòu)成了三層結(jié)構(gòu)的中間層,是電子商務(wù)應(yīng)用的核心部分。,4. 企業(yè)信息系統(tǒng)層(EIS),企業(yè)信息系統(tǒng)層運(yùn)行企業(yè)信息系統(tǒng)軟件,并負(fù)責(zé)存儲(chǔ)企業(yè)數(shù) 據(jù)。,上述J2EE層次如圖所示,圖中的應(yīng)用一是基于非Web方式的,而應(yīng)用二是基于Web方式的。,13.2.2 J2EE中的主要組件,1. Servlet 它是一種簡(jiǎn)單高效動(dòng)態(tài)頁(yè)

14、面技術(shù),并且Servlet運(yùn)行在服務(wù)器端。運(yùn)行 在服務(wù)器端就意味著它能夠?yàn)橛脩籼峁┓浅V泛的功能和數(shù)據(jù),而不必受 客戶端資源的限制。 它是一種跨平臺(tái)的純Java服務(wù)器端程序,它擴(kuò)展了基于“請(qǐng)求應(yīng)答”機(jī)制的Web服務(wù)器的功能。 開(kāi)發(fā)Servlet除了有JDK之外,我們還需要有JSDK。,2. Java Beans,Java Beans也是一些Java類,它通常用來(lái)實(shí)現(xiàn)一些比較常用的簡(jiǎn)單功能,并可以很容易地被重用或者是插入其他應(yīng)用程序中去。 Java Beans的設(shè)計(jì)原則主要是針對(duì)其中的公共變量或者屬性以及公共方法而言的。,Java Beans的變量必須遵循的原則如下:,可讀寫(xiě)、只讀、只寫(xiě)。 簡(jiǎn)

15、單,也就是說(shuō)Java Beans的變量應(yīng)該是單值或者數(shù)組。,Java Beans的方法必須遵循的原則如下:,對(duì)于所有可讀的屬性,Beans必須提供相應(yīng)的方法以供外部讀取該屬性的值。例如,某個(gè)Bean擁有可讀公共屬性: public String name; 那么它還必須提供一個(gè)公共方法: public String getName(); 對(duì)于所有可寫(xiě)的屬性,Beans必須提供相應(yīng)的方法以供外部修改該屬性的值,例如,某個(gè)Bean擁有可寫(xiě)公共屬性: public String name; 那么它還必須提供一個(gè)公共方法: public setName(String newName); 運(yùn)

16、用在網(wǎng)絡(luò)上的Java Beans的主要任務(wù)就是在后臺(tái)處理業(yè)務(wù)邏輯,它可以和JSP或者Servlet等管理頁(yè)面的技術(shù)結(jié)合起來(lái)使用。,3. EJB,EJB(Enterprise JavaBeans)是一種非常復(fù)雜的Java Beans,它 必須定義一些特定的和客戶化的方法和屬性,來(lái)實(shí)現(xiàn)企業(yè)的核心業(yè) 務(wù)邏輯。,通常情況下,實(shí)現(xiàn)一個(gè)EJB需要三段Java程序,即:,遠(yuǎn)程接口(Remote Interface) 遠(yuǎn)程接口是一個(gè)Interface,用于定義客戶可能調(diào)用的與業(yè)務(wù)相關(guān)的方法,例如貨幣轉(zhuǎn)換、加入購(gòu)物車、購(gòu)買、付款等業(yè)務(wù)接口。 本地接口(Home Interface) 本地接口也是一個(gè)Interf

17、ace,用來(lái)為用戶提供創(chuàng)建、查找以及刪除一個(gè)EJB對(duì)象,即為客戶提供一個(gè)控制EJB的接口。 Enterprise Bean 它是一個(gè)Enterprise Bean類對(duì)象,是真正實(shí)現(xiàn)業(yè)務(wù)邏輯的地點(diǎn),即實(shí)現(xiàn)Remote Interface中定義的方法,以及與Home Interface中定義的方法中真正調(diào)用的方法,如初始化、退出等。,4. XML,XML(Extensible Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言)是一種用于表達(dá)和描述文本數(shù)據(jù)的語(yǔ)言,所有支持XML(API XML)應(yīng)用程序接口的程序或者工具都能識(shí)別用XML描述的數(shù)據(jù)。 XML在某種程度上和HTML有些相似,但兩者的最大不

18、同在于HTML是用來(lái)描述輸出的,而XML是用于描述數(shù)據(jù)的。 HTML中使用的tag都是固定的,也就是說(shuō)不能隨便擴(kuò)展,而XML可以通過(guò)一定的定義機(jī)制,靈活地使用自己喜歡的tag,而不受任何限制。,例如:, XML Bible Elliotte Rusty Harold 在這段描述中,有“book”和“auther”等自定義的tag,使數(shù)據(jù)的 語(yǔ)義變得非常清晰,13.3 JSP技術(shù)概述,JSP(Java Server Pages)是J2EE平臺(tái)中的一個(gè)重要組成部分, 是現(xiàn)今最流行的動(dòng)態(tài)網(wǎng)絡(luò)設(shè)計(jì)方法。JSP技術(shù)將服務(wù)器端Java和號(hào) 稱WYSIWYG(what you see

19、 is what you get,所見(jiàn)即所得)靜態(tài)頁(yè) 面技術(shù)HTML完美地結(jié)合起來(lái),使得網(wǎng)頁(yè)的外觀設(shè)計(jì)與隱藏在其后的 商業(yè)邏輯截然分開(kāi),而且它是與Web服務(wù)器和平臺(tái)都無(wú)關(guān)的網(wǎng)頁(yè)開(kāi) 發(fā)技術(shù),只要服務(wù)器支持Java,就能夠支持JSP。,JSP的主要優(yōu)勢(shì)有以下幾點(diǎn):,動(dòng)靜分離 它將Web頁(yè)面中有關(guān)輸出格式的表達(dá)部分與后端數(shù)據(jù)相關(guān)的業(yè)務(wù)邏輯部分有效的分離,使程序員從繁重的格式設(shè)計(jì)中解脫出來(lái),可以專心從事業(yè)務(wù)邏輯的實(shí)現(xiàn)工作,并可以將頁(yè)面設(shè)計(jì)工作真正交付給美工來(lái)完成,使應(yīng)用開(kāi)發(fā)效率空前提高。 簡(jiǎn)單易用 由于上述特性,JSP本身的結(jié)構(gòu)清晰,邏輯簡(jiǎn)單,可以很容易被非專業(yè)人員掌握,便于開(kāi)發(fā)工作的開(kāi)展。 可移植性

20、 由于Java本身的平臺(tái)無(wú)關(guān)性,基于Java的JSP技術(shù)也同樣繼承了可移植性的特點(diǎn),只要服務(wù)器端支持Java,JSP就可以運(yùn)行。,13.3.1 JSP的技術(shù)原理,1. JSP的實(shí)質(zhì) 首先來(lái)看一段JSP代碼,這段程序的功能是在屏幕上顯示當(dāng)前日期,其代 碼如圖中上部的方框所示。,其運(yùn)行結(jié)果如圖所示,這段代碼經(jīng)過(guò)編譯之后,會(huì)在服務(wù)器端變成下面這樣一段代碼,程序代碼 JSP是對(duì)Servlet的一種抽象,JSP并沒(méi)有增加任何本質(zhì)上不能用 Servlet實(shí)現(xiàn)的功能,但是,在JSP中編寫(xiě)靜態(tài)HTML更加方便,不必 再用 println語(yǔ)句來(lái)輸出每一行HTML代碼。,2. JSP的執(zhí)行過(guò)程,一個(gè)JSP程序的

21、執(zhí)行經(jīng)歷了初始化、服務(wù)和退出3個(gè)步驟,即依次調(diào)用了3 個(gè)方法:jspInit()和_jspService()以及jspDestroy(),其中,例子中的 JSP代碼都是被嵌入_jspService()這個(gè)方法中去的。JSP的執(zhí)行過(guò)程如圖 所示。,3. JSP的兩種訪問(wèn)模型,JSP有兩種不同的訪問(wèn)數(shù)據(jù)庫(kù)機(jī)制,也就是所謂的模型一(Model 1)和模型二(Model 2),這兩種模型的主要區(qū)別在于大量的客戶請(qǐng) 求在什么地方處理,因此,這兩種模型實(shí)質(zhì)上是為開(kāi)發(fā)人員提供了 兩種頁(yè)面程序開(kāi)發(fā)的模式。,(1) 模型一,JSP負(fù)責(zé)處理瀏覽器端發(fā)送來(lái)的客戶請(qǐng)求并負(fù)責(zé)向用戶返回結(jié)果,其中包 含的業(yè)務(wù)邏輯通過(guò)調(diào)用

22、Java Bean來(lái)實(shí)現(xiàn),而Java Bean負(fù)責(zé)與企業(yè)數(shù)據(jù)庫(kù) 的交互。其結(jié)構(gòu)如圖所示。,(2) 模型二,模型二是一種遵循MVC(Model-View-Controller,模型-視圖-控制者)模型的先進(jìn)思想。 模型二如圖所示。,13.3.2 JSP與ASP,這兩種技術(shù)的對(duì)比,13.3.3 JSP與Servlet的比較,Servlet向頁(yè)面輸出只能使用out.println()方法,而不能像在JSP中那 樣,把原封不動(dòng)的HTML標(biāo)記引入程序中。 例如前面HelloWorld的例子,輸出同樣的結(jié)果,如果使用JSP,則只需要下 面代碼就可以了: Hello World! Hello World!

23、); % ,13.3.4 JSP運(yùn)行環(huán)境的配置,常見(jiàn)的支持J2EE的部分Web服務(wù)器見(jiàn)表13.2 其中,“獨(dú)立”表示該軟件可以獨(dú)立作為Web服務(wù)器,而“插件”表示該軟件可以作為其他Web服務(wù)器,13.4 JSP基本語(yǔ)法,JSP程序通常由以下3部分組成: 靜態(tài)的HTML或XML JSP標(biāo)記 符合Java語(yǔ)法的程序段,13.4.1 變量聲明與表達(dá)式,1. 變量聲明 JSP變量聲明的語(yǔ)法格式如下: 例如: ,解釋:,凡是程序中要使用的變量和函數(shù)都必須事先聲明,否則編譯會(huì)出錯(cuò),而且建議在聲明變量時(shí)對(duì)其進(jìn)行初始化,否則,該變量的值為一個(gè)隨機(jī)數(shù)。 聲明必須以分號(hào)結(jié)尾。 在中可以一次性聲明多個(gè)變量,之間用

24、分號(hào)分隔。 聲明的內(nèi)容只在一個(gè)頁(yè)面內(nèi)有效。 也可以在這個(gè)地方做一個(gè)完整的類聲明。 例如: ,2. 表達(dá)式,JSP表達(dá)式的語(yǔ)法格式如下: 例如: ,,表達(dá)式通常用于計(jì)算并輸出變量值,在頁(yè)面設(shè)計(jì)中,經(jīng)常會(huì)把它嵌入在HTML中,來(lái)顯示與用戶相關(guān)的個(gè)性化信息,例如: 歡迎頁(yè)面 您好: 假設(shè)當(dāng)前用戶名為Tierney,則能夠看到如圖所示的結(jié)果,13.4.2 程序段,程序段是真正書(shū)寫(xiě)JSP腳本的部分,是我們編寫(xiě)JSP的主體,主要是通過(guò)一對(duì)tag包圍起來(lái)的部分。,1. 程序段語(yǔ)法結(jié)構(gòu),JSP程序段的語(yǔ)法結(jié)構(gòu)如下: 例如: 解釋: 程序段中只能包含符合Java語(yǔ)法的代碼,不允許出現(xiàn)HTML標(biāo)記、JS

25、P標(biāo)記、JSP指令等元素。 程序段中也可以對(duì)變量進(jìn)行聲明,就像在編寫(xiě)普通的Java程序一樣,但最好對(duì)變量進(jìn)行初始化,否則,有些服務(wù)器可能會(huì)出錯(cuò)。,2. 注釋,JSP注釋的語(yǔ)法結(jié)構(gòu)如下: 例如: 解釋: 注釋的部分在系統(tǒng)進(jìn)行編譯時(shí)將被忽略。 在瀏覽器端查看源文件時(shí),看不到用JSP注釋標(biāo)記注釋掉的語(yǔ)句,而使用HTML注釋標(biāo)記()注釋掉的,還能在客戶端的源文件中看到。 程序段中的注釋與Java語(yǔ)法相同。 在代碼中適當(dāng)增加注釋是提高程序可讀性的好習(xí)慣。,13.4.3 基本指令,JSP指令是一些發(fā)送給JSP引擎的消息,它們并不直接產(chǎn)生出可見(jiàn)的輸出內(nèi)容,而是告訴JSP引擎如何處理下面的JSP頁(yè)。 JS

26、P指令的語(yǔ)法格式如下: ,1. Page指令,page指令的語(yǔ)法結(jié)構(gòu)如下: 解釋: page指令用于給JSP文件中的全局屬性賦值,它的賦值動(dòng)作能夠作用于整個(gè)頁(yè)面,可以寫(xiě)在文件的任何位置,不過(guò)建議讀者最好寫(xiě)在最前面。,屬性:,import = “package.class”或 import =“package.class1,..,package.classN” 用于引入程序中需要使用的Java程序包,多個(gè)包之間用逗號(hào)。 例如: contenType=“MIME-Type” 或contentType=“MIME-Type;charset=Character-Set” 用于指定輸出的M

27、IME類型,默認(rèn)為“text/html”,默認(rèn)字符集為ISO-8859-1。 例如: 。,,isThreadSafe=“true | false” 如果值為“true”(默認(rèn))表示進(jìn)行普通的Servlet處理,多個(gè)請(qǐng)求將被一個(gè)Servlet實(shí)例并行處理。值為“false”時(shí)表示Servlet以單線程模式(SingleThreadModel)工作,一個(gè)Servlet同時(shí)只能為一個(gè)請(qǐng)求服務(wù),多個(gè)并行的請(qǐng)求可能會(huì)分配給不同的Servlet來(lái)處理。 session=“true | false” 如果值為“true”(默認(rèn))表示session是可用的,值為“false”時(shí)表示session不可用

28、。這時(shí)如果試圖使用與session相關(guān)的元素,會(huì)出現(xiàn)錯(cuò)誤。關(guān)于session的使用,我們?cè)诤竺孀髟敿?xì)介紹。 buffer=“sizekb | none” 該屬性的作用是為JspWriter,即out對(duì)象的輸出確定緩沖大小。默認(rèn)由服務(wù)器而定,一般是8KB。 autoflush=“true | false” 如果值為true(默認(rèn)),表示當(dāng)緩沖滿時(shí)將自動(dòng)清空;值為false時(shí),表示當(dāng)緩沖滿時(shí)遞出一個(gè)異常(exception),這個(gè)選項(xiàng)很少使用。當(dāng)buffer=“none”時(shí),此屬性的值不能為false。,,extends=“package.class” 該屬性指出將要生成的Servlet使用

29、哪個(gè)超類。使用該屬性應(yīng)當(dāng)十分小心,因?yàn)榉?wù)器可能已經(jīng)在用自定義的超類。 info = “message” 定義當(dāng)前JSP文件的一些相關(guān)信息,如作者、功能描述等,可以通過(guò)調(diào)用getServletInfo()方法得到它的值。 errorPage = “URL” 指定一個(gè)JSP頁(yè)面來(lái)處理任何當(dāng)前頁(yè)面并未處理的意外錯(cuò)誤。 isErrorPage =“true | false” 該屬性指示當(dāng)前頁(yè)面是否可以作為另一JSP頁(yè)面的錯(cuò)誤處理頁(yè)面。默認(rèn)值為false。 language=“java” 聲明腳本使用的語(yǔ)言,不過(guò),目前惟一的合法選項(xiàng)就是“java”。,2. include指令,include指

30、令用于在JSP文件轉(zhuǎn)換成Servlet時(shí)引入一個(gè)靜態(tài)文件,這個(gè)文件可以是JSP和HTML以及文本文件等。 Include指令的語(yǔ)法格式如下: ,,解釋:relativeURL指欲引入文件的相對(duì)路徑。 例如,許多網(wǎng)站的每個(gè)頁(yè)面都有一個(gè)同樣的導(dǎo)航條,這樣的話,同一份HTML代碼就可能重復(fù)出現(xiàn)在整個(gè)網(wǎng)站的每個(gè)頁(yè)面上。為了避免重復(fù),可以單獨(dú)編寫(xiě)一個(gè)頁(yè)面來(lái)描述這個(gè)導(dǎo)航條,然后利用include指令,把這個(gè)文件包含在每個(gè)主頁(yè)面里。這樣的文件即清晰又方便維護(hù)。例如: JSP語(yǔ)法 ,13.4.4 將JSP與HTML結(jié)合起來(lái),將JSP的Java風(fēng)格代碼嵌入HTML是非常簡(jiǎn)單的,基本上也沒(méi)有什么規(guī)則可言。 兩

31、者在編寫(xiě)頁(yè)面時(shí)可以隨意互相嵌入,但過(guò)于頻繁的轉(zhuǎn)換可能會(huì)影響頁(yè)面的響應(yīng)速度。,例13.2 JSP與HTML互相嵌入,其功能是在屏幕上顯示“hello”。 程序代碼 其運(yùn)行結(jié)果如圖所示,例13.3 用JSP獨(dú)立實(shí)現(xiàn)輸出功能,程序代碼 此程序的運(yùn)行結(jié)果如圖所示,13.4.5 本節(jié)綜合實(shí)例,例13.4 基本語(yǔ)法部分綜合實(shí)例 這個(gè)程序的功能是在屏幕上請(qǐng)用戶輸入姓名,然后向用戶問(wèn)好。 程序代碼 這個(gè)程序分成了兩個(gè).jsp頁(yè)面,程序的主要部分放在greeting.jsp中,其中的內(nèi)容包括顯示圖片、顯示用戶名輸入框以及提交按鈕,程序另外還提供了一個(gè)response.jsp,作用是將返回給用戶的問(wèn)候顯示出來(lái),主

32、程序通過(guò)include指令將這段.jsp頁(yè)面包含進(jìn)來(lái)。,,該程序的運(yùn)行結(jié)果如圖所示 在輸入框中輸入你的名字,按Submit按鈕,得到如圖所示的結(jié)果,其中的“Hello,Tierney!”就是由response.jsp顯示出來(lái)的,13.5 JSP標(biāo)準(zhǔn)動(dòng)作,JSP動(dòng)作是利用XML語(yǔ)法格式的標(biāo)記來(lái)控制Servlet引擎的行為。利用JSP動(dòng)作可以動(dòng)態(tài)地插入文件、重用Java Beans組件、把用戶重定向到另外的頁(yè)面和為Java插件生成HTML代碼。,13.5.1 jsp:include動(dòng)作,include動(dòng)作的目的是把其他文件的正文插入到這個(gè)程序中來(lái) 。 include動(dòng)作的語(yǔ)法 include動(dòng)作

33、的語(yǔ)法格式如下: flush= true / 或者 flush= true / + ,例13.5 include動(dòng)作,下面的JSP頁(yè)面把四則新聞?wù)迦胍粋€(gè)“Whats New ?”頁(yè)面。改變新聞?wù)獣r(shí)只需改變這4個(gè)文件,而主JSP頁(yè)面卻可以不進(jìn)行修改。 程序代碼,2. include動(dòng)作的屬性,include動(dòng)作的屬性如下: page=relativeURL| 被包含文件的相對(duì)路徑或者用一個(gè)表達(dá)式的值來(lái)代替表示這個(gè)相對(duì)路徑。 flush=“true” 通常情況下,此屬性值必須為true。 / 子句能夠?yàn)橐氲奈募鬟f參數(shù)。,13.5.2 使用Java Bean,jsp:useB

34、ean動(dòng)作 jsp:useBean動(dòng)作的語(yǔ)法格式如下: type= package. class /| other elements ,,解釋: 該動(dòng)作用來(lái)裝載一個(gè)將在JSP頁(yè)面中使用的Java Bean。這個(gè)功能非常有用,因?yàn)樗沟梦覀兛梢园l(fā)揮Java組件重用的優(yōu)勢(shì)。其含義是創(chuàng)建一個(gè)package.class的實(shí)例,然后把它綁定到變量id上,并使用scope定義Bean的作用范圍。 屬性: id=“beanInstanceName” 用來(lái)綁定Bean實(shí)例的變量。 class|type=“package.class” 表明該Bean是對(duì)哪個(gè)類的實(shí)例化。 scope= “page |re

35、quest| session| application” 表示該Bean的有效范圍。,2. jsp:setProperty動(dòng)作,jsp:setProperty動(dòng)作的語(yǔ)法格式如下: / 解釋: 這個(gè)動(dòng)作的含義就是使用Bean中相應(yīng)的set()方法設(shè)置一個(gè)或多個(gè)屬性的值,值的來(lái)源是通過(guò)value屬性明確給出,或者利用Request對(duì)象中相應(yīng)的參數(shù)。,屬性:,name=“beanInstanceName” 這個(gè)屬性是必須的,用來(lái)表明對(duì)哪個(gè)Bean實(shí)例執(zhí)行下面的動(dòng)作,這個(gè)值和jsp:useBean中定義的id必須對(duì)應(yīng)起來(lái),包括大小寫(xiě)都必須一致,否則會(huì)導(dǎo)致錯(cuò)誤。 property=“*”或者“p

36、ropertyName” 這個(gè)屬性是必須的,它表示要設(shè)置哪個(gè)屬性。如果property的值是“*”,表示所有名字和Bean屬性名字匹配的請(qǐng)求中的參數(shù)都將被傳遞給相應(yīng)的屬性set()方法。 value=“string | ” 這個(gè)屬性是可選的,它用來(lái)指定Bean屬性的值。字符串?dāng)?shù)據(jù)會(huì)在目標(biāo)類中通過(guò)標(biāo)準(zhǔn)的valueOf()方法自動(dòng)轉(zhuǎn)換成數(shù)字、boolean,Boolean,byte,Byte,char和Character。 param=“parameterName” 這個(gè)屬性是可選的,它指定用哪個(gè)請(qǐng)求參數(shù)作為Bean屬性的值。如果當(dāng)前請(qǐng)求沒(méi)有參數(shù),則什么事情也不做,系統(tǒng)不會(huì)把null傳遞給B

37、ean屬性的set()方法。,3. jsp:getProperty動(dòng)作,jsp:getProperty動(dòng)作的語(yǔ)法格式如下: 解釋: 這個(gè)動(dòng)作提取指定Bean屬性的值,轉(zhuǎn)換成字符串,然后輸出。,屬性:,name=“beanInstanceName” 這個(gè)屬性是必須的,用來(lái)表明對(duì)哪個(gè)Bean實(shí)例執(zhí)行下面的動(dòng)作,這個(gè)值和jsp:useBean中定義的id必須對(duì)應(yīng)起來(lái),包括大小寫(xiě)都必須一致,否則會(huì)導(dǎo)致錯(cuò)誤。 property=“propertyName” 這個(gè)屬性是必須的,它表示要獲取哪個(gè)屬性的值。,4. 實(shí)例,例13.6 使用Java Bean 下面是一個(gè)很簡(jiǎn)單的例子,它的功能是裝載一個(gè)Be

38、an,然后設(shè)置/讀取它的message屬性。 程序代碼 其運(yùn)行結(jié)果如圖所示,例13.7 利用請(qǐng)求變量為Bean設(shè)置屬性,程序代碼 其運(yùn)行結(jié)果如圖所示 在文本框中輸入“Hello guys”,按Submit按鈕, 便得到如圖所示的結(jié)果,13.5.3 jsp:forward動(dòng)作,jsp:forword動(dòng)作的語(yǔ)法格式如下: /| / 解釋: 該動(dòng)作把請(qǐng)求轉(zhuǎn)到另外的頁(yè)面,jsp: forward以下的代碼將不能被執(zhí)行。,屬性:,page=“relativeURL | ” 該屬性包含的是一個(gè)相對(duì)URL,其值即可以直接給出,也可以在請(qǐng)求的時(shí)候動(dòng)態(tài)計(jì)算。 param 向動(dòng)態(tài)文件發(fā)送一個(gè)或多個(gè)

39、參數(shù),如果使用了這個(gè)屬性,前面page屬性定向的必須是能夠處理這些參數(shù)的動(dòng)態(tài)文件。,例13.8 頁(yè)面跳轉(zhuǎn),在這個(gè)例子中,有兩個(gè).jsp頁(yè)面程序,第一個(gè)頁(yè)面的任務(wù)就是跳轉(zhuǎn)到第二個(gè)頁(yè)面。 myForward/login.jsp第一個(gè)頁(yè)面的源代碼如下: 程序代碼 MyForward/userData.jsp第二個(gè)頁(yè)面的源代碼如下: 程序代碼 這個(gè)例子的運(yùn)行結(jié)果如圖所示,實(shí)際應(yīng)用中,前面的頁(yè)面總需要做一些處理,為后面的頁(yè)面服務(wù),下面我們就看看從第一個(gè)頁(yè)面向第二個(gè)頁(yè)面如何發(fā)送參數(shù)。,程序代碼 大家注意看,在login.jsp中,在向userData.jsp跳轉(zhuǎn)時(shí),發(fā)送了這樣一個(gè)參數(shù),其參數(shù)名是nam

40、e,值是Tierney。 下面看userData.jsp是如何拿到這個(gè)參數(shù)的。 程序代碼 在這個(gè).jsp頁(yè)面程序中,程序通 過(guò)request.getParameter就可以 得到前面頁(yè)面發(fā)送過(guò)來(lái)的參數(shù) 值。其運(yùn)行結(jié)果如圖所示,13.5.4 jsp:plugin動(dòng)作,jsp:plugin動(dòng)作的語(yǔ)法格式如下: / + text message for user 解釋: jsp:plugin動(dòng)作用來(lái)根據(jù)瀏覽器的類型,插入通過(guò)Java插件運(yùn)行Java Applet所必須的object或embed元素。,屬性:,type = “bean | applet” 插件將執(zhí)行的對(duì)象的類型,用戶必須

41、在Bean或applet中指定一個(gè),因?yàn)?,這個(gè)屬性沒(méi)有默認(rèn)值。 class=“classFileName” 插件將執(zhí)行的Java類文件的名稱,在名稱中必須包含擴(kuò)展名。且此文件必須在用“codebase”屬性指明的目錄下。 codebase=“classFileDirectoryName” 包含插件將運(yùn)行的Java類的目錄或指向這個(gè)目錄的路徑,默認(rèn)為此JSP文件的 路徑。 name=“instanceName” Bean或 applet的實(shí)例的名稱,使得被同一個(gè)JSP文件調(diào)用的Bean或 applet之間的通信成為可能。 archive = “URLToArchive,” 以逗號(hào)分隔的路

42、徑名列表,是那些用以codebase指定的目錄下的類裝載器預(yù)裝載的存檔文件所在的路徑名。,例13.9 在頁(yè)面中嵌入applet,程序代碼 運(yùn)行結(jié)果,13.6 JSP的內(nèi)置對(duì)象,所謂內(nèi)置對(duì)象,是JSP引擎提供的一些不需要事先聲明和實(shí)例化就可以使用的一些對(duì)象。它通常是由Web容器創(chuàng)建的,其中包含了許多與特定用戶請(qǐng)求、頁(yè)面或者應(yīng)用程序相關(guān)的信息。,13.6.1 對(duì)象的可見(jiàn)范圍,Page 所謂page,就是指在本頁(yè)內(nèi)可見(jiàn),要利用本頁(yè)可見(jiàn),就要使用pageContext對(duì)象。例如,我們來(lái)看這樣兩段程序,在第一個(gè).jsp程序中,在pageContext中存儲(chǔ)兩個(gè)參數(shù),并在本頁(yè)內(nèi)打印,然后跳轉(zhuǎn)到另外一個(gè)頁(yè)面

43、中,再打印這兩個(gè)參數(shù)。,例13.10 page的可見(jiàn)范圍,程序代碼 這段代碼在pageContext中設(shè)置了name和password兩個(gè)變量,然后在這頁(yè)打印出如圖所示的結(jié)果 在這個(gè)頁(yè)面中,兩個(gè)參數(shù)的值都能取到,然后,單擊next page按鈕,跳轉(zhuǎn)到下一頁(yè),再打印這兩個(gè)參數(shù),結(jié)果如圖所示,2. request,request范圍是指在一個(gè).jsp頁(yè)面的請(qǐng)求到另外一個(gè).jsp頁(yè)面請(qǐng)求時(shí)有效,然后就失效了,也就是說(shuō)在有請(qǐng)求關(guān)系的頁(yè)面之間有效。例如,我們來(lái)看兩段程序,在第一個(gè)程序中,我們?yōu)閞equest設(shè)置兩個(gè)變量,然后,到第一頁(yè)請(qǐng)求的第二個(gè)頁(yè)面中看結(jié)果。,例13.11 request的可見(jiàn)范圍,

44、程序代碼 這段代碼給兩個(gè)request參數(shù)賦值,然后跳轉(zhuǎn)到第二頁(yè)。 程序代碼 在第二頁(yè)中,直接打印兩個(gè)參數(shù)的值,其執(zhí)行結(jié)果如圖所示。,3. session與application,session的可見(jiàn)范圍在于一個(gè)用戶從登錄到退出之間全部可見(jiàn),包括正常退出或者由于其他原因,如超時(shí)等非正常結(jié)束用戶與服務(wù)器之間的會(huì)話。 application是所有可見(jiàn)范圍中范圍最大的,其范圍是整個(gè)應(yīng)用程序,即從為某個(gè)應(yīng)用而服務(wù)的服務(wù)器啟動(dòng)直到它關(guān)閉為止。,13.6.2 與輸入輸出有關(guān)的內(nèi)置對(duì)象,與輸入輸出有關(guān)的內(nèi)置對(duì)象主要有3個(gè),即request和response以及out,前一個(gè)用于存儲(chǔ)與上下文相關(guān)的屬性-值對(duì),

45、而后兩個(gè)用于從服務(wù)器向客戶端輸出信息。,1. request對(duì)象,request是javax.servlet.HttpServletRequest的子類,它包含了在客戶端與服務(wù)器之間傳送的數(shù)據(jù),即所有客戶端對(duì)服務(wù)器的請(qǐng)求信息,如請(qǐng)求的來(lái)源、頭信息(header)和cookies以及一些與請(qǐng)求有關(guān)的參數(shù)值等。,HttpServletRequest定義了訪問(wèn)如下信息的方法:,參數(shù) 主要是那些用于在客戶端與Servlet之間傳送信息的數(shù)據(jù)。 對(duì)象屬性 主要用于在Servlet容器與Servlet之間,或者協(xié)作的Servlet之間傳遞信息的數(shù)據(jù)。 關(guān)于客戶端與Servlet之間通訊協(xié)議的信息。 本

46、地信息,要訪問(wèn)客戶端請(qǐng)求數(shù)據(jù),可以使用getParameter()方法,它能夠返回一個(gè)命名參數(shù)的值,如果參數(shù)是多值的,如一個(gè)CheckBox,就需要使用getParameterValues()方法來(lái)獲取它的值,它會(huì)返回這個(gè)命名參數(shù)值組成的數(shù)組。這兩個(gè)方法的語(yǔ)法分別為:,public java.lang.String getParameter(java.lang.Stringname) public java.lang.String getParameterValues(java.lang.Stringname) 其中,它們的調(diào)用參數(shù)都是要獲取其值的參數(shù)的名字,第一個(gè)方法的返回值是這個(gè)參數(shù)值的字

47、符串型返回值;而第二個(gè)方法返回的是這個(gè)多值參數(shù)所有值組成的字符串型數(shù)組。,我們來(lái)看一段程序,截取自一個(gè)書(shū)店的例子。,catalog.jsp的部分源代碼如下: 在程序中使用了request.getParameter(Add)來(lái)獲取request中的一個(gè)變量add的值,這個(gè)值是顧客加入購(gòu)物車的書(shū)的編號(hào),然后利用這個(gè)編號(hào)將書(shū)真正加入購(gòu)物車。其中,request變量add的值是在它的上一個(gè)頁(yè)面bookdetails.jsp中傳過(guò)來(lái)的。 bookdetails.jsp的部分源代碼如下: /catalog?Add=Add To Your Shopping Cart ,利用request獲取整個(gè)輸入流,然

48、后自己在對(duì)整個(gè)流進(jìn)行分析,得到自己想要的值。,具體方法是,如果要讀取字符數(shù)據(jù),使用getReader()方法,它將返回一個(gè)BufferredReader類型的變量,如果要讀取二進(jìn)制數(shù)據(jù),使用getInputStream()方法,它將返回一個(gè)ServletInputStream類型的結(jié)果。,,request主要處理的是基于HTTP協(xié)議的請(qǐng)求,在JSP環(huán)境下,一個(gè)HTTP請(qǐng)求也可以說(shuō)是一個(gè)HTTP請(qǐng)求URL 其格式通常為 http://host:portrequest path?query string 其中,request path一般由3部分組成: context path:是Servlet

49、應(yīng)用程序的根所處的上下文環(huán)境,通常由一連串的“/” 組成。 servlet path:激活這個(gè)請(qǐng)求的組件別名,其路徑通常由“/”開(kāi)始。 path info:是請(qǐng)求路徑中出了上述兩部分之外的路徑描述。,例如:假設(shè)context path為/catalog,那么各組成部分的取值分別見(jiàn)表,,query string通常由參數(shù)及其取值這樣的對(duì)子組成,生成query string的方法有兩個(gè),一是由Servlet生成Web頁(yè)面時(shí)生成。 如一個(gè)HTML頁(yè)面在生成的時(shí)候,含有這樣一個(gè)鏈接:Add To Cart,那么程序就可以利用上面講到的getParameter()方法將參數(shù)add的值取到。 另外,qu

50、ery string還可以在表單中使用隱藏域添加到URL后面,待表單以get()方法提交時(shí),就被傳送到下一頁(yè)去了。,另外,request中還有一些非常有用的方法,請(qǐng)參見(jiàn)下表,,2. response對(duì)象,response是與request相對(duì)的一個(gè)對(duì)象,其作用在于向客戶端做出響應(yīng)。所有的response對(duì)象都實(shí)現(xiàn)了ServletResponse接口,這個(gè)接口定義了一些方法,允許做以下的事情: 獲取從服務(wù)器向客戶端發(fā)送的輸出流。 指示由response返回信息的類型,例如text/html。 指明是否對(duì)輸出流做緩沖,默認(rèn)情況下,所有輸出流會(huì)馬上被發(fā)送到客戶端。 設(shè)置一些本地信息。,例如,在書(shū)店的

51、例子中,bookDetailsServlet.java中使用了下述代碼獲取一本書(shū)的詳細(xì)信息:,程序代碼 程序中使用緩沖區(qū)的目的是,如果在應(yīng)答信息組成過(guò)程中發(fā)生了錯(cuò)誤,那么由于已經(jīng)輸出的信息還在緩沖區(qū)里面,就不會(huì)被客戶看到,這時(shí)候只要將錯(cuò)誤信息覆蓋到緩沖區(qū)就可以了。否則用戶可能會(huì)看到一部分正常的返回信息,后面緊跟著錯(cuò)誤信息。,3. out對(duì)象,javax.servlet.jsp.JspWriter類對(duì)象,用于在服務(wù)器與客戶端之間傳遞信息的輸出流。,13.6.3 session對(duì)象,所謂(Session)會(huì)話就是指從用戶登錄系統(tǒng)到其主動(dòng)退出或者因?yàn)槌瑫r(shí)而被系統(tǒng)結(jié)束其訪問(wèn)之間的全過(guò)程。 1. ses

52、sion的應(yīng)用背景 Servlet提供了一種與眾不同的HttpSession API方案。HttpSession API是一個(gè)基于cookie或者URL改寫(xiě)機(jī)制的高級(jí)會(huì)話狀態(tài)跟蹤接口 。,2. session的使用,主要的操作包括:查看和當(dāng)前請(qǐng)求關(guān)聯(lián)的會(huì)話對(duì)象,必要的時(shí)候創(chuàng)建新的會(huì)話對(duì)象,查看與某個(gè)會(huì)話相關(guān)的信息,在會(huì)話對(duì)象中保存信息,以及會(huì)話完成或中止時(shí)釋放會(huì)話對(duì)象。 (1)獲取當(dāng)前請(qǐng)求的會(huì)話對(duì)象 獲取當(dāng)前請(qǐng)求的會(huì)話對(duì)象可以通過(guò)調(diào)用HttpServletRequest的getSession()方法實(shí)現(xiàn)。 具體語(yǔ)法如下: HttpSession session = request.getSe

53、ssion(true);,(2)獲取和設(shè)置session變量,獲取某個(gè)session變量的值可以使用getAttribute()方法 ,它返回的是一個(gè)object對(duì)象。 setAttribute()方法可以設(shè)置session變量,這個(gè)方法需要兩個(gè)參數(shù),即變量的名稱name和變量的值value,它們分別是String和Object類型。,(3)獲取與session自身相關(guān)的信息,getID 返回會(huì)話的惟一標(biāo)識(shí)。 isNew 如果客戶(瀏覽器)還沒(méi)有綁定到會(huì)話則返回true,通常意味著該會(huì)話剛剛創(chuàng)建,而不是引用自客戶端的請(qǐng)求。對(duì)于原來(lái)已存在的會(huì)話,返回值為false。 getCreationT

54、ime 該方法返回建立會(huì)話的以毫秒計(jì)的時(shí)間,從1970.01.01(GMT)算起。 getLastAccessedTime 該方法返回客戶最后一次發(fā)送請(qǐng)求的以毫秒計(jì)的時(shí)間,從1970.01.01(GMT)算起。 getMaxInactiveInterval 返回以秒計(jì)的最大時(shí)間間隔,如果客戶請(qǐng)求之間的間隔不超過(guò)該值,Servlet引擎將保持會(huì)話有效。負(fù)數(shù)表示會(huì)話永遠(yuǎn)不會(huì)超時(shí)。,3. 會(huì)話的生命周期,session是有一定的生命周期的,一個(gè)session可以用isNew()方法來(lái)判斷它是否為一個(gè)新的session。 session在一段時(shí)間內(nèi)沒(méi)有發(fā)生任何動(dòng)作,就會(huì)自動(dòng)失效。 session

55、的失效時(shí)間是可以通過(guò)程序設(shè)置的。,4. 實(shí)例,例13.12 顯示會(huì)話信息 下面這個(gè)例子生成一個(gè)Web頁(yè)面,在該頁(yè)面中顯示有關(guān)當(dāng)前會(huì)話的信息。 程序代碼 在程序中,我們判斷了該session是否為新的會(huì)話,然后,獲取了它的ID、創(chuàng)建時(shí)間和上次訪問(wèn)時(shí)間。其執(zhí)行結(jié)果如圖所示。,例13.13 設(shè)置與獲取信息,這是一個(gè)在兩個(gè)頁(yè)面之間利用session變量傳遞信息的例子 程序代碼 在Login.jsp中,我們利用session.setAttribute給變量username賦值為Tierney,在這個(gè)頁(yè)面中,單擊login按鈕,就會(huì)到下一頁(yè)。 程序代碼 在這一頁(yè)中,我們?nèi)〕鰑sername的值并顯示在

56、頁(yè)面上。這兩頁(yè)的執(zhí)行結(jié)果如圖所示。,例13.14 綜合實(shí)例購(gòu)物車,在購(gòu)物車程序中有兩個(gè)文件,一是提供商品列表的靜態(tài)頁(yè)面Carts.html,另外一個(gè)是提供購(gòu)物車處理的動(dòng)態(tài)頁(yè)面shoppingCart.jsp。 Carts.html的源代碼 shoppingCart.jsp的源代碼 其執(zhí)行結(jié)果如圖所示,13.6.4 與上下文有關(guān)的內(nèi)置對(duì)象,所謂上下文,我們可以理解成為一定范圍內(nèi)程序執(zhí)行的環(huán)境。 1. application application實(shí)現(xiàn)了javax.servlet.ServletContext接口,它的主要功能在于獲得或者修改Servlet的一些設(shè)置信息,包括: 初始化參數(shù) 與W

57、eb環(huán)境相關(guān)的資源 參數(shù)-值對(duì) 記錄日志,例13.15 利用application對(duì)象限制用戶訪問(wèn),在這個(gè)例子中,我們利用application變量來(lái)限制訪問(wèn)網(wǎng)站的用戶IP地址。 我們有一個(gè)文件List.props,用來(lái)存儲(chǔ)允許訪問(wèn)的IP地址如下: IP-Acess1 = 10.1.1.1 IP-Acess2 = 10.1.1.2,然后,利用兩個(gè).jsp程序來(lái)進(jìn)行限制。第一個(gè)程序setProperty.jsp,設(shè)置允許訪問(wèn)的列表,第二個(gè)程序,從列表中讀取允許訪問(wèn)的IP地址,然后判斷用戶是否可以進(jìn)入。,setProperty.jsp的源代碼 GetProperty.jsp的源代碼 在這段程序

58、中,我們先獲取允許的IP地址,如果和本機(jī)的IP不匹配,就輸出錯(cuò)誤信息,否則跳轉(zhuǎn)到nextPage.jsp頁(yè)。 由于我們使用的是localhost,其IP為127.0.0.1,所以必然不匹配,因此得到如圖所示的結(jié)果。,2. pageContext,pageContext是javax.servlet.jsp.PageContext類變量,它是 一個(gè)抽象類,主要用來(lái)維護(hù)JSP頁(yè)面的上下文。利用pageContext, 可以方便地訪問(wèn)一個(gè)JSP頁(yè)面中所有的命名變量,同時(shí),它還提供 了訪問(wèn)頁(yè)面屬性的方法。,它的主要功能如下:,提供了單一API用于管理各類有一定可見(jiàn)范圍的對(duì)象。 提供了一些方便的訪問(wèn)公共對(duì)

59、象的方法。 提供了獲取JspWriter的機(jī)制。 提供了管理session使用方法的機(jī)制。 提供了將頁(yè)面指令屬性開(kāi)放給腳本環(huán)境的機(jī)制。 提供了將當(dāng)前請(qǐng)求傳遞給應(yīng)用程序內(nèi)其他組件的方法。 提供了錯(cuò)誤處理機(jī)制。,它還提供了一系列方便地訪問(wèn)內(nèi)置對(duì)象的方法,如,getOut(),getException(),getPage(),getRequest(),getResponse(),getSession(),getServletConfig()和getServletContext()。,13.6.5 用于錯(cuò)誤處理的內(nèi)置對(duì)象,用于錯(cuò)誤處理的內(nèi)置對(duì)象值有一個(gè)exception,在程序發(fā)生錯(cuò)誤的 時(shí)候,可以利

60、用這個(gè)對(duì)象獲取一些錯(cuò)誤信息。不過(guò)在使用它之前, 必須在page指令中做如下聲明: 否則,可能產(chǎn)生編譯錯(cuò)誤。,13.6.6 與Servlet有關(guān)的內(nèi)置對(duì)象,與Servlet有關(guān)的內(nèi)置對(duì)象有以下兩個(gè): page 表示Servlet本身,即當(dāng)JSP頁(yè)面被編譯之后的Servlet,實(shí)際上它很少被使用,它在某種程度上有點(diǎn)像this變量,我們可以用它的getServletInfo()方法來(lái)獲取一些與Servlet有關(guān)的信息。 config 其中存放著一些Servlet初始的數(shù)據(jù)結(jié)構(gòu),config對(duì)象和page對(duì)象一樣,都很少被使用,它提供了getInitParameterNames()和getInitPa

61、rameter()兩個(gè)方法來(lái)獲取Servlet的初始參數(shù),另外,還可以使用getServletName()方法來(lái)獲取JSP頁(yè)面被編譯后的Servlet的名字。,13.7 練 習(xí) 題,1. 選擇題 (1)網(wǎng)絡(luò)應(yīng)用的3層結(jié)構(gòu)指哪些層? A.Web層 B.用戶層 C.業(yè)務(wù)層 D.數(shù)據(jù)層,,(2)哪些不是J2EE結(jié)構(gòu)中的層次? A.Web層 B.EIS層(Enterprise Information System企業(yè)信息系統(tǒng)層) C.網(wǎng)絡(luò)層 D.會(huì)話層,2. 編程題,(1)在自己的機(jī)器上安裝并啟動(dòng)Tomcat服務(wù)器,試運(yùn)行例子中的JSP程序,檢驗(yàn)是否安裝正確。 (2)將我們給出的用JSP編寫(xiě)的HelloWorld程序編輯成HelloWorld.jsp文件,放到http://localhost:8080/examples/jsp/程序目錄/下面,在瀏覽器上執(zhí)行,觀察其執(zhí)行 結(jié)果。,

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!