




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、概述 Servlet是一種獨(dú)立于平臺(tái)和協(xié)議的服務(wù)器端的Java應(yīng)用程序,可以生成動(dòng)態(tài)的Web頁面。Servlet是位于Web 服務(wù)器內(nèi)部的服務(wù)器端的Java應(yīng)用程序,與傳統(tǒng)的從命令行啟動(dòng)的Java應(yīng)用程序不同,Servlet由Web服務(wù)器進(jìn)行加載,該Web服務(wù)器必須包含支持Servlet的Java虛擬機(jī)。Java Servlet 與 Applet 的比較:相似之處:* 它們不是獨(dú)立的應(yīng)用程序,沒有main()方法。* 它們不是由用戶或程序員調(diào)用,而是由另外一個(gè)應(yīng)用程序(容器)調(diào)用。* 它們都有一個(gè)生存周期,包含init()和destroy()方法。不同之處:* Applet具有很好的圖形界
2、面(AWT),與瀏覽器一起,在客戶端運(yùn)行。* Servlet 則沒有圖形界面,運(yùn)行在服務(wù)器端。Java Servlet 與 CGI(Common Gateway Interface) 的比較:與傳統(tǒng)的CGI和許多其他類似CGI的技術(shù)相比,Java Servlet具有更高的效率,更容易使用,功能更強(qiáng)大,具有更好的可移植性,更節(jié)省投資。在未來的技術(shù)發(fā)展過程中,Servlet有可能徹底取代CGI。* 高效在傳統(tǒng)的CGI中,每個(gè)請(qǐng)求都要啟動(dòng)一個(gè)新的進(jìn)程,如果CGI程序本身的執(zhí)行時(shí)間較短,啟動(dòng)進(jìn)程所需要的開銷很可能反而超過實(shí)際執(zhí)行時(shí)間。而在Servlet中,每個(gè)請(qǐng)求由一個(gè)輕量級(jí)的Java線程處理(而不是
3、重量級(jí)的操作系統(tǒng)進(jìn)程)。在傳統(tǒng)CGI中,如果有N個(gè)并發(fā)的對(duì)同一CGI程序的請(qǐng)求,則該CGI程序的代碼在內(nèi)存中重復(fù)裝載了N次;而對(duì)于Servlet,處理請(qǐng)求的是N個(gè)線程,只需要一份Servlet類代碼。在性能優(yōu)化方面,Servlet也比CGI有著更多的選擇。* 方便Servlet提供了大量的實(shí)用工具例程,例如自動(dòng)地解析和解碼HTML表單數(shù)據(jù)、讀取和設(shè)置HTTP頭、處理Cookie、跟蹤會(huì)話狀態(tài)等。* 功能強(qiáng)大在Servlet中,許多使用傳統(tǒng)CGI程序很難完成的任務(wù)都可以輕松地完成。例如,Servlet能夠直接和Web服務(wù)器交互,而普通的CGI程序不能。Servlet還能夠在各個(gè)程序之間共享數(shù)據(jù),
4、使得數(shù)據(jù)庫連接池之類的功能很容易實(shí)現(xiàn)。* 可移植性好Servlet用Java編寫,Servlet API具有完善的標(biāo)準(zhǔn)。因此,為IPlanet Enterprise Server寫的Servlet無需任何實(shí)質(zhì)上的改動(dòng)即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流服務(wù)器都直接或通過插件支持Servlet。* 節(jié)省投資不僅有許多廉價(jià)甚至免費(fèi)的Web服務(wù)器可供個(gè)人或小規(guī)模網(wǎng)站使用,而且對(duì)于現(xiàn)有的服務(wù)器,如果它不支持Servlet的話,要加上這部分功能也往往是免費(fèi)的(或只需要極少的投資)。Java Servlet 與 JSP(JavaServer Pages) 的
5、比較:JavaServer Pages(JSP)是一種實(shí)現(xiàn)普通靜態(tài)HTML和動(dòng)態(tài)HTML混合編碼的技術(shù),JSP并沒有增加任何本質(zhì)上不能用Servlet實(shí)現(xiàn)的功能。但是,在JSP中編寫靜態(tài)HTML更加方便,不必再用println語句來輸出每一行HTML代碼。更重要的是,借助內(nèi)容和外觀的分離,頁面制作中不同性質(zhì)的任務(wù)可以方便地分開:比如,由頁面設(shè)計(jì)者進(jìn)行HTML設(shè)計(jì),同時(shí)留出供Servlet程序員插入動(dòng)態(tài)內(nèi)容的空間。Java Servlet API 2.2 簡(jiǎn)介Java Servlet API 2.2 的類和接口組成兩個(gè)Java 包,即:javax.servlet 和 javax.servlet.
6、http(還包括javax.servlet.jsp包,不在本篇文章討論范圍之內(nèi))。javax.servlet 包提供了控制 Servlet 生命周期所必需的 Servlet 接口,是編寫 Servlet 時(shí)必須要實(shí)現(xiàn)的。javax.servlet.http 包提供了從Servlet 接口派生出的專門用于處理 HTTP 請(qǐng)求的抽象類和一般的工具類。所有的Servlet 對(duì)象都要實(shí)現(xiàn)Servlet 接口,大多數(shù)情況下是作為已經(jīng)實(shí)現(xiàn)了Servlet 接口的javax.servlet.GenericServlet 和 javax.servlet.http.HttpServlet 這兩個(gè)抽象類的子類來間
7、接實(shí)現(xiàn)Servlet 接口。javax.servlet 包定義的類和接口:interface RequestDispatcher/定義一種對(duì)象,用于從客戶接受請(qǐng)求,并將請(qǐng)求發(fā)送到服務(wù)器上任何指定的資源,如一個(gè)Servlet 、JSP 或 HTML 文件。interface Servlet/定義了所有 Servlet 必須實(shí)現(xiàn)的方法。interface ServletConfig/定義Servlet config 對(duì)象,由Servlet 引擎用在 Servlet 初始化時(shí),向 Servlet 傳遞信息。interface ServletContext/定義了一系列方法,以便Servlet與其運(yùn)行
8、的環(huán)境通信。interface ServletRequest/定義了用于向Servlet傳遞客戶請(qǐng)求信息的對(duì)象。interface ServletResponse/定義了一個(gè)對(duì)象,由Servlet用于向客戶發(fā)送響應(yīng)。interface SingleThreadModel/用于保證Servlet在任一時(shí)刻,只處理一個(gè)請(qǐng)求。class GenericServlet/繼承Servlet接口,定義了一個(gè)通用的,與協(xié)議無關(guān)的Servlet。class ServletInputStream/定義了一個(gè)輸入流,用于由Servlet從中讀取客戶請(qǐng)求的二進(jìn)制數(shù)據(jù)。class ServletOutputStrea
9、m/定義了一個(gè)輸出流,用于由Servlet向客戶發(fā)送二進(jìn)制數(shù)據(jù)。class ServletException/定義了一個(gè)當(dāng)Servlet遇到問題時(shí)可以拋出的異常。class UnavailableException/定義了一種異常,用于由Servlet指明它永遠(yuǎn)或暫時(shí)不可用。javax.servlet.http 包定義的類和接口:interface HttpServletRequest/繼承了ServletRequest 接口,為HTTPServlet 提供請(qǐng)求信息。interface HttpServletResponse/繼承了ServletResponse 接口,為HTTPServlet
10、 輸出響應(yīng)信息提供支持。interface HttpSession/為維護(hù) HTTP 用戶的會(huì)話狀態(tài)提供支持。interface HttpSessionBindingListener/使得某對(duì)象在加入一個(gè)會(huì)話或從會(huì)話中刪除時(shí)能夠得到通知。interface HttpSessionContext/由Servlet 2.1 定義,該對(duì)象在新版本已不被支持。class Cookie/用在Servlet 中使用Cookie 技術(shù)class HttpServlet/定義了一個(gè)抽象類,繼承 GenericServlet 抽象類,應(yīng)被 HTTPServlet 繼承。class HttpSessionBind
11、ingEvent/定義了一種對(duì)象,當(dāng)某一個(gè)實(shí)現(xiàn)了HttpSessionBindingListener接口的對(duì)象被加入會(huì)話或從會(huì)/話中刪除時(shí),會(huì)收到該類對(duì)象的一個(gè)句柄class HttpUtils/提供了一系列便于編寫HTTPServlet 的方法。下面主要介紹javax.servlet.http提供的HTTP Servlet應(yīng)用編程接口。HTTP Servlet 使用一個(gè) HTML 表格來發(fā)送和接收數(shù)據(jù)。要?jiǎng)?chuàng)建一個(gè) HTTP Servlet,請(qǐng)擴(kuò)展 HttpServlet 類, 該類是用專門的方法來處理 HTML 表格的 GenericServlet 的一個(gè)子類。 HTML 表單是由 <
12、FORM> 和 </FORM> 標(biāo)記定義的。表單中典型地包含輸入字段(如文本輸入字段、復(fù)選框、單選按鈕和選擇列表)和用于提交數(shù)據(jù)的按鈕。當(dāng)提交信息時(shí),它們還指定服務(wù)器應(yīng)執(zhí)行哪一個(gè)Servlet(或其它的程序)。 HttpServlet 類包含 init()、destroy()、service() 等方法。其中 init() 和 destroy() 方法是繼承的。(1) init() 方法在 Servlet 的生命期中,僅執(zhí)行一次 init() 方法。它是在服務(wù)器裝入 Servlet 時(shí)執(zhí)行的。 可以配置服務(wù)器,以在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問 Servlet 時(shí)裝入 Servl
13、et。 無論有多少客戶機(jī)訪問 Servlet,都不會(huì)重復(fù)執(zhí)行 init() 。缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法來覆蓋它,典型的是管理服務(wù)器端資源。 例如,可能編寫一個(gè)定制 init() 來只用于一次裝入 GIF 圖像,改進(jìn) Servlet 返回 GIF 圖像和含有多個(gè)客戶機(jī)請(qǐng)求的性能。另一個(gè)示例是初始化數(shù)據(jù)庫連接。缺省的 init() 方法設(shè)置了 Servlet 的初始化參數(shù),并用它的 ServletConfig 對(duì)象參數(shù)來啟動(dòng)配置, 因此所有覆蓋 init() 方法的 Servlet 應(yīng)調(diào)用 super.init() 以確保仍然執(zhí)行這些任務(wù)。在調(diào)
14、用 service() 方法之前,應(yīng)確保已完成了 init() 方法。(2) service() 方法service() 方法是 Servlet 的核心。每當(dāng)一個(gè)客戶請(qǐng)求一個(gè)HttpServlet 對(duì)象,該對(duì)象的service() 方法就要被調(diào)用,而且傳遞給這個(gè)方法一個(gè)"請(qǐng)求"(ServletRequest)對(duì)象和一個(gè)"響應(yīng)"(ServletResponse)對(duì)象作為參數(shù)。 在 HttpServlet 中已存在 service() 方法。缺省的服務(wù)功能是調(diào)用與 HTTP 請(qǐng)求的方法相應(yīng)的 do 功能。例如, 如果 HTTP 請(qǐng)求方法為 GET,則缺省情況
15、下就調(diào)用 doGet() 。Servlet 應(yīng)該為 Servlet 支持的 HTTP 方法覆蓋 do 功能。因?yàn)?HttpServlet.service() 方法會(huì)檢查請(qǐng)求方法是否調(diào)用了適當(dāng)?shù)奶幚矸椒ǎ槐匾采w service() 方法。只需覆蓋相應(yīng)的 do 方法就可以了。當(dāng)一個(gè)客戶通過HTML 表單發(fā)出一個(gè)HTTP POST請(qǐng)求時(shí),doPost()方法被調(diào)用。與POST請(qǐng)求相關(guān)的參數(shù)作為一個(gè)單獨(dú)的HTTP 請(qǐng)求從瀏覽器發(fā)送到服務(wù)器。當(dāng)需要修改服務(wù)器端的數(shù)據(jù)時(shí),應(yīng)該使用doPost()方法。當(dāng)一個(gè)客戶通過HTML 表單發(fā)出一個(gè)HTTP GET請(qǐng)求或直接請(qǐng)求一個(gè)URL時(shí),doGet()方法被調(diào)
16、用。與GET請(qǐng)求相關(guān)的參數(shù)添加到URL的后面,并與這個(gè)請(qǐng)求一起發(fā)送。當(dāng)不會(huì)修改服務(wù)器端的數(shù)據(jù)時(shí),應(yīng)該使用doGet()方法。Servlet的響應(yīng)可以是下列幾種類型:一個(gè)輸出流,瀏覽器根據(jù)它的內(nèi)容類型(如text/HTML)進(jìn)行解釋。一個(gè)HTTP錯(cuò)誤響應(yīng), 重定向到另一個(gè)URL、servlet、JSP。(3) destroy() 方法destroy() 方法僅執(zhí)行一次,即在服務(wù)器停止且卸裝Servlet 時(shí)執(zhí)行該方法。典型的,將 Servlet 作為服務(wù)器進(jìn)程的一部分來關(guān)閉。缺省的 destroy() 方法通常是符合要求的,但也可以覆蓋它,典型的是管理服務(wù)器端資源。例如,如果 Servlet 在
17、運(yùn)行時(shí)會(huì)累計(jì)統(tǒng)計(jì)數(shù)據(jù),則可以編寫一個(gè) destroy() 方法,該方法用于在未裝入 Servlet 時(shí)將統(tǒng)計(jì)數(shù)字保存在文件中。另一個(gè)示例是關(guān)閉數(shù)據(jù)庫連接。當(dāng)服務(wù)器卸裝 Servlet 時(shí),將在所有 service() 方法調(diào)用完成后,或在指定的時(shí)間間隔過后調(diào)用 destroy() 方法。一個(gè)Servlet 在運(yùn)行service() 方法時(shí)可能會(huì)產(chǎn)生其它的線程,因此請(qǐng)確認(rèn)在調(diào)用 destroy() 方法時(shí),這些線程已終止或完成。(4) GetServletConfig()方法GetServletConfig()方法返回一個(gè) ServletConfig 對(duì)象,該對(duì)象用來返回初始化參數(shù)和ServletContext。ServletContext 接口提供有關(guān)servlet 的環(huán)境信息。(5) GetServletInfo()方法GetServletInfo()方法是一個(gè)可選的方法,它提供有關(guān)servlet 的信息,如作者、版本、版權(quán)。當(dāng)服務(wù)器調(diào)用sevlet 的Service()、doGet()和doPost()這三個(gè)方法時(shí),均需要 "請(qǐng)求"和"響應(yīng)"對(duì)象作為參數(shù)。"請(qǐng)求"對(duì)象提供有關(guān)請(qǐng)求的信息,而"響應(yīng)"對(duì)象提供了一個(gè)將響
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度礦山事故水池建設(shè)與安全生產(chǎn)保障合同
- 二零二五年度城市別墅購房定金合同
- 2025年度景觀施工項(xiàng)目安全監(jiān)理合同
- 2025年度電視劇劇本編排與制作合同
- 二零二五年度廣告?zhèn)髅絼趧?wù)派遣員工服務(wù)合同
- 酒店住宿意外事故責(zé)任免除與2025年度安全保障協(xié)議
- 二零二五年度老年贍養(yǎng)贍養(yǎng)金及醫(yī)療救助合同
- 辦公區(qū)域搬遷安排及流程梳理通知
- 關(guān)于銷售團(tuán)隊(duì)建設(shè)與管理的年度工作總結(jié)報(bào)告
- 美發(fā)店勞動(dòng)合同協(xié)議書
- (完整版)施工現(xiàn)場(chǎng)質(zhì)量、安全生產(chǎn)管理體系
- 項(xiàng)目團(tuán)隊(duì)管理課件
- 幼兒文學(xué)PPT(學(xué)前教育高職)完整全套教學(xué)課件
- QGDW10571-2018大截面導(dǎo)線壓接工藝導(dǎo)則
- 《國(guó)家中藥飲片炮制規(guī)范》全文
- 心肌炎病人的護(hù)理
- 部編版四年級(jí)語文下冊(cè)第3單元大單元整體教學(xué)設(shè)計(jì)課件(教案配套)
- 合成纖維第五章干法紡絲
- GBZ/T(衛(wèi)生) 277-2016職業(yè)病危害評(píng)價(jià)通則
- GB/T 5267.3-2008緊固件熱浸鍍鋅層
- GB/T 3498-2008潤(rùn)滑脂寬溫度范圍滴點(diǎn)測(cè)定法
評(píng)論
0/150
提交評(píng)論