全套Servlet培訓(xùn)教程_第1頁
全套Servlet培訓(xùn)教程_第2頁
全套Servlet培訓(xùn)教程_第3頁
全套Servlet培訓(xùn)教程_第4頁
全套Servlet培訓(xùn)教程_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、索迪教育索迪教育IT教育成就人生教育成就人生基于基于 Java 的的 Web 編程技術(shù)編程技術(shù)第六章第六章 Servlet索迪教育索迪教育IT教育成就人生教育成就人生上章回顧上章回顧q 了解代理事件模型了解代理事件模型q 在在JavaBean中訪問數(shù)據(jù)庫中訪問數(shù)據(jù)庫索迪教育索迪教育IT教育成就人生教育成就人生我們的目標(biāo)我們的目標(biāo)q 了解了解Servlet體系結(jié)構(gòu)體系結(jié)構(gòu)q 掌握請求和響應(yīng)掌握請求和響應(yīng)索迪教育索迪教育IT教育成就人生教育成就人生簡介簡介-1q Java編程中一個(gè)最激動(dòng)人心的最新趨勢是服編程中一個(gè)最激動(dòng)人心的最新趨勢是服務(wù)器端務(wù)器端Java應(yīng)用程序的興起。應(yīng)用程序的興起。Java

2、這種面向這種面向?qū)ο蟮耐ㄓ镁幊陶Z言最初旨在用于小型嵌入對(duì)象的通用編程語言最初旨在用于小型嵌入設(shè)備,而后被認(rèn)為是一種用于以設(shè)備,而后被認(rèn)為是一種用于以Applet形式形式開發(fā)客戶端開發(fā)客戶端Web內(nèi)容的語言,如今內(nèi)容的語言,如今Java已是已是一種非常適合服務(wù)器端開發(fā)的語言,商家迅一種非常適合服務(wù)器端開發(fā)的語言,商家迅速認(rèn)識(shí)到速認(rèn)識(shí)到Java在服務(wù)器上的潛力。在服務(wù)器上的潛力。索迪教育索迪教育IT教育成就人生教育成就人生簡介簡介-2q Applet是以是以Java語言開發(fā)的程序,它運(yùn)行在語言開發(fā)的程序,它運(yùn)行在客戶端機(jī)器的瀏覽器上,這些客戶端機(jī)器的瀏覽器上,這些Applet不連接不連接到服務(wù)器。

3、在很多情況下需要訪問服務(wù)器上到服務(wù)器。在很多情況下需要訪問服務(wù)器上的數(shù)據(jù),而這無法通過的數(shù)據(jù),而這無法通過Applet實(shí)現(xiàn)。為了訪實(shí)現(xiàn)。為了訪問數(shù)據(jù)和執(zhí)行服務(wù)器端的請求處理,必須使問數(shù)據(jù)和執(zhí)行服務(wù)器端的請求處理,必須使用另一個(gè)稱為用另一個(gè)稱為Servlet的應(yīng)用程序。的應(yīng)用程序。Servlet是是以以Java編程語言開發(fā)的服務(wù)器端程序,它運(yùn)編程語言開發(fā)的服務(wù)器端程序,它運(yùn)行在行在Web服務(wù)器中,由于服務(wù)器中,由于Servlet在服務(wù)器內(nèi)在服務(wù)器內(nèi)運(yùn)行,所以這些程序可用于擴(kuò)展運(yùn)行,所以這些程序可用于擴(kuò)展Web服務(wù)器服務(wù)器的功能。的功能。索迪教育索迪教育IT教育成就人生教育成就人生簡介簡介-3客戶

4、端客戶端Servlet數(shù)據(jù)庫數(shù)據(jù)庫HTTP服務(wù)器服務(wù)器Servlet體系結(jié)構(gòu)體系結(jié)構(gòu)索迪教育索迪教育IT教育成就人生教育成就人生簡介簡介-4q 使用使用Servlet的優(yōu)點(diǎn)是:的優(yōu)點(diǎn)是:Servlet是持久性的。是持久性的。 Servlet只須由只須由Web服務(wù)器加載一次即可服務(wù)器加載一次即可維護(hù)請求之間的服務(wù)。相比之下,每次向維護(hù)請求之間的服務(wù)。相比之下,每次向Web服務(wù)器發(fā)出請服務(wù)器發(fā)出請求時(shí),求時(shí),Web服務(wù)器都必須加載和執(zhí)行服務(wù)器都必須加載和執(zhí)行CGI腳本。腳本。Servlet運(yùn)行速度快。由于只須加載一次,所以提供更佳的性運(yùn)行速度快。由于只須加載一次,所以提供更佳的性能。能。由于是用由

5、于是用Java編寫,所以編寫,所以Servlet可跨平臺(tái)??煽缙脚_(tái)。Servlet可擴(kuò)展??蓴U(kuò)展。Java的所有優(yōu)點(diǎn)都可以在的所有優(yōu)點(diǎn)都可以在Servlet中體現(xiàn)。中體現(xiàn)。Servlet很安全。訪問很安全。訪問Servlet的唯一途徑是通過服務(wù)器。的唯一途徑是通過服務(wù)器。Servlet可以與各種客戶端一起使用。可以與各種客戶端一起使用。索迪教育索迪教育IT教育成就人生教育成就人生6.1 Servlet體系結(jié)構(gòu)體系結(jié)構(gòu)-1q Servlet是服務(wù)器端程序,運(yùn)行在是服務(wù)器端程序,運(yùn)行在Web服務(wù)器服務(wù)器上對(duì)客戶端的請求做出響應(yīng)。上對(duì)客戶端的請求做出響應(yīng)。Web服務(wù)器向服務(wù)器向Servlet發(fā)送請求

6、,發(fā)送請求, Servlet的輸出結(jié)果返回至的輸出結(jié)果返回至Web服務(wù)器,然后服務(wù)器,然后Web服務(wù)器將結(jié)果返回至服務(wù)器將結(jié)果返回至Web瀏覽器,最后瀏覽器,最后Web瀏覽器在屏幕上顯示瀏覽器在屏幕上顯示結(jié)果。該過程稱為結(jié)果。該過程稱為“請求請求-響應(yīng)響應(yīng)”模型。模型。Web瀏覽器瀏覽器ServletWeb服務(wù)器服務(wù)器HTTP請求請求HTTP響應(yīng)響應(yīng)索迪教育索迪教育IT教育成就人生教育成就人生6.1 Servlet體系結(jié)構(gòu)體系結(jié)構(gòu)-2q Servlet使用以下兩個(gè)包中的類和接口:使用以下兩個(gè)包中的類和接口:javax.servletjavax.servlet.httpq 包名以包名以javax

