




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1第第10章章 JSP與與Servlet編程編程10.1 Servlet介紹介紹10.2 處理客戶端請求處理客戶端請求10.3 Servlet編程接口編程接口10.4 Servlet部署部署10.5 Servlet應(yīng)用實例應(yīng)用實例210.1 Servlet介紹介紹10.1.1 什么是什么是Servlet10.1.2 Servlet的技術(shù)特點(diǎn)的技術(shù)特點(diǎn)10.1.3 Servlet與與JSP的區(qū)別的區(qū)別10.1.4 Servlet在在Web項目中的作用項目中的作用10.1.5 Servlet生命周期生命周期10.1.6 開發(fā)一個簡單的開發(fā)一個簡單的Servlet310.1.1 什么是什么是Serv
2、letServlet是在服務(wù)器上運(yùn)行的是在服務(wù)器上運(yùn)行的Java程序。與傳程序。與傳統(tǒng)的從命令行啟動的統(tǒng)的從命令行啟動的Java應(yīng)用程序不同,應(yīng)用程序不同,Servlet由由Web服務(wù)器進(jìn)行加載,該服務(wù)器進(jìn)行加載,該Web服務(wù)服務(wù)器必須包含支持器必須包含支持Servlet的的Java虛擬機(jī)虛擬機(jī) 。4Servlet是用是用Java編寫的服務(wù)器端程序,運(yùn)行于請求編寫的服務(wù)器端程序,運(yùn)行于請求/響應(yīng)模式的響應(yīng)模式的Web服務(wù)器中。服務(wù)器中。Servlet本身是一個本身是一個Java類,可以動態(tài)地擴(kuò)展服務(wù)器的能力。類,可以動態(tài)地擴(kuò)展服務(wù)器的能力。JSP是以另外一種方式實現(xiàn)的是以另外一種方式實現(xiàn)的Se
3、rvlet,Servlet是是JSP的早期版本,在的早期版本,在JSP中,更加注重頁面的表現(xiàn),而中,更加注重頁面的表現(xiàn),而在在Servlet中則更注重業(yè)務(wù)邏輯的實現(xiàn)。因此,當(dāng)編中則更注重業(yè)務(wù)邏輯的實現(xiàn)。因此,當(dāng)編寫的頁面顯示效果比較復(fù)雜時,首選是寫的頁面顯示效果比較復(fù)雜時,首選是JSP?;蛘??;蛘咴陂_發(fā)過程中,在開發(fā)過程中,HTML代碼經(jīng)常發(fā)生變化,而代碼經(jīng)常發(fā)生變化,而Java代碼則相對比較固定時,可以選擇代碼則相對比較固定時,可以選擇JSP。而我們在。而我們在處理業(yè)務(wù)邏輯時,首選則是處理業(yè)務(wù)邏輯時,首選則是Servlet。同時,同時,JSP只能處理瀏覽器的請求,只能處理瀏覽器的請求,而而S
4、ervlet則可則可以處理一個客戶端的應(yīng)用程序請求。因此,以處理一個客戶端的應(yīng)用程序請求。因此,Servlet加強(qiáng)了加強(qiáng)了Web服務(wù)器的功能。服務(wù)器的功能。5Servlet的任務(wù)是:的任務(wù)是:(1)讀取用戶發(fā)送的數(shù)據(jù))讀取用戶發(fā)送的數(shù)據(jù)這些數(shù)據(jù)通常在這些數(shù)據(jù)通常在Web頁面的表單中輸入。頁面的表單中輸入。(2)查詢)查詢Http請求中包含的任何其他請求信息請求中包含的任何其他請求信息這些信息包括瀏覽器的功能、這些信息包括瀏覽器的功能、Cookie、發(fā)送請求的客戶端的主機(jī)、發(fā)送請求的客戶端的主機(jī)名等信息。名等信息。(3)產(chǎn)生結(jié)果)產(chǎn)生結(jié)果Servlet訪問數(shù)據(jù)庫,調(diào)用其他組件產(chǎn)生計算結(jié)果。訪問數(shù)
5、據(jù)庫,調(diào)用其他組件產(chǎn)生計算結(jié)果。(4)在文檔中設(shè)置結(jié)果的格式)在文檔中設(shè)置結(jié)果的格式將計算結(jié)果等嵌入到將計算結(jié)果等嵌入到Http頁面。頁面。(5)設(shè)置合適的)設(shè)置合適的Http響應(yīng)參數(shù)響應(yīng)參數(shù)告訴瀏覽器返回的文檔類型,設(shè)置告訴瀏覽器返回的文檔類型,設(shè)置Cookie和緩存參數(shù)等。和緩存參數(shù)等。(6)將文檔返回給客戶端)將文檔返回給客戶端可以以文本(可以以文本(HTML)、二進(jìn)制格式或者壓縮格式發(fā)送文檔。)、二進(jìn)制格式或者壓縮格式發(fā)送文檔。610.1 Servlet介紹介紹10.1.1 什么是什么是Servlet10.1.2 Servlet的技術(shù)特點(diǎn)的技術(shù)特點(diǎn)10.1.3 Servlet與與JSP
6、的區(qū)別的區(qū)別10.1.4 Servlet在在Web項目中的作用項目中的作用10.1.5 Servlet生命周期生命周期10.1.6 開發(fā)一個簡單的開發(fā)一個簡單的Servlet710.1.2 Servlet的技術(shù)特點(diǎn)的技術(shù)特點(diǎn)1有效性 (有改進(jìn))(有改進(jìn))在使用傳統(tǒng)的在使用傳統(tǒng)的CGI時,人們需為每一項時,人們需為每一項Http請求啟請求啟動新進(jìn)程。如果動新進(jìn)程。如果CGI程序本身相對較短,啟動進(jìn)程的開銷可程序本身相對較短,啟動進(jìn)程的開銷可以決定執(zhí)行過程的時間。在使用以決定執(zhí)行過程的時間。在使用Servlet時,使用時,使用“輕量輕量” Java線程處理每一項請求,而不使用線程處理每一項請求,而
7、不使用“重量重量”操作系統(tǒng)進(jìn)程。操作系統(tǒng)進(jìn)程。在傳統(tǒng)的在傳統(tǒng)的CGI中,如果中,如果n項請求同時指向同一個項請求同時指向同一個CGI程序,程序,則該則該CGI程序代碼就會載入內(nèi)存程序代碼就會載入內(nèi)存n次。但在使用次。但在使用Servlet時,時,可以存在可以存在n個線程,而只使用個線程,而只使用Servlet類的一個副本。類的一個副本。 最后一點(diǎn)是,當(dāng)最后一點(diǎn)是,當(dāng)CGI程序完成請求的處理工作時,就會終止程序完成請求的處理工作時,就會終止程序,這樣就難以緩存計算結(jié)果、保持?jǐn)?shù)據(jù)庫連接開放,并程序,這樣就難以緩存計算結(jié)果、保持?jǐn)?shù)據(jù)庫連接開放,并允許依賴于永久數(shù)據(jù)的其它優(yōu)化操作。但在完成響應(yīng)之后,允
8、許依賴于永久數(shù)據(jù)的其它優(yōu)化操作。但在完成響應(yīng)之后, Servlet仍然保留在內(nèi)存中,因此可以直接在請求之間存儲任仍然保留在內(nèi)存中,因此可以直接在請求之間存儲任意復(fù)雜的數(shù)據(jù)。意復(fù)雜的數(shù)據(jù)。82方便 Servlet包含擴(kuò)展基礎(chǔ)結(jié)構(gòu),包含擴(kuò)展基礎(chǔ)結(jié)構(gòu),能夠自動對能夠自動對HTML表單數(shù)據(jù)進(jìn)行分析和解碼、讀取和設(shè)置表單數(shù)據(jù)進(jìn)行分析和解碼、讀取和設(shè)置 Http頭、處理頭、處理Cookie、跟蹤會話以及許多其它類、跟蹤會話以及許多其它類似的高級功能似的高級功能。93. 強(qiáng)大 Servlet可以支持幾種功能,但利用常規(guī)的可以支持幾種功能,但利用常規(guī)的CGI卻難以或無法實現(xiàn)這些功能。卻難以或無法實現(xiàn)這些功能。
9、Servlet 可可以直接與以直接與Web服務(wù)器對話服務(wù)器對話,而常規(guī)的,而常規(guī)的CGI程程序則無法做到,至少在沒有使用服務(wù)器專用序則無法做到,至少在沒有使用服務(wù)器專用的的API的情況下無法實現(xiàn)這一點(diǎn)。例如,的情況下無法實現(xiàn)這一點(diǎn)。例如,與與Web服務(wù)器的通信更易于將相對服務(wù)器的通信更易于將相對URL轉(zhuǎn)換成轉(zhuǎn)換成具體的路徑名具體的路徑名。多個多個Servlet之間還能共享數(shù)之間還能共享數(shù)據(jù),這更易于實現(xiàn)數(shù)據(jù)庫連接共享和類似資據(jù),這更易于實現(xiàn)數(shù)據(jù)庫連接共享和類似資源共享優(yōu)化操作源共享優(yōu)化操作。Servlet還可以保留不同請還可以保留不同請求的信息,從而簡化了類似會話跟蹤和緩存求的信息,從而簡化了
10、類似會話跟蹤和緩存早期計算結(jié)果的一些技術(shù)早期計算結(jié)果的一些技術(shù)。 104. 可移植性 Servlet是使用是使用Java編程語言并遵循標(biāo)準(zhǔn)的編程語言并遵循標(biāo)準(zhǔn)的API編寫的,所以幾乎不進(jìn)行任何更改便可以在編寫的,所以幾乎不進(jìn)行任何更改便可以在各種服務(wù)器上運(yùn)行。實際上,各種服務(wù)器上運(yùn)行。實際上,幾乎每種主要幾乎每種主要的的Web服務(wù)器都可通過插件或直接支持服務(wù)器都可通過插件或直接支持Servlet。如今它們已成為。如今它們已成為J2EE的一部分,因的一部分,因此業(yè)界對此業(yè)界對Servlet的支持逐漸變得越來越普及。的支持逐漸變得越來越普及。 115. 安全性 126. 便宜 有許多免費(fèi)可用的或者
11、極為廉價的有許多免費(fèi)可用的或者極為廉價的Web服務(wù)器服務(wù)器適合于適合于“個人個人”或小型或小型Web站點(diǎn)使用。站點(diǎn)使用。 除了除了Apache可免費(fèi)使用之外,多數(shù)商業(yè)性質(zhì)的可免費(fèi)使用之外,多數(shù)商業(yè)性質(zhì)的Web服務(wù)器都相對比較昂貴,服務(wù)器都相對比較昂貴,但一旦擁有了但一旦擁有了某種某種Web服務(wù)器,不管其成本如何,添加服務(wù)器,不管其成本如何,添加Servlet支持支持(如果原來的配置不支持如果原來的配置不支持Servlet)幾幾乎無需花費(fèi)額外成本。與其它許多支持乎無需花費(fèi)額外成本。與其它許多支持CGI的服務(wù)器相比,后者要購買專用軟件包,需的服務(wù)器相比,后者要購買專用軟件包,需要投入巨大的啟動資金
12、。要投入巨大的啟動資金。 1310.1 Servlet介紹介紹10.1.1 什么是什么是Servlet10.1.2 Servlet的技術(shù)特點(diǎn)的技術(shù)特點(diǎn)10.1.3 Servlet與與JSP的區(qū)別的區(qū)別10.1.4 Servlet在在Web項目中的作用項目中的作用10.1.5 Servlet生命周期生命周期10.1.6 開發(fā)一個簡單的開發(fā)一個簡單的Servlet14Servlet是一種在服務(wù)器端運(yùn)行的是一種在服務(wù)器端運(yùn)行的Java程序。而程序。而JSP是繼是繼Servlet后后Sun公司推出的新技術(shù),它是以公司推出的新技術(shù),它是以Servlet為基礎(chǔ)開發(fā)的。為基礎(chǔ)開發(fā)的。Servlet是是JSP
13、的早期版本,的早期版本,在在JSP中,更加注重頁面的表示,而在中,更加注重頁面的表示,而在Servlet中則中則更注重業(yè)務(wù)邏輯的實現(xiàn)。因此,當(dāng)編寫的頁面顯更注重業(yè)務(wù)邏輯的實現(xiàn)。因此,當(dāng)編寫的頁面顯示效果比較復(fù)雜時,首選是示效果比較復(fù)雜時,首選是JSP?;蛘咴陂_發(fā)過程?;蛘咴陂_發(fā)過程中,中,HTML代碼經(jīng)常發(fā)生變化,而代碼經(jīng)常發(fā)生變化,而Java代碼則相代碼則相對比較固定時,可以選擇對比較固定時,可以選擇JSP。而在處理業(yè)務(wù)邏輯。而在處理業(yè)務(wù)邏輯時,首選則是時,首選則是Servlet。同時,。同時,JSP只能處理瀏覽器只能處理瀏覽器的請求,而的請求,而Servlet則可以處理一個客戶端的應(yīng)用則可
14、以處理一個客戶端的應(yīng)用程序請求。因此,程序請求。因此,Servlet加強(qiáng)了加強(qiáng)了Web服務(wù)器的功能。服務(wù)器的功能。15Servlet與與JSP相比有以下幾點(diǎn)區(qū)別:相比有以下幾點(diǎn)區(qū)別:(1)編程方式不同)編程方式不同Servlet是按照是按照J(rèn)ava規(guī)范編寫的規(guī)范編寫的Java程序,程序,JSP是按是按照照Web規(guī)范編寫的腳本語言。規(guī)范編寫的腳本語言。(2)編譯方式不同)編譯方式不同Servlet每次修改后需要編譯后才能運(yùn)行,每次修改后需要編譯后才能運(yùn)行,JSP是被是被JSP Container編譯為編譯為Servlet文件。文件。 (3)運(yùn)行速度不同)運(yùn)行速度不同由于一個由于一個JSP頁面在第
15、一次被訪問時要被編譯成頁面在第一次被訪問時要被編譯成Servlet需要一段時間,所以客戶端得到響應(yīng)所需需要一段時間,所以客戶端得到響應(yīng)所需要的時間比較長。當(dāng)該頁面再次被訪問時,它對要的時間比較長。當(dāng)該頁面再次被訪問時,它對應(yīng)的應(yīng)的.class文件已經(jīng)生成,不需要再次翻譯和編譯,文件已經(jīng)生成,不需要再次翻譯和編譯,JSP引擎可以直接執(zhí)行引擎可以直接執(zhí)行.class文件,因此文件,因此JSP頁面的頁面的訪問速度會大為提高??傊谶\(yùn)行速度上,訪問速度會大為提高??傊?,在運(yùn)行速度上,Serlvet比比JSP速度快。速度快。1610.1 Servlet介紹介紹10.1.1 什么是什么是Servlet1
16、0.1.2 Servlet的技術(shù)特點(diǎn)的技術(shù)特點(diǎn)10.1.3 Servlet與與JSP的區(qū)別的區(qū)別10.1.4 Servlet在在Web項目中的作用項目中的作用10.1.5 Servlet生命周期生命周期10.1.6 開發(fā)一個簡單的開發(fā)一個簡單的Servlet171.Servlet在服務(wù)器端的作用在瀏覽器訪問服務(wù)器時,所有的在瀏覽器訪問服務(wù)器時,所有的JSP文件都文件都會轉(zhuǎn)化為會轉(zhuǎn)化為Servlet文件,文件,Servlet文件負(fù)責(zé)在文件負(fù)責(zé)在服務(wù)器端處理用戶的數(shù)據(jù)。這部分功能在服務(wù)器端處理用戶的數(shù)據(jù)。這部分功能在開發(fā)服務(wù)器時已經(jīng)封裝成底層的功能,我開發(fā)服務(wù)器時已經(jīng)封裝成底層的功能,我們可不用關(guān)
17、心這部分功能,除非自己在開們可不用關(guān)心這部分功能,除非自己在開發(fā)一個服務(wù)器時候才用到。發(fā)一個服務(wù)器時候才用到。182.Servlet在MVC設(shè)計模式中應(yīng)用MVC是一種目前廣泛流行的軟件設(shè)計模式,早在是一種目前廣泛流行的軟件設(shè)計模式,早在70年代,年代,IBM就進(jìn)行了就進(jìn)行了MVC設(shè)計模式的研究。近來,隨著設(shè)計模式的研究。近來,隨著JavaEE的成熟,它成為在的成熟,它成為在JavaEE平臺上推薦的一種設(shè)計平臺上推薦的一種設(shè)計模型,是廣大模型,是廣大Java開發(fā)者非常感興趣的設(shè)計模型。隨著開發(fā)者非常感興趣的設(shè)計模型。隨著網(wǎng)絡(luò)應(yīng)用的快速增加,網(wǎng)絡(luò)應(yīng)用的快速增加,MVC模式對于模式對于Web應(yīng)用的開
18、發(fā)無應(yīng)用的開發(fā)無疑是一種非常先進(jìn)的設(shè)計思想,無論選擇哪種語言,無疑是一種非常先進(jìn)的設(shè)計思想,無論選擇哪種語言,無論應(yīng)用多復(fù)雜,它都能為理解分析應(yīng)用模型提供最基本論應(yīng)用多復(fù)雜,它都能為理解分析應(yīng)用模型提供最基本的分析方法,為構(gòu)造產(chǎn)品提供清晰的設(shè)計框架,為軟件的分析方法,為構(gòu)造產(chǎn)品提供清晰的設(shè)計框架,為軟件工程提供規(guī)范的依據(jù)。工程提供規(guī)范的依據(jù)。MVC 設(shè)計模式是目前用得比較多設(shè)計模式是目前用得比較多的一種設(shè)計模式,被廣泛應(yīng)用于的一種設(shè)計模式,被廣泛應(yīng)用于Web 應(yīng)用程序中。應(yīng)用程序中。Model(模型)表示業(yè)務(wù)邏輯層,(模型)表示業(yè)務(wù)邏輯層,View(視圖)代表表(視圖)代表表示層,示層,Con
19、troller(控制器)代表控制層。有關(guān)(控制器)代表控制層。有關(guān)MVC設(shè)設(shè)計模式的詳細(xì)介紹請參考第計模式的詳細(xì)介紹請參考第1和和12章。章。其中,控制器部分由其中,控制器部分由Servlet完成,這也是我們實際在項目完成,這也是我們實際在項目開發(fā)中用到的開發(fā)中用到的Servlet。193.Servlet在Web框架中的應(yīng)用在在Java Web項目開發(fā)中用到的主要組件技術(shù)有項目開發(fā)中用到的主要組件技術(shù)有JSP、Servlet、JavaBean、JDBC、XML、Tomcat等技術(shù)。為了整合等技術(shù)。為了整合Java Web組件技術(shù)提高軟件開發(fā)效率,近年來推出許多組件技術(shù)提高軟件開發(fā)效率,近年來推
20、出許多基于基于MVC模式的模式的Web框架技術(shù),如,框架技術(shù),如,Struts,Maverick,WebWork 和和Turbine 等。其中比較經(jīng)典框架技術(shù)是等。其中比較經(jīng)典框架技術(shù)是Struts。在在Struts框架技術(shù)中,實現(xiàn)了框架技術(shù)中,實現(xiàn)了MVC模式,其中已封裝好核模式,其中已封裝好核心控制器,由心控制器,由Servlet實現(xiàn);我們還需要實現(xiàn)實現(xiàn);我們還需要實現(xiàn)Action來完來完成對數(shù)據(jù)流量的控制,成對數(shù)據(jù)流量的控制,Action在在Struts1.X版本中由版本中由Servet實現(xiàn)控制功能,在實現(xiàn)控制功能,在Struts2.X版本中版本中Action是業(yè)務(wù)控制器,是業(yè)務(wù)控制器,
21、由由Java類來實現(xiàn)。有關(guān)類來實現(xiàn)。有關(guān)Servlet在在Struts中的應(yīng)用請參考中的應(yīng)用請參考Struts相關(guān)資料。相關(guān)資料。 2010.1 Servlet介紹介紹10.1.1 什么是什么是Servlet10.1.2 Servlet的技術(shù)特點(diǎn)的技術(shù)特點(diǎn)10.1.3 Servlet與與JSP的區(qū)別的區(qū)別10.1.4 Servlet在在Web項目中的作用項目中的作用10.1.5 Servlet生命周期生命周期10.1.6 開發(fā)一個簡單的開發(fā)一個簡單的Servlet2110.1.5 Servlet生命周期生命周期Servlet由服務(wù)器完成該子類的創(chuàng)建和初始化。由服務(wù)器完成該子類的創(chuàng)建和初始化。S
22、ervlet的的生命周期主要由生命周期主要由3個過程組成。個過程組成。221. init()方法:服務(wù)器初始化Servlet。 當(dāng)首次創(chuàng)建當(dāng)首次創(chuàng)建Servlet時會調(diào)用時會調(diào)用init()方法,方法,而不而不是每個用戶請求都會調(diào)用此方法是每個用戶請求都會調(diào)用此方法。當(dāng)用戶首。當(dāng)用戶首次調(diào)用對應(yīng)于次調(diào)用對應(yīng)于Servlet的的URL或再次啟動服務(wù)或再次啟動服務(wù)器時,就會創(chuàng)建器時,就會創(chuàng)建Servlet。當(dāng)有客戶再請求。當(dāng)有客戶再請求Servlet服務(wù)時,服務(wù)時,Web服務(wù)器將啟動一個新的服務(wù)器將啟動一個新的線程,在該線程中,調(diào)用線程,在該線程中,調(diào)用service方法相應(yīng)客方法相應(yīng)客戶的請求。
23、戶的請求。23init()方法的聲明如下:方法的聲明如下:public void init(ServletConfig config) throws ServletExceptionpublic void init() throws ServletExceptionServletConfig對象包含用于初始化的參數(shù),定對象包含用于初始化的參數(shù),定義的義的getInitParameter方法可以獲取這些參數(shù)。方法可以獲取這些參數(shù)。 241.2. ShowMessages3. ch10.ShowMessages4. 5. message 6. hello world 7. 8. 9. 10. re
24、peats11. 12. 13. 514. 15.16.252. service()方法:初始化完畢,Servlet對象調(diào)用該方法響應(yīng)客戶的請求。對于每個請求,對于每個請求,Servlet引擎都會調(diào)用此方法,并引擎都會調(diào)用此方法,并把把Servlet的請求對象和響應(yīng)對象傳遞給的請求對象和響應(yīng)對象傳遞給service()方法作為參數(shù)方法作為參數(shù)。方法聲明如下:。方法聲明如下:public void service(ServletRequest request,ServletResponse response)其中,其中,request對象和對象和response對象由對象由Servlet容器容器
25、創(chuàng)建并傳遞給創(chuàng)建并傳遞給service方法,方法,service方法會根據(jù)方法會根據(jù)Http請求類型,調(diào)用相應(yīng)的請求類型,調(diào)用相應(yīng)的doGet或或doPost等等方法。方法。service方法可以被調(diào)用多次。方法可以被調(diào)用多次。263. destroy()方法:調(diào)用該方法消滅Servlet對象。當(dāng)當(dāng)Servlet被卸載時此方法被自動調(diào)用??梢杂帽恍遁d時此方法被自動調(diào)用??梢杂脕磲尫艁磲尫臩ervlet占用的資源,比如數(shù)據(jù)庫連接、占用的資源,比如數(shù)據(jù)庫連接、Socket連接等。連接等。destroy()方法只會被調(diào)用一次。方法只會被調(diào)用一次。2710.1 Servlet介紹介紹10.1.1 什么
26、是什么是Servlet10.1.2 Servlet的技術(shù)特點(diǎn)的技術(shù)特點(diǎn)10.1.3 Servlet與與JSP的區(qū)別的區(qū)別10.1.4 Servlet在在Web項目中的作用項目中的作用10.1.5 Servlet生命周期生命周期10.1.6 開發(fā)一個簡單的開發(fā)一個簡單的Servlet2810.1 Servlet介紹介紹10.1.1 什么是什么是Servlet10.1.2 Servlet的技術(shù)特點(diǎn)的技術(shù)特點(diǎn)10.1.3 Servlet生命周期生命周期10.1.4 開發(fā)一個簡單的開發(fā)一個簡單的Servlet29在在NetBeans中新建一個中新建一個web項目,點(diǎn)擊右鍵,項目,點(diǎn)擊右鍵,新建新建Se
27、rvlet。 301.2.4. 5. FirstServlet6. ch10.FirstServlet7. 8. 9. FirstServlet10. /FirstServlet11. 311. 2. 3. 304. 5. 6. 7.8. index.jsp9. 10. 11.32黑體部分黑體部分是是IDE自動生成的自動生成的Servlet配置信息,配置信息,標(biāo)明此標(biāo)明此URL請求(請求(/FirstServlet)被被FirstServlet處理,處理,F(xiàn)irstServlet即是即是ch10包包的的FirstServle.javat部署后的名稱。部署后的名稱。程序清單如下。程序清單如下。3
28、3【例例10-1】簡單簡單Servlet示例示例1.package ch10;2.import java.io.*;3.import .*;4.import javax.servlet.*;5.import javax.servlet.http.*;6.public class FirstServlet extends HttpServlet 7. protected void processRequest(HttpServletRequest request, HttpServletResponse response)8. throws ServletException, IOExcepti
29、on 9. response.setContentType(text/html;charset=UTF-8);10. PrintWriter out = response.getWriter(); 11. out.println();12. out.println();13. out.println(Servlet FirstServlet);14. out.println();15. out.println();341. out.println(Servlet FirstServlet at + request.getContextPath () + );2. out.println();3
30、. out.println(); 4. out.close();5. 6. protected void doGet(HttpServletRequest request, HttpServletResponse response)7. throws ServletException, IOException 8. processRequest(request, response);9. 10. protected void doPost(HttpServletRequest request, HttpServletResponse response)11. throws ServletExc
31、eption, IOException 12. processRequest(request, response);13. 14.3536第第10章章 JSP與與Servlet編程編程10.1 Servlet介紹介紹10.2 處理客戶端請求處理客戶端請求10.3 Servlet編程接口編程接口10.4 Servlet部署部署10.5 Servlet應(yīng)用實例應(yīng)用實例3710.2 處理客戶端請求處理客戶端請求10.2.1 從從Servlet讀取表單數(shù)據(jù)讀取表單數(shù)據(jù)10.2.2 從從Servlet提取報文頭提取報文頭10.2.3 處理處理Cookie與會話跟蹤與會話跟蹤3810.2.1 從從Serv
32、let讀取表單數(shù)據(jù)讀取表單數(shù)據(jù)如果你用過搜索引擎、訪問過在線書店,可能經(jīng)常在如果你用過搜索引擎、訪問過在線書店,可能經(jīng)常在地址欄看到這樣的信息:地址欄看到這樣的信息:http:/host/path?user=liu&booking=airplane 問號后邊部分稱為表單數(shù)據(jù)問號后邊部分稱為表單數(shù)據(jù)。對于。對于Get請求,表單數(shù)請求,表單數(shù)據(jù)可以附加在據(jù)可以附加在URL末尾;對于末尾;對于Post請求,可以用獨(dú)請求,可以用獨(dú)立行把表單數(shù)據(jù)發(fā)送到服務(wù)器。對于表單中輸入的立行把表單數(shù)據(jù)發(fā)送到服務(wù)器。對于表單中輸入的非字母、數(shù)字字符,傳送時需要編碼和解碼。例如,非字母、數(shù)字字符,傳送時需要編碼
33、和解碼。例如,空格被轉(zhuǎn)換為加號,其它符號轉(zhuǎn)換為空格被轉(zhuǎn)換為加號,其它符號轉(zhuǎn)換為%XX的格式,的格式,其中其中XX是該字符的是該字符的ASCII值,用十六進(jìn)制表示。值,用十六進(jìn)制表示。 Servlet能夠自動處理表單能夠自動處理表單,下面是一個簡單的,下面是一個簡單的Servlet,從,從提交的頁面讀取三個表單參數(shù)提交的頁面讀取三個表單參數(shù)。39【例例10-2】頁面頁面paramsForm.jsp1.2.3. 4. 5. 6. 401. 2. 數(shù)據(jù)數(shù)據(jù)13. 4. 數(shù)據(jù)數(shù)據(jù)25. 6. 數(shù)據(jù)數(shù)據(jù)37. 8. 9. 10. 11. 12. 13. 14. 4142【例例10-3】讀取表單參數(shù)的讀取
34、表單參數(shù)的Servlet1.package ch10;2.import java.io.*;3.import .*;4.import javax.servlet.*;5.import javax.servlet.http.*;6.public class ThreeParams extends HttpServlet 7. protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException 8. response.s
35、etContentType(text/html;charset=UTF-8);9. PrintWriter out = response.getWriter(); 10. out.println(); 11. out.println(); 431. out.println(request.getParameter(gr1);2. out.println(request.getParameter(gr2);3. out.println(request.getParameter(gr3); 4. out.println();5. out.println(); 6. out.close();7. 8
36、. protected void doGet(HttpServletRequest request, HttpServletResponse response)9. throws ServletException, IOException 10. processRequest(request, response);11. 12. protected void doPost(HttpServletRequest request, HttpServletResponse response)13. throws ServletException, IOException 14. processReq
37、uest(request, response);15. 16. 44該該Servlet文件需要在文件需要在web.xml進(jìn)行配置,配置如下:進(jìn)行配置,配置如下: ThreeParams ch.ThreeParams ThreeParams /ThreeParams454610.2 處理客戶端請求處理客戶端請求10.2.1 從從Servlet讀取表單數(shù)據(jù)讀取表單數(shù)據(jù)10.2.2 從從Servlet提取報文頭提取報文頭10.2.3 處理處理Cookie與會話跟蹤與會話跟蹤4710.2.2 從從Servlet提取報文頭提取報文頭HTTP報文在網(wǎng)絡(luò)傳輸時,請求頭包含一些可用信息。報文在網(wǎng)絡(luò)傳輸時,請求
38、頭包含一些可用信息。Servlet能能夠方便的讀取這些信息夠方便的讀取這些信息??梢允褂谩?梢允褂肏ttpServletRequest對象的對象的getHeader()方法。例如,方法。例如,request.getHeader(“Connection”),頭的名稱不用區(qū)分大小寫頭的名稱不用區(qū)分大小寫。Connection和和CONNECTION等價。等價。另外一些常用的方法如下另外一些常用的方法如下。(1)getCookie()返回返回Cookie頭的內(nèi)容,解析并存儲在頭的內(nèi)容,解析并存儲在Cookie對象的數(shù)組中。對象的數(shù)組中。(2)getRequestURI()返回返回URL中主機(jī)和端口之
39、后、表單數(shù)據(jù)前的部分。例如下面的中主機(jī)和端口之后、表單數(shù)據(jù)前的部分。例如下面的URL:http:/localhost:8080/servlet/SearchBook?name=jsp將返回將返回/servlet/SearchBook。(3)getMethod()返回請求方法(通常是返回請求方法(通常是GET和和POST),也可能是),也可能是HEAD、PUT和和DELETE。4810.2 處理客戶端請求處理客戶端請求10.2.1 從從Servlet讀取表單數(shù)據(jù)讀取表單數(shù)據(jù)10.2.2 從從Servlet提取報文頭提取報文頭10.2.3 處理處理Cookie與會話跟蹤與會話跟蹤4910.2.3
40、處理處理Cookie與會話跟蹤與會話跟蹤HTTP是一種無狀態(tài)的協(xié)議,每當(dāng)客戶訪問是一種無狀態(tài)的協(xié)議,每當(dāng)客戶訪問頁面時,就會連接服務(wù)器,并且服務(wù)器不會頁面時,就會連接服務(wù)器,并且服務(wù)器不會保留客戶端的信息。缺少環(huán)境將導(dǎo)致許多困保留客戶端的信息。缺少環(huán)境將導(dǎo)致許多困難的出現(xiàn)。例如在線商店的用戶將某種產(chǎn)品難的出現(xiàn)。例如在線商店的用戶將某種產(chǎn)品添加到了購物車,服務(wù)器如何知道購物車?yán)锾砑拥搅速徫镘?,服?wù)器如何知道購物車?yán)镉惺裁串a(chǎn)品?購物車和哪個客戶關(guān)聯(lián)?有什么產(chǎn)品?購物車和哪個客戶關(guān)聯(lián)?對于對于這些問題,有下面幾種解決方案:這些問題,有下面幾種解決方案:Cookie、URL重寫、隱藏的表單數(shù)據(jù)。重寫、
41、隱藏的表單數(shù)據(jù)。501. Cookie Cookie是是Web服務(wù)器發(fā)送到瀏覽器的簡單文本服務(wù)器發(fā)送到瀏覽器的簡單文本信息,以后在訪問同一個信息,以后在訪問同一個Web站點(diǎn)或域時瀏覽站點(diǎn)或域時瀏覽器會將該文本信息毫無更改的返回。器會將該文本信息毫無更改的返回。通過讓服通過讓服務(wù)器讀取以前發(fā)送到客戶端的信息,站點(diǎn)就能務(wù)器讀取以前發(fā)送到客戶端的信息,站點(diǎn)就能為訪問者提供許多方便。為訪問者提供許多方便。可以使用可以使用Cookie存儲存儲有關(guān)購物會話的信息。每個后續(xù)連接可以查詢有關(guān)購物會話的信息。每個后續(xù)連接可以查詢當(dāng)前會話。要將當(dāng)前會話。要將Cookie發(fā)送到客戶端,發(fā)送到客戶端,Servlet可
42、以創(chuàng)建一個或多個可以創(chuàng)建一個或多個Cookie。使用。使用new Cookie(name,value)指定名稱和值。指定名稱和值。512. URL重寫 使用這種方式時,使用這種方式時,客戶端將一些額外數(shù)據(jù)追加到標(biāo)識客戶端將一些額外數(shù)據(jù)追加到標(biāo)識會話的每個會話的每個URL末尾末尾,服務(wù)器在該標(biāo)識符與存儲的,服務(wù)器在該標(biāo)識符與存儲的有關(guān)該會話的數(shù)據(jù)之間建立關(guān)聯(lián)。例如,在使用有關(guān)該會話的數(shù)據(jù)之間建立關(guān)聯(lián)。例如,在使用http:/localhost/path/file.jsp?name=liuqiang時,附加時,附加的會話信息為的會話信息為name=liuqiang。這也是一種解決方案,。這也是一種
43、解決方案,當(dāng)瀏覽器不支持當(dāng)瀏覽器不支持Cookie或者當(dāng)用戶禁用了或者當(dāng)用戶禁用了Cookie時,時,這種方法的優(yōu)勢更為明顯。但是它同樣具有與這種方法的優(yōu)勢更為明顯。但是它同樣具有與Cookie相同的多數(shù)問題,也就是說,服務(wù)器端程序相同的多數(shù)問題,也就是說,服務(wù)器端程序需要完成許多簡單卻繁瑣的處理過程。另外,還必需要完成許多簡單卻繁瑣的處理過程。另外,還必須非常小心,因為引用您的站點(diǎn)并返回給用戶須非常小心,因為引用您的站點(diǎn)并返回給用戶 URL(甚至通過服務(wù)器重定向中諸如甚至通過服務(wù)器重定向中諸如Location域的間域的間接方式接方式)都追加了額外的信息。如果用戶退出會話,都追加了額外的信息。
44、如果用戶退出會話,并通過書簽或鏈接返回原處,就可能丟失會話信息。并通過書簽或鏈接返回原處,就可能丟失會話信息。 523. 隱藏的表單數(shù)據(jù)HTML表單可以包含如下所示的項:表單可以包含如下所示的項: 在提交表單時,指定的名稱和值也將包括在在提交表單時,指定的名稱和值也將包括在GET和和POST數(shù)據(jù)中。隱藏的字段可以用來數(shù)據(jù)中。隱藏的字段可以用來存儲有關(guān)會話的信息,但是主要缺點(diǎn),即只存儲有關(guān)會話的信息,但是主要缺點(diǎn),即只有當(dāng)每個頁面都是動態(tài)生成的時候才有效。有當(dāng)每個頁面都是動態(tài)生成的時候才有效。 534. Servlet的會話跟蹤 Servlet提供了出色的技術(shù)解決方案:提供了出色的技術(shù)解決方案:
45、 HttpSession API。這種高級接口建立在。這種高級接口建立在Cookie或或URL重寫之上。重寫之上。實際上,如果瀏覽器支持實際上,如果瀏覽器支持Cookie,多數(shù)服務(wù)器就會,多數(shù)服務(wù)器就會使用使用Cookie,但是當(dāng)支持或明確禁用,但是當(dāng)支持或明確禁用Cookie時就會時就會自動改用自動改用URL重寫。而重寫。而Servlet編寫人員不需要關(guān)心編寫人員不需要關(guān)心這許多細(xì)節(jié),不必明確使用這許多細(xì)節(jié),不必明確使用Cookie或追加到或追加到URL的的信息,就可以自動方便地存儲與會話相關(guān)的任意對信息,就可以自動方便地存儲與會話相關(guān)的任意對象。象。 HttpSession對象存儲于服務(wù)器
46、,通過對象存儲于服務(wù)器,通過Cookie等幕后等幕后機(jī)制與客戶端關(guān)聯(lián)。在線購物中常用的購物車可以機(jī)制與客戶端關(guān)聯(lián)。在線購物中常用的購物車可以使用使用HttpSession進(jìn)行會話跟蹤。進(jìn)行會話跟蹤。54第第10章章 JSP與與Servlet編程編程10.1 Servlet介紹介紹10.2 處理客戶端請求處理客戶端請求10.3 Servlet編程接口編程接口10.4 過濾器過濾器10.5 Servlet部署部署10.6 Servlet和和JSP集成集成55第第10章章 JSP與與Servlet編程編程10.1 Servlet介紹介紹10.2 處理客戶端請求處理客戶端請求10.3 Servlet編
47、程接口編程接口10.4 Servlet部署部署10.5 Servlet應(yīng)用實例應(yīng)用實例5610.3 Servlet編程接口編程接口10.3.1 與與Servlet實現(xiàn)相關(guān)實現(xiàn)相關(guān)10.3.2 與與Servlet配置相關(guān)配置相關(guān)10.3.3 與與Servlet異常相關(guān)異常相關(guān)10.3.4 與請求和響應(yīng)相關(guān)與請求和響應(yīng)相關(guān)10.3.5 會話管理會話管理10.3.6 Servlet上下文相關(guān)上下文相關(guān)10.3.7 Servlet協(xié)作相關(guān)協(xié)作相關(guān)57第第10章章 JSP與與Servlet編程編程10.1 Servlet介紹介紹10.2 處理客戶端請求處理客戶端請求10.3 Servlet編程接口編程接口10.4 Servlet部署部署10.5 Servlet應(yīng)用實例應(yīng)用實例5810.4 Servlet部署部署Servlet配置包含配置包含Servlet的名字、的名字、Servlet的類、初始化參數(shù)、啟的類、初始化參數(shù)、啟動裝入的優(yōu)先級、動裝入的優(yōu)先級、Servtlet的映射、運(yùn)行的安全設(shè)置、過濾的映射、運(yùn)行的安全設(shè)置、過濾器的名字和類以及它的初始化參數(shù)器的名字和類以及它的初始化參數(shù)。部署描述符文件是部署描述符文件是J2EE Web程序的重要組成部分,通常位于程序的重要組成部分,通常位于/W
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中標(biāo)格式合同范本
- 省級課題申報書研究手段
- 買貓質(zhì)保合同范本
- 鳳爪貿(mào)易合同范本
- 烹飪課題申報書
- 2025生產(chǎn)設(shè)備大數(shù)據(jù)輕量化采集要求
- 單方面解約合同范本
- 產(chǎn)供銷合同范本
- 小學(xué)音樂類課題申報書
- 制作公司合同范本
- ANCA相關(guān)性血管炎-3
- 上海市幼兒園幼小銜接活動指導(dǎo)意見(修訂稿)
- 投資可行性分析財務(wù)數(shù)據(jù)全套表格
- 2024-2025學(xué)年初中信息技術(shù)(信息科技)七年級上冊粵教清華版教學(xué)設(shè)計合集
- -小學(xué)英語人稱代詞與物主代詞講解課件(共58張課件).課件
- 2024年四年級英語下冊 Unit 8 How are you第4課時教案 譯林牛津版
- 2024年濟(jì)南廣播電視臺招考電視工作人員高頻500題難、易錯點(diǎn)模擬試題附帶答案詳解
- 《中國詩詞大會》九宮格(原題)
- 住院病人跌倒墜床風(fēng)險評估及防范措施表
- 人教版《道德與法治》二年級下冊全冊課件
- 2024年云南省中考數(shù)學(xué)模擬試題(附答案解析)
評論
0/150
提交評論