Servlet是在服務(wù)器上運行的小程序.而在java中應(yīng)用程序多是在容器中進行生命周期的管理(這里指Tomact容器).

首先是
web頁面通過提交表單tomact獲取傳遞過來的數(shù)據(jù),進行解析創(chuàng)建HttpSaervletRequest,該對象包含了客戶端信息,如表單數(shù)據(jù),客戶端的主機名稱和ip地址.創(chuàng)建HttpServletResponse對象,可以向瀏覽器寫入數(shù)據(jù).之后是調(diào)用Servelt,創(chuàng)建Servelet實例
創(chuàng)建servelet實例的過程中首先調(diào)用init方法,該方法只調(diào)用一次,響應(yīng)客戶請求階段。調(diào)用父類的service方法,在service中會根據(jù)Tomact傳遞過來的request對象分析是post還是get方法,所以servlet類必須有重寫doGet或doPost方法,并返回處理的結(jié)果。終止階段 調(diào)用destroy()方法
生命周期時序圖tomact為何會根據(jù)url找到對應(yīng)的Servel文件呢,這還是需要我們的反射文件
web.XML文件的反射作用1 tomact會根據(jù)url截取項目名稱
2根據(jù)url截取servlet的訪問名稱
3根據(jù)訪問名稱找到 servlet-name
4根據(jù)servel-name名稱就找到對應(yīng)的class文件
注意: tomact在創(chuàng)建serverl之前,已經(jīng)將客戶端傳遞的信息進行了解析,并創(chuàng)建了HttpServeltRequest和HttpServletResponse對象,并將太對象傳遞給了servlet。
servelt的實例化過程了
根據(jù)web.xml文件裝載servelt類文件。并創(chuàng)建servelt實例
1調(diào)用srevelt的init()方法。
在Servlet的整個生命周期內(nèi),init()方法只被調(diào)用一次。
2調(diào)用service方法,匹配請求的方式,選擇呢調(diào)用doGet,doPost方法。
Servelt工作原理:首先簡單解釋一下Servlet接收和響應(yīng)客戶請求的過程,首先客戶發(fā)送一個請求,Servlet是調(diào)用service()方法對請求進行響應(yīng)的,通過源代碼可見,service()方法中對請求的方式進行了匹配,選擇調(diào)用doGet,doPost等這些方法,然后再進入對應(yīng)的方法中調(diào)用邏輯層的方法,實現(xiàn)對客戶的響應(yīng)。在Servlet接口和GenericServlet中是沒有doGet,doPost等等這些方法的,HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個Servlet的時候,都必須實現(xiàn)doGet或doPost等這些方法。
每一個自定義的Servlet都必須實現(xiàn)Servlet的接口,Servlet接口中定義了五個方法,其中比較重要的三個方法涉及到Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。GenericServlet是一個通用的,不特定于任何協(xié)議的Servlet,它實現(xiàn)了Servlet接口。而HttpServlet繼承于GenericServlet,因此HttpServlet也實現(xiàn)了Servlet接口。所以我們定義Servlet的時候只需要繼承HttpServlet即可。
Servlet接口和GenericServlet是不特定于任何協(xié)議的,而HttpServlet是特定于HTTP協(xié)議的類,所以HttpServlet中實現(xiàn)了service()方法,并將請求ServletRequest,ServletResponse強轉(zhuǎn)為HttpRequest和HttpResponse。
Servlet終止階段:
當WEB應(yīng)用被終止,或Servlet容器終止運行,或Servlet容器重新裝載Servlet新實例時,Servlet容器會先調(diào)用Servlet的destroy()方法,在destroy()方法中可以釋放掉Servlet所占用的資源。
測試的例子.測試時序圖
importjava.io.IOException; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; public class testextends HttpServlet { //默認構(gòu)造 publictest(){ System.out.println("---構(gòu)造函數(shù)-------"+"n"); } publicvoid doGet(HttpServletRequest request,HttpServletResponse response) throwsServletException,IOException { System.out.print("----doget------"+"n"); } public void init() throws ServletException{ System.out.print("----Init------"+"n"); } }
通過調(diào)用該srevel類,發(fā)現(xiàn)調(diào)用的時序為
首先創(chuàng)造該類的構(gòu)造方法,然后初始化該類,最后是根據(jù)service方法調(diào)用doget方法,調(diào)用該類只實例化一次。
總結(jié):通過以前的認識和現(xiàn)在的總結(jié)。了解到servelt對于處理業(yè)務(wù)邏輯有很大的作用,但是對于輸出處理html的樣式文件卻是一個很大的問題。servelt的生命周期的創(chuàng)建和以前學(xué)習(xí)aspn.net控件的創(chuàng)建,生命周期大相近庭,不同環(huán)節(jié)在于先調(diào)用了父類的srvcie方法。分析發(fā)現(xiàn)servel對多線程的處理,靠的不是自身,而是通過容器進行管理的。所以servlet對于線程的安全不是很好。
網(wǎng)站名稱:J2EE--Servlet生命周期與原理
文章網(wǎng)址:http://chinadenli.net/article8/cgicop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、電子商務(wù)、搜索引擎優(yōu)化、定制開發(fā)、網(wǎng)站制作、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)