7、開頭而不是開頭而不是java,表示,表示Servlet API是一個(gè)是一個(gè)標(biāo)準(zhǔn)擴(kuò)展。標(biāo)準(zhǔn)擴(kuò)展。q javax.servlet包包含了可以支持通用、跨協(xié)議的包包含了可以支持通用、跨協(xié)議的Servlet的類。的類。q javax.servlet.http包中的類增加了特定于包中的類增加了特定于HTTP的功能。的功能。每個(gè)每個(gè)Servlet都必須實(shí)現(xiàn)都必須實(shí)現(xiàn)javax.servlet.Servlet接口。大接口。大部分部分Servlet通過擴(kuò)展以下其中一個(gè)特殊類來實(shí)現(xiàn)這一通過擴(kuò)展以下其中一個(gè)特殊類來實(shí)現(xiàn)這一接口:接口:javax.servlet.GenericServlet或或javax.serv

8、let.http.HttpServlet。索迪教育索迪教育IT教育成就人生教育成就人生6.1 Servlet體系結(jié)構(gòu)體系結(jié)構(gòu)-3q 跨協(xié)議跨協(xié)議Servlet應(yīng)該繼承應(yīng)該繼承GenericServlet。HTTP Servlet應(yīng)繼承應(yīng)繼承HttpServlet,而,而HttpServlet本身是本身是GenericServlet的子類,但的子類,但添加了特定于添加了特定于HTTP的功能。的功能。Servlet接口只聲接口只聲明而不實(shí)現(xiàn)用于管理明而不實(shí)現(xiàn)用于管理Servlet及其與客戶端通及其與客戶端通信的方法。信的方法。索迪教育索迪教育IT教育成就人生教育成就人生6.1 Servlet體系結(jié)

9、構(gòu)體系結(jié)構(gòu)-4ServletGenericServletHttpServlet自定義自定義Servlet索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和類常用接口和類- javax.servlet包包q 其中最常用的接口如下:其中最常用的接口如下:ServletRequest此接口用于將請求信息傳送給此接口用于將請求信息傳送給Servlet。在收到請求時(shí),。在收到請求時(shí),Servlet引擎會(huì)將關(guān)鍵的請求信息封裝在實(shí)現(xiàn)引擎會(huì)將關(guān)鍵的請求信息封裝在實(shí)現(xiàn)ServletRequest接口的對(duì)象接口的對(duì)象中,傳遞至中,傳遞至Servlet的的service()方法。方法。Servlet

10、Response此接口提供服務(wù)器對(duì)客戶端請求的響應(yīng)的對(duì)象表示。此接口提供服務(wù)器對(duì)客戶端請求的響應(yīng)的對(duì)象表示。Servlet引引擎會(huì)將實(shí)現(xiàn)擎會(huì)將實(shí)現(xiàn)ServletResponse接口的對(duì)象傳遞給接口的對(duì)象傳遞給Servlet的的service()方法。接著方法。接著Servlet就可以使用此對(duì)象對(duì)客戶端請求做出響應(yīng)。就可以使用此對(duì)象對(duì)客戶端請求做出響應(yīng)。RequestDispatcher此接口定義一個(gè)用于接收客戶端的請求并將其發(fā)送至任何資源此接口定義一個(gè)用于接收客戶端的請求并將其發(fā)送至任何資源的對(duì)象。此接口還可用于封裝的對(duì)象。此接口還可用于封裝Servlet。RequestDispatcher對(duì)

11、象對(duì)象用作資源的封裝器,通過路徑或名稱指定。資源可以是服務(wù)器用作資源的封裝器,通過路徑或名稱指定。資源可以是服務(wù)器上的上的Servlet、HTML文件或文件或JSP文件。文件。索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和類常用接口和類- javax.servlet包包q 其中最常用的接口如下:其中最常用的接口如下:Servlet這是每個(gè)這是每個(gè)Servlet都必須實(shí)現(xiàn)的接口,它定義必須由都必須實(shí)現(xiàn)的接口,它定義必須由Servlet實(shí)現(xiàn)實(shí)現(xiàn)的方法。的方法。ServletConfig此接口定義此接口定義Servlet配置對(duì)象。此對(duì)象由配置對(duì)象。此對(duì)象由Servlet引擎用于將

12、任何引擎用于將任何信息傳遞給信息傳遞給Servlet,以便可初始化,以便可初始化Servlet 。 ServletConfig 接接口的其他詳情將在本章后面討論。口的其他詳情將在本章后面討論。ServletContext此接口定義了一組方法,此接口定義了一組方法,Servlet使用這些方法與使用這些方法與Servlet引擎進(jìn)引擎進(jìn)行通信。行通信。SingleThreadModel此接口確保每次此接口確保每次Servlet只能處理一個(gè)請求。只能處理一個(gè)請求。索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和類常用接口和類- javax.servlet包包q 其中最常用的類如下:其

13、中最常用的類如下:q GenericServlet 這是大部分非這是大部分非HTTPServlet擴(kuò)展的類。此類定義通擴(kuò)展的類。此類定義通知、跨協(xié)議的知、跨協(xié)議的Servlet。q ServletInputStream 這是提供輸入流用于讀取來自客戶端請求的二進(jìn)這是提供輸入流用于讀取來自客戶端請求的二進(jìn)制數(shù)據(jù)的類。此類包括方法制數(shù)據(jù)的類。此類包括方法readLine(),以此有效,以此有效實(shí)現(xiàn)每次讀取一行數(shù)據(jù)。實(shí)現(xiàn)每次讀取一行數(shù)據(jù)。q ServletOutputStream 此類的運(yùn)行方式與此類的運(yùn)行方式與ServletInputStream相同,但此相同,但此類提供輸出流用于將二進(jìn)制數(shù)據(jù)發(fā)送

14、給客戶端。類提供輸出流用于將二進(jìn)制數(shù)據(jù)發(fā)送給客戶端。索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和類常用接口和類- javax.servlet包包q javax.servlet包還具有某些異常,它們是:包還具有某些異常,它們是:q ServletException 此異常是常規(guī)異常,由此異常是常規(guī)異常,由Servlet在執(zhí)行過程中遇到在執(zhí)行過程中遇到困難時(shí)拋出。困難時(shí)拋出。q UnavailableException 此異常定義的是由此異常定義的是由Servlet拋出以表示拋出以表示Servlet永久永久或臨時(shí)不可用的異常。或臨時(shí)不可用的異常。索迪教育索迪教育IT教育成就人

15、生教育成就人生6.1.1 常用接口和類常用接口和類- javax.servlet.http包包qjavax.servlet.http包中可用的接口包括:包中可用的接口包括:HttpServletRequest此接口擴(kuò)展此接口擴(kuò)展ServletRequest接口并支持接口并支持ServletResult接口的所有方法。接口的所有方法。HttpServletRequest定義用于描述定義用于描述HTTP請求的方法。實(shí)現(xiàn)請求的方法。實(shí)現(xiàn)HttpServletRequest接口的對(duì)象被傳遞給接口的對(duì)象被傳遞給Servlet的的service方法或任何方法或任何do()方法。方法。HttpServlet

