Servlet
Java Servlet前塔,用Java編寫的服務(wù)器端程序
其主要功能在于交互式地瀏覽和修改數(shù)據(jù)侵俗,生成動態(tài)Web內(nèi)容
狹義的Servlet指Java語言實(shí)現(xiàn)的一個(gè)接口
廣義的Servlet指任何實(shí)現(xiàn)了Servlet接口的類
Setvlet運(yùn)行于支持Java的應(yīng)用服務(wù)器中,原理上說,Servlet可以響應(yīng)任何類型的請求纬朝,主要用于擴(kuò)展基于HTTP協(xié)議的Web服務(wù)器
由來
Servlet是在服務(wù)器上運(yùn)行的小程序
通常,服務(wù)器采用CGI應(yīng)用程序完成一些根據(jù)用戶輸入訪問數(shù)據(jù)庫的程序掀潮。在通信量大的服務(wù)器上菇夸,Servlet執(zhí)行速度更快,各個(gè)用戶請求被激活成單個(gè)程序中的一個(gè)線程胧辽,而無需創(chuàng)建單獨(dú)的進(jìn)程峻仇,使得服務(wù)器端處理請求的系統(tǒng)開銷明顯降低
- 實(shí)現(xiàn)過程
Servlet主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài)Web內(nèi)容
- 客戶端發(fā)送請求至服務(wù)器
- 服務(wù)器將請求信息發(fā)送至Servlet
- Servlet生成響應(yīng)內(nèi)容并將其傳給服務(wù)器
- 服務(wù)器將響應(yīng)返回給客戶端
生命周期
- 客戶端請求該Servlet
- 加載Servlet類到內(nèi)存
- 實(shí)例化并調(diào)用init()方法初始化Servlet
- 調(diào)用
Servlet
的service
方法(根據(jù)請求方法不同邑商,調(diào)用doGet()摄咆、doPost()、doHead()人断、doPut()吭从、doTrace()、doDelete()恶迈、doOptions()) - destroy()
- 客戶端發(fā)送請求至服務(wù)器
- 服務(wù)器啟動并調(diào)用Servlet涩金,Servlet根據(jù)客戶端請求生成響應(yīng)內(nèi)容并將其傳給服務(wù)器
- 服務(wù)器將響應(yīng)返回客戶端
編程接口
HTTPServlet
使用一個(gè)HTML表單來發(fā)送和接收數(shù)據(jù)
擴(kuò)展HttpServlet
類來創(chuàng)建HTTPServlet類,該類是用專門的方法來處理HTML表單的GenericServlet
的一個(gè)子類
HttpServlet
類包含init(), destroy(), service()等方法暇仲,init()和destroy()方法繼承而來
- init()方法
在Servlet生命周期中步做,僅執(zhí)行一次init()方法,在服務(wù)器裝入Servlet時(shí)執(zhí)行奈附。也可以配置服務(wù)器全度,在啟動或者客戶端首次訪問Servlet時(shí)裝入
缺省的init()方法設(shè)置了Servlet的初始化參數(shù),并用ServletConfig對象參數(shù)來啟動配置斥滤,所有覆蓋init()方法的Servlet應(yīng)調(diào)用super.init()確保仍然執(zhí)行這些任務(wù)
service()方法
Servlet核心将鸵,缺省的服務(wù)功能是調(diào)用與HTTP請求的方法相應(yīng)的do功能
Servlet響應(yīng)可以是:
一個(gè)輸出流,瀏覽器根據(jù)內(nèi)容進(jìn)行解釋
一個(gè)HTTP錯(cuò)誤響應(yīng)佑颇,重定向到另一個(gè)URL顶掉、servlet、JSPdoGet()方法
當(dāng)一個(gè)客戶通過 HTML 表單發(fā)出一個(gè) HTTP GET 請求或直接請求一個(gè) URL 時(shí)挑胸,doGet() 方法被調(diào)用痒筒。與 GET 請求相關(guān)的參數(shù)添加到 URL 的后面,并與這個(gè)請求一起發(fā)送茬贵。當(dāng)不會修改服務(wù)器端的數(shù)據(jù)時(shí)簿透,應(yīng)該使用 doGet() 方法doPost()方法
當(dāng)一個(gè)客戶通過 HTML 表單發(fā)出一個(gè) HTTP POST 請求時(shí),doPost() 方法被調(diào)用闷沥。與 POST 請求相關(guān)的參數(shù)作為一個(gè)單獨(dú)的 HTTP 請求從瀏覽器發(fā)送到服務(wù)器萎战。當(dāng)需要修改服務(wù)器端的數(shù)據(jù)時(shí),應(yīng)該使用 doPost() 方法destroy()方法
destroy() 方法僅執(zhí)行一次舆逃,即在服務(wù)器停止且卸裝 Servlet 時(shí)執(zhí)行該方法蚂维。典型的戳粒,將 Servlet 作為服務(wù)器進(jìn)程的一部分來關(guān)閉。缺省的 destroy() 方法通常是符合要求的虫啥,但也可以覆蓋它蔚约,典型的是管理服務(wù)器端資源。例如涂籽,如果 Servlet 在運(yùn)行時(shí)會累計(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í)可能會產(chǎn)生其它的線程,因此請確認(rèn)在調(diào)用 destroy() 方法時(shí)斤吐,這些線程已終止或完成getServletConfig()方法
getServletConfig() 方法返回一個(gè) ServletConfig 對象搔涝,該對象用來返回初始化參數(shù)和 ServletContext。ServletContext 接口提供有關(guān) servlet 的環(huán)境信息getServletInfo()方法
getServletInfo() 方法是一個(gè)可選的方法和措,它提供有關(guān) servlet 的信息庄呈,如作者、版本派阱、版權(quán)
當(dāng)服務(wù)器調(diào)用 sevlet 的 service()诬留、doGet() 和 doPost() 這三個(gè)方法時(shí),均需要 “請求”和“響應(yīng)”對象作為參數(shù)颁褂」氏欤“請求”對象提供有關(guān)請求的信息傀广,而“響應(yīng)”對象提供了一個(gè)將響應(yīng)信息返回給瀏覽器的一個(gè)通信途徑
javax.servlet 軟件包中的相關(guān)類為 ServletResponse 和 ServletRequest颁独,而 javax.servlet.http 軟件包中的相關(guān)類為 HttpServletRequest 和 HttpServletResponse。Servlet 通過這些對象與服務(wù)器通信并最終與客戶端通信伪冰。Servlet 能通過調(diào)用"請求"對象的方法獲知客戶端環(huán)境誓酒,服務(wù)器環(huán)境的信息和所有由客戶機(jī)提供的信息。Servlet 可以調(diào)用“響應(yīng)”對象的方法發(fā)送響應(yīng)贮聂,該響應(yīng)是準(zhǔn)備發(fā)回客戶端的
參考文獻(xiàn):
- 百科servlet