Servlet是在服務(wù)器上運(yùn)行的小程序.而在java中應(yīng)用程序多是在容器中進(jìn)行生命周期的管理(這里指Tomact容器).
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、沈陽網(wǎng)站維護(hù)、網(wǎng)站推廣。Servlet基本的架構(gòu)圖首先是
web頁面通過提交表單tomact獲取傳遞過來的數(shù)據(jù),進(jìn)行解析創(chuàng)建HttpSaervletRequest,該對(duì)象包含了客戶端信息,如表單數(shù)據(jù),客戶端的主機(jī)名稱和ip地址.創(chuàng)建HttpServletResponse對(duì)象,可以向?yàn)g覽器寫入數(shù)據(jù).之后是調(diào)用Servelt,創(chuàng)建Servelet實(shí)例
創(chuàng)建servelet實(shí)例的過程中首先調(diào)用init方法,該方法只調(diào)用一次,響應(yīng)客戶請(qǐng)求階段。調(diào)用父類的service方法,在service中會(huì)根據(jù)Tomact傳遞過來的request對(duì)象分析是post還是get方法,所以servlet類必須有重寫doGet或doPost方法,并返回處理的結(jié)果。終止階段 調(diào)用destroy()方法
生命周期時(shí)序圖tomact為何會(huì)根據(jù)url找到對(duì)應(yīng)的Servel文件呢,這還是需要我們的反射文件
web.XML文件的反射作用1 tomact會(huì)根據(jù)url截取項(xiàng)目名稱
2根據(jù)url截取servlet的訪問名稱
3根據(jù)訪問名稱找到 servlet-name
4根據(jù)servel-name名稱就找到對(duì)應(yīng)的class文件
注意: tomact在創(chuàng)建serverl之前,已經(jīng)將客戶端傳遞的信息進(jìn)行了解析,并創(chuàng)建了HttpServeltRequest和HttpServletResponse對(duì)象,并將太對(duì)象傳遞給了servlet。
servelt的實(shí)例化過程了
根據(jù)web.xml文件裝載servelt類文件。并創(chuàng)建servelt實(shí)例
1調(diào)用srevelt的init()方法。
在Servlet的整個(gè)生命周期內(nèi),init()方法只被調(diào)用一次。
2調(diào)用service方法,匹配請(qǐng)求的方式,選擇呢調(diào)用doGet,doPost方法。
Servelt工作原理:首先簡單解釋一下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)。在Servlet接口和GenericServlet中是沒有doGet,doPost等等這些方法的,HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個(gè)Servlet的時(shí)候,都必須實(shí)現(xiàn)doGet或doPost等這些方法。
每一個(gè)自定義的Servlet都必須實(shí)現(xiàn)Servlet的接口,Servlet接口中定義了五個(gè)方法,其中比較重要的三個(gè)方法涉及到Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。GenericServlet是一個(gè)通用的,不特定于任何協(xié)議的Servlet,它實(shí)現(xiàn)了Servlet接口。而HttpServlet繼承于GenericServlet,因此HttpServlet也實(shí)現(xiàn)了Servlet接口。所以我們定義Servlet的時(shí)候只需要繼承HttpServlet即可。
Servlet接口和GenericServlet是不特定于任何協(xié)議的,而HttpServlet是特定于HTTP協(xié)議的類,所以HttpServlet中實(shí)現(xiàn)了service()方法,并將請(qǐng)求ServletRequest,ServletResponse強(qiáng)轉(zhuǎn)為HttpRequest和HttpResponse。
Servlet終止階段:
當(dāng)WEB應(yīng)用被終止,或Servlet容器終止運(yùn)行,或Servlet容器重新裝載Servlet新實(shí)例時(shí),Servlet容器會(huì)先調(diào)用Servlet的destroy()方法,在destroy()方法中可以釋放掉Servlet所占用的資源。
測試的例子.測試時(shí)序圖
importjava.io.IOException; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; public class testextends HttpServlet { //默認(rèn)構(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)用的時(shí)序?yàn)?/p>
首先創(chuàng)造該類的構(gòu)造方法,然后初始化該類,最后是根據(jù)service方法調(diào)用doget方法,調(diào)用該類只實(shí)例化一次。
總結(jié):通過以前的認(rèn)識(shí)和現(xiàn)在的總結(jié)。了解到servelt對(duì)于處理業(yè)務(wù)邏輯有很大的作用,但是對(duì)于輸出處理html的樣式文件卻是一個(gè)很大的問題。servelt的生命周期的創(chuàng)建和以前學(xué)習(xí)aspn.net控件的創(chuàng)建,生命周期大相近庭,不同環(huán)節(jié)在于先調(diào)用了父類的srvcie方法。分析發(fā)現(xiàn)servel對(duì)多線程的處理,靠的不是自身,而是通過容器進(jìn)行管理的。所以servlet對(duì)于線程的安全不是很好。
網(wǎng)站名稱:J2EE--Servlet生命周期與原理
文章網(wǎng)址:http://m.rwnh.cn/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)