16、Response此接口擴(kuò)展此接口擴(kuò)展ServletResponse并支持并支持ServletResponse接口的所有方法。接口的所有方法。 HttpServletResponse接口提供服務(wù)器對(duì)客戶端請求的響應(yīng)的對(duì)象表示。接口提供服務(wù)器對(duì)客戶端請求的響應(yīng)的對(duì)象表示。Servlet可以使用實(shí)現(xiàn)可以使用實(shí)現(xiàn)Servlet引擎?zhèn)鬟f的引擎?zhèn)鬟f的HttpServletResponse接口的對(duì)接口的對(duì)象。此對(duì)象將被傳遞至象。此對(duì)象將被傳遞至Servlet的的service()方法。方法。HttpSession此接口提供一種方法,用于在對(duì)此接口提供一種方法,用于在對(duì)Web站點(diǎn)的請求或訪問超過一個(gè)頁面站點(diǎn)的

17、請求或訪問超過一個(gè)頁面時(shí)標(biāo)識(shí)用戶。時(shí)標(biāo)識(shí)用戶。HttpSessionBindingListener在對(duì)象綁定至?xí)捝匣蚪獬龝?huì)話綁定時(shí),此接口將通知對(duì)象。在對(duì)象綁定至?xí)捝匣蚪獬龝?huì)話綁定時(shí),此接口將通知對(duì)象。索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和類常用接口和類- javax.servlet.http包包q javax.servlet.http包中常用的類包括:包中常用的類包括:CookieCookie類可以創(chuàng)建類可以創(chuàng)建Cookie , Cookie存儲(chǔ)了少量由存儲(chǔ)了少量由Servlet發(fā)送發(fā)送至客戶端的信息??蛻舳丝稍谏院笠L問以前訪問過的網(wǎng)頁時(shí)至客戶端的信息??蛻?/p>

18、端可在稍后要訪問以前訪問過的網(wǎng)頁時(shí)使用已存儲(chǔ)的信息。使用已存儲(chǔ)的信息。HttpServletHttpServlet類是最常用于擴(kuò)展類是最常用于擴(kuò)展Servlet的類,這是因?yàn)楹芏嗟念?,這是因?yàn)楹芏郤ervlet應(yīng)用程序都按應(yīng)用程序都按HTTP協(xié)議運(yùn)行。此類支持協(xié)議運(yùn)行。此類支持HTTP功能以及功能以及Servlet類的方法,它是個(gè)抽象類。它接收客戶端的請求,并向類的方法,它是個(gè)抽象類。它接收客戶端的請求,并向客戶端發(fā)送響應(yīng)??蛻舳税l(fā)送響應(yīng)。HttpSessionBindingEvent在對(duì)象綁定至?xí)捝匣蚪獬龝?huì)話綁定時(shí),此類會(huì)將對(duì)象傳遞給在對(duì)象綁定至?xí)捝匣蚪獬龝?huì)話綁定時(shí),此類會(huì)將對(duì)象傳遞給實(shí)

19、現(xiàn)實(shí)現(xiàn)HttpSessionBindingListener接口的會(huì)話。接口的會(huì)話。索迪教育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-1q Servlet是普通是普通Java類,在需要時(shí)被創(chuàng)建,在不用時(shí)被類,在需要時(shí)被創(chuàng)建,在不用時(shí)被破壞。破壞。Servlet的創(chuàng)建和破壞均由的創(chuàng)建和破壞均由Servlet容器自動(dòng)處理,容器自動(dòng)處理,這是因?yàn)檫@是因?yàn)镾ervlet是在是在Servlet容器內(nèi)運(yùn)行。容器內(nèi)運(yùn)行。Servlet容器容器可以在單個(gè)可以在單個(gè)Java虛擬機(jī)中執(zhí)行所有虛擬機(jī)中執(zhí)行所有Servlet。Servlet容容器必須遵循下列生命周期:器必須遵循下列

20、生命周期:創(chuàng)建和初始化創(chuàng)建和初始化Servlet(加載)(加載)處理客戶端的服務(wù)調(diào)用處理客戶端的服務(wù)調(diào)用破壞破壞Servlet并對(duì)其進(jìn)行垃圾收集并對(duì)其進(jìn)行垃圾收集q 這三個(gè)步驟對(duì)所有這三個(gè)步驟對(duì)所有Servlet都通用。都通用。 Servlet容器創(chuàng)建容器創(chuàng)建Servlet實(shí)例時(shí)使用的是實(shí)例時(shí)使用的是init()方法,而在破壞實(shí)例時(shí)使方法,而在破壞實(shí)例時(shí)使用的是用的是destroy()方法。方法。索迪教育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-2服務(wù)器加載服務(wù)器加載Servlet服務(wù)器創(chuàng)建服務(wù)器創(chuàng)建Servlet類的實(shí)例類的實(shí)例調(diào)用調(diào)用Servlet實(shí)例

21、的實(shí)例的init()方法方法收到請求收到請求調(diào)用調(diào)用service()方法方法service()方法處理請求并將輸出結(jié)果返回客戶端方法處理請求并將輸出結(jié)果返回客戶端Servlet等待下一個(gè)請求或由服務(wù)器卸載等待下一個(gè)請求或由服務(wù)器卸載Servlet在服務(wù)器調(diào)用在服務(wù)器調(diào)用destroy()方法后被卸載方法后被卸載索迪教育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-3q初始化初始化Servlet任何時(shí)候?qū)⑷魏螘r(shí)候?qū)ervlet加載至服務(wù)器,服務(wù)器都會(huì)調(diào)用加載至服務(wù)器,服務(wù)器都會(huì)調(diào)用Servlet的的init()方方法。即使大部分法。即使大部分Servlet在

22、多線程服務(wù)器上運(yùn)行,在多線程服務(wù)器上運(yùn)行,Servlet在初始化過在初始化過程中也不會(huì)碰到并發(fā)問題。程中也不會(huì)碰到并發(fā)問題。init()方法在方法在Servlet處理第一個(gè)請求之前調(diào)用,此方法用于執(zhí)行處理第一個(gè)請求之前調(diào)用,此方法用于執(zhí)行Servlet初始化初始化 創(chuàng)建或加載創(chuàng)建或加載Servlet在處理請求時(shí)使用的對(duì)象。服務(wù)在處理請求時(shí)使用的對(duì)象。服務(wù)器調(diào)用器調(diào)用Servlet的的init()方法,向新方法,向新Servlet提供任何有關(guān)其本身及其環(huán)提供任何有關(guān)其本身及其環(huán)境的信息。境的信息。覆蓋覆蓋init()方法是為了在方法是為了在Servlet中添加初始化的內(nèi)容,覆蓋中添加初始化的內(nèi)容

