servlet-我們到底能走多遠系列(7)

servlet-我們到底能走多遠系列(7)

ID:17880144

大小:200.00 KB

頁數(shù):9頁

時間:2018-09-08

servlet-我們到底能走多遠系列(7)_第1頁
servlet-我們到底能走多遠系列(7)_第2頁
servlet-我們到底能走多遠系列(7)_第3頁
servlet-我們到底能走多遠系列(7)_第4頁
servlet-我們到底能走多遠系列(7)_第5頁
資源描述:

《servlet-我們到底能走多遠系列(7)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。

1、Servlet的核心類圖如下:上面的servlet只是接口,相當于描述了servlet的標準,也就是說與協(xié)議無關。而HttpServlet的實現(xiàn)是根據(jù)Http協(xié)議來完成的??聪旅娴慕貓D:  打開源碼看后發(fā)現(xiàn)大多數(shù)接口和抽象類,那么真正的實現(xiàn)都在哪呢?在servlet容器源代碼里,即類似Tomcat這樣的servlet容器?! ∷晕矣X得可以這樣理解Servlet的作用:它提供了操控的按鈕,這些按鈕一旦被安裝到Servlet容器里面,http://gexing.qqq80.com我們就可以通過這些按鈕操控

2、servlet容器,從而管理我們自己的Servlet實例?! ∵@一點很重要。所以閱讀Servlet源碼其實就是了解他的基本結構和API,我們真正要讀的是Tomcat的源碼!?Servlet的運行結構和API:首先看下一次Http請求-響應的過程:  A,首先客戶端通過瀏覽器向服務器發(fā)送Http請求;  B,Tomcat監(jiān)聽服務器的8080端口,當有Http請求發(fā)過來之后,解析出項目名稱,然后到webapps目錄下搜索到該項目文件夾?! ,Tomcat作為servlet的容器,實例化第一次請求調(diào)用的的s

3、ervlet實例(以后再有相同的servlet的請求,使用第一次的實例)?! ,調(diào)用init()方法,初始化工作?! ,調(diào)用HttpServlet的service方法,中間會更加請求,調(diào)用doGet或doPost方法,執(zhí)行核心邏輯代碼?! ,執(zhí)行完servlet后,返回響應,客戶端瀏覽器根據(jù)響應呈現(xiàn)效果。然后我們看下基本的運行機制:從圖上可以看出,不同的用戶請求并發(fā)使用同一個Servlet實例,這是一個比較重要的基礎機制。Container解析Http請求后,實例化Servlet,因為是Http請

4、求,會執(zhí)行HttpServlet的代碼:首先會執(zhí)行HttpServlet中的service(ServletRequestreq,ServletResponseres)方法:publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException{HttpServletRequestrequest;HttpServletResponseresponse;http://www.caise8.comtry

5、{request=(HttpServletRequest)req;//請求轉換成Http請求response=(HttpServletResponse)res;//響應轉換成Http響應}catch(ClassCastExceptione){thrownewServletException("non-HTTPrequestorresponse");}service(request,response);//調(diào)用處理Http的service方法}然后會調(diào)用service(HttpServletRequest

6、req,HttpServletResponseresp)方法:protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{Stringmethod=req.getMethod();//取得req中的方法類型if(method.equals(METHOD_GET)){//根據(jù)方法類型來決定執(zhí)行后續(xù)的方法,我們只關注doGet和doPostlonglastModif

7、ied=getLastModified(req);if(lastModified==-1){doGet(req,resp);}else{longifModifiedSince=req.getDateHeader(HEADER_IFMODSINCE);if(ifModifiedSince<(lastModified/1000*1000)){maybeSetLastModified(resp,lastModified);doGet(req,resp);//如此我們就能執(zhí)行到自己寫的doGet方法,從而執(zhí)行自

8、己的業(yè)務邏輯。}else{resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);}}}elseif(method.equals(METHOD_HEAD)){longlastModified=getLastModified(req);maybeSetLastModified(resp,lastModified);doHead(req,resp);}elseif(method.equals(ME

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。