新聞中心
在JavaWeb學(xué)習(xí)研究中,Servlet扮演重要的作用,學(xué)好它,是后續(xù)JavaWeb學(xué)習(xí)的良好基礎(chǔ)。

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出城子河免費(fèi)做網(wǎng)站回饋大家。
無論是SSH,還是SSM,微服務(wù)JavaWeb技術(shù),都應(yīng)先學(xué)好Servlet,從而達(dá)到事半功倍的效果,本篇將主要分析Servlet的運(yùn)行原理。
一、UML
下圖為Servlet UML關(guān)系圖。
從圖中可以看出:
抽象類HttpServlet繼承抽象類GenericServlet,其有兩個(gè)比較關(guān)鍵的方法,doGet()和doPost()
GenericServlet實(shí)現(xiàn)接口Servlet,ServletConfig,Serializable
MyServlet(用戶自定義Servlet類)繼承HttpServlet,重寫抽象類HttpServlet的doGet()和doPost()方法
注:任何一個(gè)用戶自定義Servlet,只需重寫抽象類HttpServlet的doPost()和doGet()即可,如上圖的MyServlet
二、Servlet在容器中的執(zhí)行過程
Servlet只有放在容器中,方可執(zhí)行,且Servlet容器種類較多,如Tomcat,WebLogic等。
下圖為簡單的請(qǐng)求響應(yīng)模型。
分析:
瀏覽器向服務(wù)器發(fā)出GET請(qǐng)求(請(qǐng)求服務(wù)器ServletA)
服務(wù)器上的容器邏輯接收到該url,根據(jù)該url判斷為Servlet請(qǐng)求,此時(shí)容器邏輯將產(chǎn)生兩個(gè)對(duì)象:請(qǐng)求對(duì)象(HttpServletRequest)和響應(yīng)對(duì)象(HttpServletResponce)
容器邏輯根據(jù)url找到目標(biāo)Servlet(本示例目標(biāo)Servlet為ServletA),且創(chuàng)建一個(gè)線程A
容器邏輯將剛才創(chuàng)建的請(qǐng)求對(duì)象和響應(yīng)對(duì)象傳遞給線程A
容器邏輯調(diào)用Servlet的service()方法
service()方法根據(jù)請(qǐng)求類型(本示例為GET請(qǐng)求)調(diào)用doGet()(本示例調(diào)用doGet())或doPost()方法
doGet()執(zhí)行完后,將結(jié)果返回給容器邏輯
線程A被銷毀或被放在線程池中
注意:
在容器中的每個(gè)Servlet原則上只有一個(gè)實(shí)例
每個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)線程
多個(gè)線程可作用于同一個(gè)Servlet(這是造成Servlet線程不安全的根本原因)
每個(gè)線程一旦執(zhí)行完任務(wù),就被銷毀或放在線程池中等待回收
三、Servlet在JavaWeb中扮演的角色
Servlet在JavaWeb中,扮演兩個(gè)角色:頁面角色和控制器角色。
有了jsp等動(dòng)態(tài)頁面技術(shù)后,Servlet更側(cè)重于控制器角色,jsp+servlert+model 形成基本的三層架構(gòu)
(一)頁面Page角色
(二)控制器角色
jsp充當(dāng)頁面角色,Servlet扮演控制器角色,兩者組合構(gòu)建基本的MVC三層架構(gòu)模式
四、Servlet在容器中的生命周期
下圖為Servlet生命周期簡要概圖
分析:
***步:容器先加載Servlet類
第二步:容器實(shí)例化Servlet(Servlet無參構(gòu)造函數(shù)執(zhí)行)
第三步:執(zhí)行init()方法(在Servlet生命周期中,只執(zhí)行一次,且在service()方法執(zhí)行前執(zhí)行)
第四步:執(zhí)行service()方法,處理客戶請(qǐng)求,doPost()或doGet()
第五步:執(zhí)行destroy(),銷毀線程
分享題目:揭秘JavaWeb技術(shù)內(nèi)幕,別讓CRUD麻木了你!
轉(zhuǎn)載來源:http://m.fisionsoft.com.cn/article/djppesi.html


咨詢
建站咨詢