23、,覆蓋init()方法方法時(shí)必須遵循下列規(guī)則:時(shí)必須遵循下列規(guī)則:如果發(fā)生初始化錯(cuò)誤,致使如果發(fā)生初始化錯(cuò)誤,致使Servlet不能處理客戶端請求,則拋出不能處理客戶端請求,則拋出UnavailableException請勿調(diào)用請勿調(diào)用System.exit()方法方法ServletConfig對(duì)象向?qū)ο笙騍ervlet提供其初始化參數(shù)信息,這些參數(shù)與其提供其初始化參數(shù)信息,這些參數(shù)與其他任何請求都不關(guān)聯(lián)。他任何請求都不關(guān)聯(lián)。ServletConfig對(duì)象還有對(duì)對(duì)象還有對(duì)ServletContext對(duì)象的引用,對(duì)象的引用,Servlet可以使可以使用此對(duì)象調(diào)查其環(huán)境。用此對(duì)象調(diào)查其環(huán)境。索迪教

24、育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-4q 處理客戶端的請求處理客戶端的請求Servlet接受客戶端的調(diào)用時(shí),它將收到兩個(gè)對(duì)象:接受客戶端的調(diào)用時(shí),它將收到兩個(gè)對(duì)象:ServletRequest,用于封裝客戶端至服務(wù)器的通信。,用于封裝客戶端至服務(wù)器的通信。ServletResponse,用于封裝,用于封裝Servlet返回至客戶端的通信。返回至客戶端的通信。HttpServlet接受客戶端的調(diào)用時(shí),與普通接受客戶端的調(diào)用時(shí),與普通Servlet相似,它們相似,它們是:是:HttpServletRequestHttpServletResponseHt

25、tpServlet能夠并發(fā)地為多個(gè)客戶端服務(wù)。在能夠并發(fā)地為多個(gè)客戶端服務(wù)。在Servlet初始化初始化之后,在調(diào)用之后,在調(diào)用init()方法時(shí),方法時(shí), Servlet容器收到的任何請求都容器收到的任何請求都將被轉(zhuǎn)發(fā)至將被轉(zhuǎn)發(fā)至Servlet的的service()方法。根據(jù)正在接收的方法。根據(jù)正在接收的HTTP請請求類型,求類型, HttpServlet類的類的service()方法可在細(xì)分為方法可在細(xì)分為doGet()、doPost()、doDelete()、doOptions()、doPut()和和doTrace()方法。方法。其中,其中, doGet()和和doPost()是兩個(gè)常用

26、于處理服務(wù)器的請求并是兩個(gè)常用于處理服務(wù)器的請求并生成響應(yīng)的方法。生成響應(yīng)的方法。索迪教育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-5q 破壞破壞Servlet 要卸載要卸載Servlet時(shí),服務(wù)器將調(diào)用時(shí),服務(wù)器將調(diào)用Servlet的的destroy()方法。在方法。在destroy()方法中,方法中, Servlet應(yīng)該釋放任何應(yīng)該釋放任何已獲得的資源。已獲得的資源。 destroy()方法還使方法還使Servlet有機(jī)會(huì)有機(jī)會(huì)寫出其未保存的高速緩存信息或任何在下次調(diào)用寫出其未保存的高速緩存信息或任何在下次調(diào)用init()時(shí)應(yīng)該讀取的持久性信息。時(shí)應(yīng)該

27、讀取的持久性信息。索迪教育索迪教育IT教育成就人生教育成就人生6.2 請求和響應(yīng)請求和響應(yīng)-1q 下面討論表示客戶端請求和下面討論表示客戶端請求和Servlet響應(yīng)的對(duì)響應(yīng)的對(duì)象。象。Servlet的兩個(gè)包都具有請求和響應(yīng)的接的兩個(gè)包都具有請求和響應(yīng)的接口和類??诤皖?。javax.servlet包具有包具有ServletRequest和和ServletResponse接口,接口, javax.servlet.http包具包具有有HttpServletRequest和和HttpServletResponse接口。接口。索迪教育索迪教育IT教育成就人生教育成就人生6.2 請求和響應(yīng)請求和響應(yīng)-2q

28、 HttpServlet類類 HttpServlet類擴(kuò)展了類擴(kuò)展了GenericServlet,提供,提供Servlet接口的接口的HTTP協(xié)議的特定實(shí)現(xiàn)。如果協(xié)議的特定實(shí)現(xiàn)。如果Servlet必須遵必須遵循循HTTP協(xié)議,則只能擴(kuò)展協(xié)議,則只能擴(kuò)展HttpServlet類并覆蓋所類并覆蓋所需的方法。需的方法。 HttpServlet最常用的兩個(gè)接口是:最常用的兩個(gè)接口是: HttpServletRequest HttpServletResponse索迪教育索迪教育IT教育成就人生教育成就人生6.2 請求和響應(yīng)請求和響應(yīng)-3q HttpServletRequestHttpServletReq

29、uest對(duì)象提供對(duì)對(duì)象提供對(duì)HTTP頭數(shù)據(jù)的訪問,獲得客頭數(shù)據(jù)的訪問,獲得客戶端作為請求一部分進(jìn)行發(fā)送的參數(shù)。通過擴(kuò)展戶端作為請求一部分進(jìn)行發(fā)送的參數(shù)。通過擴(kuò)展HttpServlet類并覆蓋相應(yīng)方法可以處理類并覆蓋相應(yīng)方法可以處理HTTP請求,這些請求的方法包請求,這些請求的方法包括括doGet()和和doPost()。客戶端數(shù)據(jù)可以通過下列方式訪問:客戶端數(shù)據(jù)可以通過下列方式訪問:getParameter()方法,用于返回指定參數(shù)的值方法,用于返回指定參數(shù)的值getParameterValues()方法,在參數(shù)具有多個(gè)值時(shí)使用,此方法方法,在參數(shù)具有多個(gè)值時(shí)使用,此方法返回指定參數(shù)的值數(shù)組。

30、返回指定參數(shù)的值數(shù)組。如果所需數(shù)據(jù)是文本格式,則如果所需數(shù)據(jù)是文本格式,則getReader()方法返回方法返回BufferedReader對(duì)象用于讀取數(shù)據(jù),如果所需數(shù)據(jù)是二進(jìn)制對(duì)象用于讀取數(shù)據(jù),如果所需數(shù)據(jù)是二進(jìn)制格式,則格式,則getInputStream()方法返回方法返回ServletInputStream對(duì)象對(duì)象用于讀取數(shù)據(jù)。用于讀取數(shù)據(jù)。索迪教育索迪教育IT教育成就人生教育成就人生6.2 請求和響應(yīng)請求和響應(yīng)-4q HttpServletResponse HttpServletResponse對(duì)象提供兩個(gè)將數(shù)據(jù)返回給對(duì)象提供兩個(gè)將數(shù)據(jù)返回給用戶的方法。用戶的方法。 getWrite

