Servlet 的職責(zé)如下:
(1) 創(chuàng)建并返回一個(gè)包含基于客戶請(qǐng)求性質(zhì)的動(dòng)態(tài)內(nèi)容的完整的 HTML 頁面。
(2) 創(chuàng)建可嵌入到現(xiàn)有 HTML 頁面中的一部分 HTML 頁面( HTML 片段)。
(3) 與其它服務(wù)器資源(包括數(shù)據(jù)庫和基于 Java 的應(yīng)用程序)進(jìn)行通信。
(4) 用多個(gè)客戶機(jī)處理連接,接收多個(gè)客戶機(jī)的輸入,并將結(jié)果廣播到多個(gè)客戶機(jī)上。例如, Servlet 可以是多參與者的游戲服務(wù)器。(5) 當(dāng)允許在單連接方式下傳送數(shù)據(jù)的情況下,在瀏覽器上打開服務(wù)器至 applet 的新連接,并將該連接保持在打開狀態(tài)。當(dāng)允許客戶機(jī)和服務(wù)器簡單、高效地執(zhí)行會(huì)話的情況下, applet 也可以啟動(dòng)客戶瀏覽器和服務(wù)器之間的連接。可以通過定制協(xié)議或標(biāo)準(zhǔn)(如 IIOP )進(jìn)行通信。
(6) 對(duì)特殊的處理采用 MIME 類型過濾數(shù)據(jù),例如圖像轉(zhuǎn)換和服務(wù)器端包括( SSI )。
(7) 將定制的處理提供給所有服務(wù)器的標(biāo)準(zhǔn)例行程序。例如, Servlet 可以修改如何認(rèn)證用戶。
1、Servlet執(zhí)行過程
用戶請(qǐng)求一個(gè)Servlet,Servlet容器自動(dòng)構(gòu)建請(qǐng)求和響應(yīng)對(duì)象,然后執(zhí)行Servlet的service()方法,該方法會(huì)接收請(qǐng)求和響應(yīng)對(duì)象,通過響應(yīng)對(duì)象將處理結(jié)果發(fā)送給用戶。
2、怎么請(qǐng)求Servlet
用戶通過一個(gè)URL來請(qǐng)求一個(gè)Servlet。
3、怎么處理請(qǐng)求
當(dāng)用戶請(qǐng)求Servlet時(shí),容器構(gòu)建ServletRequest對(duì)象request,并傳遞給Servlet的Service()方法,Service通過request對(duì)象獲取到請(qǐng)求的參數(shù),然后,根據(jù)參數(shù)做出相應(yīng)的處理,通過ServletResponse對(duì)象來向客戶端發(fā)送響應(yīng)內(nèi)容。
4、怎么響應(yīng)客戶端
當(dāng)用戶請(qǐng)求一個(gè)Servlet時(shí)候,容器會(huì)自動(dòng)創(chuàng)建ServletResponse對(duì)象response,然后通過response對(duì)象向客戶端發(fā)送響應(yīng)內(nèi)容。
5、Servlet的生命周期
a、Servlet的class經(jīng)過部署,并啟動(dòng)容器
b、(當(dāng)請(qǐng)求該Servlet時(shí)候)容器自動(dòng)創(chuàng)建Servlet對(duì)象xServlet,然后xServlet調(diào)用其init()方法。到此,Servlet初始化結(jié)束。
c、一旦客戶端請(qǐng)求該Servlet,xServlet自動(dòng)調(diào)用service()來處理請(qǐng)求。
d、一旦很長時(shí)間都沒有請(qǐng)求該Servlet(或者說該Servlet超時(shí)),則容器會(huì)將xServlet從容器中清除掉。
servlet是一種獨(dú)立于平臺(tái)和協(xié)議的服務(wù)器端的Java技術(shù),可以用來生成動(dòng)態(tài)的Web頁面。與傳統(tǒng)的CGI(計(jì)算機(jī)圖形接口)和許多其他類似CGI技術(shù)相比,Servlet具有更好的可移植性、更強(qiáng)大的功能,更少的投資,更高的效率,更好的安全性等特點(diǎn)。
Servlet是使用Java Servlet應(yīng)用程序接口(API)及相關(guān)類和方法的Java程序。Java語言能夠?qū)崿F(xiàn)的功能,Servlet基本上都能實(shí)現(xiàn)(除了圖形界面之外)。Servlet主要用于處理客戶端傳來的Http請(qǐng)求,并返回一個(gè)響應(yīng)。通常所說的Servlet就是指HttpServlet,用于處理Http請(qǐng)求,其能夠處理的請(qǐng)求有doGet()、doPost()、service()等方法。在開發(fā)Servlet時(shí),可以直接繼承javax.servlet.http.HttpServlet。
Servlet應(yīng)用范圍很廣泛,我們現(xiàn)在用的很多流行的框架技術(shù),其最基本的代碼離不開Servelt的支持。
servlet的工作機(jī)制如下:
①客戶端(瀏覽器)在地址欄輸入一個(gè)URL發(fā)起HTTP請(qǐng)求。
②服務(wù)器根據(jù)URL指定要執(zhí)行的Servlet。
③servlet運(yùn)行service方法,并給服務(wù)器作出相應(yīng)。
④服務(wù)器接收到了servlet的響應(yīng)數(shù)據(jù),將數(shù)據(jù)返回給請(qǐng)求者。
⑤客戶端接受響應(yīng)數(shù)據(jù),作出展示。
servlet是連接前臺(tái)和后臺(tái)service層的橋梁,是數(shù)據(jù)的中轉(zhuǎn)站。得到并處理前臺(tái)的參數(shù)request.getParameter("x")之后調(diào)用service層進(jìn)行業(yè)務(wù)處理,調(diào)用完后再指定返回到的jsp或者其他操作。
Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務(wù)程序或服務(wù)連接器,用Java編寫的服務(wù)器端程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,主要功能在于交互式地瀏覽和生成數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容。
Servlet工作原理:
1、首先簡單解釋一下Servlet接收和響應(yīng)客戶請(qǐng)求的過程,首先客戶發(fā)送一個(gè)請(qǐng)求,Servlet是調(diào)用service()方法對(duì)請(qǐng)求進(jìn)行響應(yīng)的,通過源代碼可見,service()方法中對(duì)請(qǐng)求的方式進(jìn)行了匹配,選擇調(diào)用doGet,doPost等這些方法,然后再進(jìn)入對(duì)應(yīng)的方法中調(diào)用邏輯層的方法,實(shí)現(xiàn)對(duì)客戶的響應(yīng)。
2、每一個(gè)自定義的Servlet都必須實(shí)現(xiàn)Servlet的接口,Servlet接口中定義了五個(gè)方法,其中比較重要的三個(gè)方法涉及到Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。
3、Servlet接口和GenericServlet是不特定于任何協(xié)議的,而HttpServlet是特定于HTTP協(xié)議的類,所以HttpServlet中實(shí)現(xiàn)了service()方法,并將請(qǐng)求ServletRequest、ServletResponse 強(qiáng)轉(zhuǎn)為HttpRequest 和 HttpResponse。
servlet是Java Servlet的簡稱,稱為小服務(wù)程序或服務(wù)連接器,用Java編寫的服務(wù)器端程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,主要功能在于交互式地瀏覽和生成數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容。
狹義的servlet是指Java語言實(shí)現(xiàn)的一個(gè)接口,廣義的servlet是指任何實(shí)現(xiàn)了這個(gè)servlet接口的類,一般情況下,人們將servlet理解為后者。
servlet運(yùn)行于支持Java的應(yīng)用服務(wù)器中。從原理上講,servlet可以響應(yīng)任何類型的請(qǐng)求,但絕大多數(shù)情況下servlet只用來擴(kuò)展基于HTTP協(xié)議的Web服務(wù)器。
最早支持servlet標(biāo)準(zhǔn)的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服務(wù)器開始支持標(biāo)準(zhǔn)的servlet。
1、init() 方法
在 Servlet 的生命期中,僅執(zhí)行一次 init() 方法。它是在服務(wù)器裝入 Servlet 時(shí)執(zhí)行的。 可以配置服務(wù)器,以在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問 Servlet 時(shí)裝入 Servlet。 無論有多少客戶機(jī)訪問 Servlet,都不會(huì)重復(fù)執(zhí)行 init() 。
缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法來覆蓋它,典型的是管理服務(wù)器端資源。
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 功能。
3、doGet() 方法
當(dāng)一個(gè)客戶通過 HTML 表單發(fā)出一個(gè) HTTP GET 請(qǐng)求或直接請(qǐng)求一個(gè) URL 時(shí),doGet() 方法被調(diào)用。與 GET 請(qǐng)求相關(guān)的參數(shù)添加到 URL 的后面,并與這個(gè)請(qǐng)求一起發(fā)送。當(dāng)不會(huì)修改服務(wù)器端的數(shù)據(jù)時(shí),應(yīng)該使用 doGet() 方法。
4、doPost() 方法
當(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() 方法。
5、destroy() 方法
destroy() 方法僅執(zhí)行一次,即在服務(wù)器停止且卸裝 Servlet 時(shí)執(zhí)行該方法。典型的,將 Servlet 作為服務(wù)器進(jìn)程的一部分來關(guān)閉。缺省的 destroy() 方法通常是符合要求的,但也可以覆蓋它,典型的是管理服務(wù)器端資源。
6、getServletConfig() 方法
getServletConfig() 方法返回一個(gè) ServletConfig 對(duì)象,該對(duì)象用來返回初始化參數(shù)和 ServletContext。ServletContext 接口提供有關(guān) servlet 的環(huán)境信息。
7、getServletInfo() 方法
getServletInfo() 方法是一個(gè)可選的方法,它提供有關(guān) servlet 的信息,如作者、版本、版權(quán)。
一個(gè)用戶登錄網(wǎng)站使用過程中只產(chǎn)生一個(gè)session,request.getSession();不管在哪個(gè)地方獲取都是同一個(gè),里面所放的對(duì)象屬性也是一樣的,這個(gè)sessin可以就代表目前用戶對(duì)話