




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