31、r()方法,返回方法,返回Writer對(duì)象,用于將文本數(shù)據(jù)返對(duì)象,用于將文本數(shù)據(jù)返回給用戶回給用戶 getOutputStream()方法,返回方法,返回ServletOutputStream對(duì)象,對(duì)象,用于返回二進(jìn)制數(shù)據(jù)用于返回二進(jìn)制數(shù)據(jù) 在發(fā)送響應(yīng)后關(guān)閉在發(fā)送響應(yīng)后關(guān)閉Writer或或ServletOutputStream可讓服務(wù)器知道何時(shí)完成響應(yīng)。可讓服務(wù)器知道何時(shí)完成響應(yīng)。索迪教育索迪教育IT教育成就人生教育成就人生6.2 請求和響應(yīng)請求和響應(yīng)-5q HttpServlet類中的常用方法類中的常用方法void init()在初始化在初始化Servlet時(shí)調(diào)用一次時(shí)調(diào)用一次void de

32、stroy()在要破壞在要破壞Servlet實(shí)例時(shí)調(diào)用一次實(shí)例時(shí)調(diào)用一次void service(HttpServletRequest req,HttpServletResponse resp)請勿覆蓋此方法請勿覆蓋此方法doGet()、doPost()、doPut()、doDelete()、doOptions()、doTrace()這些方法根據(jù)收到的這些方法根據(jù)收到的HTTP請求的類型來請求的類型來調(diào)用。必須覆蓋以便生成響應(yīng)。調(diào)用。必須覆蓋以便生成響應(yīng)。void log(String msg)將消息寫入將消息寫入Servlet的日志文件的日志文件long getLastModified(Ht

33、tpServlet req)返回返回Servlet的最后修改日期的最后修改日期String getServletInfo()提供提供Servlet的一般信息字符串,例如作的一般信息字符串,例如作者、版本、版權(quán)等者、版本、版權(quán)等String getServletName()返回返回 Servlet的名稱的名稱String getInitParameter(String name)返回給定初始化參數(shù)的值返回給定初始化參數(shù)的值Enumeration getInitParameterNames()返回一個(gè)包含了所有提供的初始化參數(shù)返回一個(gè)包含了所有提供的初始化參數(shù)名稱的名稱的Enumeration對(duì)象

34、對(duì)象索迪教育索迪教育IT教育成就人生教育成就人生6.3 會(huì)話和環(huán)境會(huì)話和環(huán)境-1q HTTP沒有為服務(wù)器提供識(shí)別請求序列是否來沒有為服務(wù)器提供識(shí)別請求序列是否來自同一客戶端的方法,這就引起一個(gè)問題,自同一客戶端的方法,這就引起一個(gè)問題,因?yàn)樵S多因?yàn)樵S多Web應(yīng)用程序都是有狀態(tài)的。應(yīng)用程序都是有狀態(tài)的。HTTP服務(wù)器不能通過連接機(jī)器的服務(wù)器不能通過連接機(jī)器的IP地址來標(biāo)識(shí)客地址來標(biāo)識(shí)客戶端,這是因?yàn)閳?bào)告的戶端,這是因?yàn)閳?bào)告的IP地址可能是代理服地址可能是代理服務(wù)器的地址或者是有多個(gè)用戶的服務(wù)器的地務(wù)器的地址或者是有多個(gè)用戶的服務(wù)器的地址。此問題的解決方案是客戶端任何時(shí)候做址。此問題的解決方案是客

35、戶端任何時(shí)候做出新請求都必須進(jìn)行自我介紹。每個(gè)客戶端出新請求都必須進(jìn)行自我介紹。每個(gè)客戶端都必須提供一個(gè)唯一標(biāo)識(shí)以便服務(wù)器可識(shí)別都必須提供一個(gè)唯一標(biāo)識(shí)以便服務(wù)器可識(shí)別它,或者客戶端必須提供某些信息以便服務(wù)它,或者客戶端必須提供某些信息以便服務(wù)器可用于正確處理請求。器可用于正確處理請求。索迪教育索迪教育IT教育成就人生教育成就人生6.3 會(huì)話和環(huán)境會(huì)話和環(huán)境-2q 用戶在站點(diǎn)上瀏覽時(shí),會(huì)話跟蹤使用戶在站點(diǎn)上瀏覽時(shí),會(huì)話跟蹤使Servlet和其他服務(wù)和其他服務(wù)器端應(yīng)用程序可以跟蹤用戶。服務(wù)器端應(yīng)用程序可以器端應(yīng)用程序可以跟蹤用戶。服務(wù)器端應(yīng)用程序可以使用此功能跟蹤客戶端在站點(diǎn)上的操作。使用此功能跟

36、蹤客戶端在站點(diǎn)上的操作。Web服務(wù)器服務(wù)器通過為站點(diǎn)上的每個(gè)用戶創(chuàng)建通過為站點(diǎn)上的每個(gè)用戶創(chuàng)建Session對(duì)象來維護(hù)用戶對(duì)象來維護(hù)用戶狀態(tài),這些狀態(tài),這些Session對(duì)象存儲(chǔ)在服務(wù)器中,并在服務(wù)器對(duì)象存儲(chǔ)在服務(wù)器中,并在服務(wù)器中進(jìn)行維護(hù)。在用戶向站點(diǎn)做出請求時(shí),用戶就分配中進(jìn)行維護(hù)。在用戶向站點(diǎn)做出請求時(shí),用戶就分配有一個(gè)新的有一個(gè)新的Session對(duì)象和唯一的會(huì)話對(duì)象和唯一的會(huì)話ID。此會(huì)話。此會(huì)話ID在后續(xù)的請求中會(huì)將用戶與在后續(xù)的請求中會(huì)將用戶與Session對(duì)象進(jìn)行匹配然后對(duì)象進(jìn)行匹配然后Session對(duì)象就作為請求的一部分被傳遞至處理請求的對(duì)象就作為請求的一部分被傳遞至處理請求的

37、Servlet。 Servlet可以在可以在Session對(duì)象中添加信息或讀對(duì)象中添加信息或讀取其中的信息。會(huì)話對(duì)于由多個(gè)取其中的信息。會(huì)話對(duì)于由多個(gè)Servlet組成的應(yīng)用程組成的應(yīng)用程序來說很方便。序來說很方便。索迪教育索迪教育IT教育成就人生教育成就人生6.3 會(huì)話和環(huán)境會(huì)話和環(huán)境-3q 下面討論不同的會(huì)話跟蹤技術(shù)下面討論不同的會(huì)話跟蹤技術(shù) 用戶認(rèn)證用戶認(rèn)證 隱藏表單字段隱藏表單字段 URL重寫重寫 持久持久Cookie 會(huì)話交換和持久會(huì)話交換和持久索迪教育索迪教育IT教育成就人生教育成就人生6.3.1 用戶認(rèn)證用戶認(rèn)證q在在Web服務(wù)器只允許那些使用用戶名和口令進(jìn)行登錄的客戶端服務(wù)器只

38、允許那些使用用戶名和口令進(jìn)行登錄的客戶端訪問某些資源時(shí),就需要使用用戶認(rèn)證。在客戶端登錄后,用訪問某些資源時(shí),就需要使用用戶認(rèn)證。在客戶端登錄后,用戶名即通過戶名即通過getRemoteUser()提供給提供給Servlet。用戶名可用于跟蹤。用戶名可用于跟蹤客戶端會(huì)話。一旦用戶登錄,瀏覽器即記住用戶名,并在用戶客戶端會(huì)話。一旦用戶登錄,瀏覽器即記住用戶名,并在用戶查看站點(diǎn)的新頁面時(shí)返回用戶名和口令。查看站點(diǎn)的新頁面時(shí)返回用戶名和口令。Servlet可以通過用戶可以通過用戶名標(biāo)識(shí)用戶,并以此跟蹤用戶。名標(biāo)識(shí)用戶,并以此跟蹤用戶。q使用用戶認(rèn)證的優(yōu)點(diǎn)是:使用用戶認(rèn)證的優(yōu)點(diǎn)是:容易實(shí)現(xiàn)??勺尫?wù)器

39、保護(hù)一組頁面,并使用容易實(shí)現(xiàn)??勺尫?wù)器保護(hù)一組頁面,并使用getRemoteUser()標(biāo)識(shí)標(biāo)識(shí)每個(gè)客戶端。每個(gè)客戶端。此技術(shù)即使在用戶從不同機(jī)器訪問站點(diǎn)時(shí)也有效。此技術(shù)即使在用戶從不同機(jī)器訪問站點(diǎn)時(shí)也有效。即使用戶離開站點(diǎn)或在返回站點(diǎn)前退出瀏覽器,此技術(shù)同樣有效。即使用戶離開站點(diǎn)或在返回站點(diǎn)前退出瀏覽器,此技術(shù)同樣有效。q使用用戶認(rèn)證的缺點(diǎn)是:使用用戶認(rèn)證的缺點(diǎn)是:要求每個(gè)用戶都注冊一個(gè)帳戶,然后在每次訪問站點(diǎn)時(shí)登錄。要求每個(gè)用戶都注冊一個(gè)帳戶,然后在每次訪問站點(diǎn)時(shí)登錄。用戶在同一站點(diǎn)上不能同時(shí)維護(hù)多個(gè)會(huì)話。用戶在同一站點(diǎn)上不能同時(shí)維護(hù)多個(gè)會(huì)話。索迪教育索迪教育IT教育成就人生教育成就人生

40、6.3.2 隱藏表單字段隱藏表單字段q 隱藏表單字段是指添加到隱藏表單字段是指添加到HTML表單中,但不在客戶表單中,但不在客戶端的瀏覽器中顯示的字段。在提交包含字段的表單時(shí),端的瀏覽器中顯示的字段。在提交包含字段的表單時(shí),字段將被發(fā)送至服務(wù)器。隱藏表單字段定義表單的常字段將被發(fā)送至服務(wù)器。隱藏表單字段定義表單的常變量,但對(duì)于接收提交的表單的變量,但對(duì)于接收提交的表單的Servlet,隱藏字段和,隱藏字段和可見字段沒有區(qū)別??梢娮侄螞]有區(qū)別。q 使用隱藏表單字段的優(yōu)點(diǎn)是其功能強(qiáng)大并支持匿名。使用隱藏表單字段的優(yōu)點(diǎn)是其功能強(qiáng)大并支持匿名。所有常用瀏覽器都支持隱藏字段,而且它們可用于未所有常用瀏覽

41、器都支持隱藏字段,而且它們可用于未登錄或注冊的客戶端。隱藏表單字段的缺點(diǎn)是只適用登錄或注冊的客戶端。隱藏表單字段的缺點(diǎn)是只適用于動(dòng)態(tài)生成的表單序列。在遇到靜態(tài)文檔、以電子郵于動(dòng)態(tài)生成的表單序列。在遇到靜態(tài)文檔、以電子郵件發(fā)送的文檔、設(shè)計(jì)為書簽的文檔和瀏覽器關(guān)閉時(shí),件發(fā)送的文檔、設(shè)計(jì)為書簽的文檔和瀏覽器關(guān)閉時(shí),該技術(shù)即束手無策。該技術(shù)即束手無策。索迪教育索迪教育IT教育成就人生教育成就人生6.3.3 URL重寫重寫q 使用使用URL重寫技術(shù),用戶單擊的每個(gè)重寫技術(shù),用戶單擊的每個(gè)URL都可被動(dòng)都可被動(dòng)態(tài)修改或重寫,以包括附加信息。附加信息的形式可態(tài)修改或重寫,以包括附加信息。附加信息的形式可為附

42、加路徑信息、添加的參數(shù)或某些特定于服務(wù)器的為附加路徑信息、添加的參數(shù)或某些特定于服務(wù)器的自定義自定義URL修改。重寫修改。重寫URL的可用空間是有限的,的可用空間是有限的,因此附加信息通常只限于唯一的會(huì)話因此附加信息通常只限于唯一的會(huì)話ID。q 每種重寫技術(shù)都有其優(yōu)點(diǎn)和缺點(diǎn)。附加路徑信息適用每種重寫技術(shù)都有其優(yōu)點(diǎn)和缺點(diǎn)。附加路徑信息適用于所有服務(wù)器,并作為使用于所有服務(wù)器,并作為使用GET和和POST方法的表單方法的表單的目標(biāo),但是,如果的目標(biāo),但是,如果Servlet必須使用附加路徑信息作必須使用附加路徑信息作為實(shí)際路徑信息時(shí),它就不適用。添加的參數(shù)適用于為實(shí)際路徑信息時(shí),它就不適用。添加的

43、參數(shù)適用于所有服務(wù)器,但在作為使用所有服務(wù)器,但在作為使用POST方法的表單的目標(biāo)方法的表單的目標(biāo)時(shí)將失效,并可能引起參數(shù)命名沖突。特定于服務(wù)器時(shí)將失效,并可能引起參數(shù)命名沖突。特定于服務(wù)器的自定義修改在任何情況下都適用于支持此類修改的的自定義修改在任何情況下都適用于支持此類修改的服務(wù)器。服務(wù)器。索迪教育索迪教育IT教育成就人生教育成就人生6.3.4 持久持久Cookieq Cookie是是Web服務(wù)器發(fā)送至瀏覽器,以后可服務(wù)器發(fā)送至瀏覽器,以后可從該瀏覽器上讀回的少量信息。瀏覽器收到從該瀏覽器上讀回的少量信息。瀏覽器收到Cookie后,在每次訪問服務(wù)器上的頁面時(shí)都后,在每次訪問服務(wù)器上的頁面

44、時(shí)都會(huì)將其發(fā)送回服務(wù)器。由于會(huì)將其發(fā)送回服務(wù)器。由于Cookie的值可以的值可以方便地標(biāo)識(shí)客戶端,因此方便地標(biāo)識(shí)客戶端,因此Cookie通常用于會(huì)通常用于會(huì)話跟蹤。話跟蹤。索迪教育索迪教育IT教育成就人生教育成就人生6.3.5 會(huì)話交換和持久會(huì)話交換和持久-1q 因?yàn)樵L問一個(gè)站點(diǎn)的用戶可有許多個(gè),所以就會(huì)有許因?yàn)樵L問一個(gè)站點(diǎn)的用戶可有許多個(gè),所以就會(huì)有許多會(huì)話訪問同一站點(diǎn)。多會(huì)話訪問同一站點(diǎn)。q Internet站點(diǎn)必須支持許多有效會(huì)話,例如,大型站站點(diǎn)必須支持許多有效會(huì)話,例如,大型站點(diǎn)可能同時(shí)有幾百甚至幾千個(gè)有效會(huì)話。由于每個(gè)會(huì)點(diǎn)可能同時(shí)有幾百甚至幾千個(gè)有效會(huì)話。由于每個(gè)會(huì)話都可以包含應(yīng)用

45、程序話都可以包含應(yīng)用程序Servlet放置的任意數(shù)據(jù)對(duì)象,放置的任意數(shù)據(jù)對(duì)象,所以整個(gè)系統(tǒng)的內(nèi)存要求就很高。所以整個(gè)系統(tǒng)的內(nèi)存要求就很高。q 內(nèi)存中可以存在的會(huì)話數(shù)受到會(huì)話跟蹤系統(tǒng)的限制。內(nèi)存中可以存在的會(huì)話數(shù)受到會(huì)話跟蹤系統(tǒng)的限制。session.maxresidents屬性設(shè)置此限制,當(dāng)同時(shí)進(jìn)行的屬性設(shè)置此限制,當(dāng)同時(shí)進(jìn)行的會(huì)話的數(shù)量超過會(huì)話的數(shù)量超過session.maxresidents設(shè)置的限制時(shí),設(shè)置的限制時(shí),會(huì)話跟蹤器會(huì)將最近最不常用的會(huì)話交換到磁盤。被會(huì)話跟蹤器會(huì)將最近最不常用的會(huì)話交換到磁盤。被交換的會(huì)話沒有丟失,它們可以重載入內(nèi)存。如果收交換的會(huì)話沒有丟失,它們可以重載入內(nèi)

46、存。如果收到請求,會(huì)話將被重載。會(huì)話交換使得系統(tǒng)中的有效到請求,會(huì)話將被重載。會(huì)話交換使得系統(tǒng)中的有效會(huì)話比內(nèi)存所能容納的會(huì)話要多。會(huì)話比內(nèi)存所能容納的會(huì)話要多。索迪教育索迪教育IT教育成就人生教育成就人生6.3.5 會(huì)話交換和持久會(huì)話交換和持久-2q會(huì)話交換絕不會(huì)影響會(huì)話的無效性。如果會(huì)話的未使用時(shí)間超會(huì)話交換絕不會(huì)影響會(huì)話的無效性。如果會(huì)話的未使用時(shí)間超過正常失效時(shí)間,它就會(huì)無效,不管會(huì)話是在內(nèi)存還是在磁盤。過正常失效時(shí)間,它就會(huì)無效,不管會(huì)話是在內(nèi)存還是在磁盤。session.invalidationinterval屬性設(shè)置會(huì)話無效時(shí)間。屬性設(shè)置會(huì)話無效時(shí)間。q串行化用于將會(huì)話寫入磁盤和

47、從磁盤讀取會(huì)話。所以,可以串串行化用于將會(huì)話寫入磁盤和從磁盤讀取會(huì)話。所以,可以串行化并置于會(huì)話中的對(duì)象將被寫入磁盤,而不能串行化的對(duì)象行化并置于會(huì)話中的對(duì)象將被寫入磁盤,而不能串行化的對(duì)象將保留在內(nèi)存中(即使會(huì)話的一部分已被寫入磁盤),會(huì)話跟將保留在內(nèi)存中(即使會(huì)話的一部分已被寫入磁盤),會(huì)話跟蹤操作不會(huì)受串行化的影響。因此,蹤操作不會(huì)受串行化的影響。因此,Servlet開發(fā)者只保存會(huì)話開發(fā)者只保存會(huì)話中的可串行化對(duì)象。實(shí)現(xiàn)中的可串行化對(duì)象。實(shí)現(xiàn)java.io.Serializable或或java.io.Externalizable接口的對(duì)象都可串行化。接口的對(duì)象都可串行化。q在啟用了會(huì)話持

48、久功能時(shí),會(huì)話跟蹤器將使用會(huì)話交換機(jī)制實(shí)在啟用了會(huì)話持久功能時(shí),會(huì)話跟蹤器將使用會(huì)話交換機(jī)制實(shí)現(xiàn)會(huì)話持久。服務(wù)器關(guān)閉時(shí),內(nèi)存中的會(huì)話即被寫入現(xiàn)會(huì)話持久。服務(wù)器關(guān)閉時(shí),內(nèi)存中的會(huì)話即被寫入session.swapdirectory屬性中指定的磁盤。一旦啟動(dòng)服務(wù)器,寫屬性中指定的磁盤。一旦啟動(dòng)服務(wù)器,寫入磁盤的會(huì)話就變得有效。這就使服務(wù)器在重啟時(shí)不會(huì)丟失任入磁盤的會(huì)話就變得有效。這就使服務(wù)器在重啟時(shí)不會(huì)丟失任何現(xiàn)有會(huì)話。會(huì)話中的可串行化數(shù)據(jù)元素在關(guān)閉何現(xiàn)有會(huì)話。會(huì)話中的可串行化數(shù)據(jù)元素在關(guān)閉/重啟操作時(shí)可重啟操作時(shí)可以繼續(xù)運(yùn)行。以繼續(xù)運(yùn)行。索迪教育索迪教育IT教育成就人生教育成就人生6.4 Htt

49、pSession接口接口-1q HttpSession接口定義一個(gè)對(duì)象,用于在客戶接口定義一個(gè)對(duì)象,用于在客戶端和服務(wù)器之間提供關(guān)聯(lián),此關(guān)聯(lián)在經(jīng)過多端和服務(wù)器之間提供關(guān)聯(lián),此關(guān)聯(lián)在經(jīng)過多次連接后仍然持久。它還可以維護(hù)事務(wù)處理次連接后仍然持久。它還可以維護(hù)事務(wù)處理之間的狀態(tài)。之間的狀態(tài)。q Servlet API提供提供HttpSession接口以實(shí)現(xiàn)存儲(chǔ)接口以實(shí)現(xiàn)存儲(chǔ)功能。功能。Servlet引擎可以創(chuàng)建一個(gè)對(duì)象,用于引擎可以創(chuàng)建一個(gè)對(duì)象,用于實(shí)現(xiàn)此接口,自動(dòng)創(chuàng)建唯一的密鑰和將此密實(shí)現(xiàn)此接口,自動(dòng)創(chuàng)建唯一的密鑰和將此密鑰附加至響應(yīng)。鑰附加至響應(yīng)。 Servlet引擎負(fù)責(zé)存儲(chǔ)會(huì)話、引擎負(fù)責(zé)存儲(chǔ)會(huì)

50、話、跟蹤會(huì)話持久時(shí)間以及根據(jù)跟蹤會(huì)話持久時(shí)間以及根據(jù)Servlet需要檢索需要檢索會(huì)話。會(huì)話。Session對(duì)象必須具有生命周期,這樣對(duì)象必須具有生命周期,這樣引擎才能將其拋棄。引擎才能將其拋棄。索迪教育索迪教育IT教育成就人生教育成就人生6.4 HttpSession接口接口-2q 為了創(chuàng)建為了創(chuàng)建HTTP客戶端和客戶端和HTTP服務(wù)器之間的會(huì)話,服務(wù)器之間的會(huì)話,Servlet引擎使用引擎使用HttpSession接口。對(duì)于用戶的多個(gè)連接口。對(duì)于用戶的多個(gè)連接或頁面請求,會(huì)話可持久的時(shí)間比實(shí)際指定的更長。接或頁面請求,會(huì)話可持久的時(shí)間比實(shí)際指定的更長。正常情況下,會(huì)話對(duì)應(yīng)一個(gè)建立至站點(diǎn)的連

51、接并多次正常情況下,會(huì)話對(duì)應(yīng)一個(gè)建立至站點(diǎn)的連接并多次訪問站點(diǎn)的用戶。服務(wù)器通過使用訪問站點(diǎn)的用戶。服務(wù)器通過使用Cookie或重寫或重寫URL來維護(hù)會(huì)話。來維護(hù)會(huì)話。q Servlet可通過可通過HttpSession接口來查看和操縱會(huì)話的相接口來查看和操縱會(huì)話的相關(guān)信息,如會(huì)話標(biāo)識(shí)符、創(chuàng)建時(shí)間和環(huán)境。此接口允關(guān)信息,如會(huì)話標(biāo)識(shí)符、創(chuàng)建時(shí)間和環(huán)境。此接口允許許Servlet將對(duì)象綁定至?xí)挘⒃试S將對(duì)象綁定至?xí)?,并允許Servlet訪問標(biāo)準(zhǔn)訪問標(biāo)準(zhǔn)會(huì)話屬性,例如會(huì)話標(biāo)識(shí)符或會(huì)話環(huán)境。會(huì)話屬性,例如會(huì)話標(biāo)識(shí)符或會(huì)話環(huán)境。 HttpSession接口允許接口允許Servlet從會(huì)話獲得數(shù)據(jù)和修

52、改此從會(huì)話獲得數(shù)據(jù)和修改此數(shù)據(jù),然后將其返回給會(huì)話。數(shù)據(jù),然后將其返回給會(huì)話。索迪教育索迪教育IT教育成就人生教育成就人生6.4 HttpSession接口接口-3q 會(huì)話跟蹤器檢查對(duì)象是否實(shí)現(xiàn)會(huì)話跟蹤器檢查對(duì)象是否實(shí)現(xiàn)HttpSessionBindingListener接口。任何時(shí)候應(yīng)用程序接口。任何時(shí)候應(yīng)用程序存儲(chǔ)對(duì)象或?qū)⑵鋸臅?huì)話中刪除,如果對(duì)象實(shí)現(xiàn)存儲(chǔ)對(duì)象或?qū)⑵鋸臅?huì)話中刪除,如果對(duì)象實(shí)現(xiàn)HttpSessionBindingListener接口,則接口,則Servlet都會(huì)通知都會(huì)通知此對(duì)象它已被綁定至?xí)捇蛞呀獬龝?huì)話綁定。此對(duì)象它已被綁定至?xí)捇蛞呀獬龝?huì)話綁定。q 在下列任何一種情況下,

53、服務(wù)器都會(huì)將會(huì)話視為新的在下列任何一種情況下,服務(wù)器都會(huì)將會(huì)話視為新的會(huì)話:會(huì)話:客戶端首次進(jìn)入頁面或站點(diǎn)時(shí)客戶端首次進(jìn)入頁面或站點(diǎn)時(shí)會(huì)話還未啟動(dòng)時(shí)會(huì)話還未啟動(dòng)時(shí)客戶端選擇不參與會(huì)話時(shí)客戶端選擇不參與會(huì)話時(shí)索迪教育索迪教育IT教育成就人生教育成就人生6.5 ServletConfig接口接口q ServletConfig接口定義接口定義Servlet配置對(duì)象,配置對(duì)象, Servlet引擎引擎使用此對(duì)象將信息傳遞給使用此對(duì)象將信息傳遞給Servlet以初始化以初始化Servlet。它。它包含包含Servlet初始化參數(shù)的名稱初始化參數(shù)的名稱/值對(duì),還包含對(duì)值對(duì),還包含對(duì)ServletConte

54、xt對(duì)象的引用。此接口定義了三個(gè)訪問此對(duì)象的引用。此接口定義了三個(gè)訪問此信息的方法。信息的方法。String getInitParameter(String name) 返回包含了指定初始化參返回包含了指定初始化參數(shù)值的字符串,如果參數(shù)數(shù)值的字符串,如果參數(shù)不存在則返回不存在則返回nullEnumeration getInitParameterNames()將將Servlet初始化參數(shù)的名初始化參數(shù)的名稱作為字符串對(duì)象的枚舉稱作為字符串對(duì)象的枚舉返回,如果返回,如果Servlet沒有初沒有初始化參數(shù)則返回空枚舉始化參數(shù)則返回空枚舉ServletCntext getServletContext(

55、)返回服務(wù)器傳遞至此返回服務(wù)器傳遞至此Servlet的的ServletContext對(duì)對(duì)象象索迪教育索迪教育IT教育成就人生教育成就人生6.6 ServletContext-1q 使用此接口的對(duì)象讓使用此接口的對(duì)象讓Servlet查找有關(guān)查找有關(guān)Servlet引擎及其引擎及其環(huán)境的信息。從環(huán)境的信息。從ServletConfig對(duì)象可以獲得對(duì)象可以獲得ServletContext。 ServletContext類中常用的方法如下:類中常用的方法如下:Object getAttribute(String name)返回給定名稱的返回給定名稱的Servlet引擎屬性,引擎屬性,若無則返回若無則返回nullEnumeration getAttributeNames()返回包含了此返回包含了此Servlet環(huán)境中可用環(huán)境中可用屬性名稱的枚舉屬性名稱的枚舉ServletContext getContext(String uripath)返回對(duì)應(yīng)于服務(wù)器上指定返回對(duì)應(yīng)于服務(wù)器上指定URL的的ServletContext對(duì)象對(duì)象int getMajorVersion()返回此返回此Web服務(wù)器支持的服務(wù)器支持的Java Servlet API的主要

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論