日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

servlet 规范_Tomcat原理解析(壹)— Servlet

發(fā)布時(shí)間:2025/3/15 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 servlet 规范_Tomcat原理解析(壹)— Servlet 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??? Tomcat 湯姆貓大家應(yīng)該都不陌生,是我們Javaer都應(yīng)該知道的內(nèi)容,它是一個(gè)Web容器,是Java Web的基礎(chǔ),所以我們都應(yīng)該了解了解其原理相關(guān)內(nèi)容。

我們先從Servlet講起:

Servlet

????在編寫(xiě)Servlet應(yīng)用時(shí),必須遵守Servlet規(guī)范,即Servlet接口和Servlet容器的一整套規(guī)范被稱(chēng)作Servlet規(guī)范,來(lái)看下圖:

????Servlet通俗將就是一個(gè)接口,實(shí)現(xiàn)了Servlet的接口的類(lèi)即我們的業(yè)務(wù)類(lèi),Servlet接口很簡(jiǎn)單:

public interface Servlet { void init(ServletConfig config) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest req, ServletResponse res)throws ServletException, IOExc String getServletInfo(); void destroy();}
  • 其中Service是最重要的方法,是實(shí)現(xiàn)業(yè)務(wù)類(lèi)的方法,參數(shù)是ServletRequest,ServletResponse,其中將請(qǐng)求的所有信息封裝成ServletRequest,比如cookie,請(qǐng)求頭,ServletResponse則是返回的對(duì)象

  • initdestory是聲明周期方法,在servlet創(chuàng)建時(shí)調(diào)用init方法,在銷(xiāo)毀時(shí)調(diào)用destory方法,可以初始化資源和釋放資源

  • ServetConfig是一個(gè)配置對(duì)象,封裝初始化參數(shù)。

Servlet容器:

??? Servlet容器是用來(lái)管理Servlet的,Tomcat將請(qǐng)求交給Servlet容器處理,Servlet容器會(huì)轉(zhuǎn)發(fā)到具體的Servlet,如果還沒(méi)有創(chuàng)建,則需要先加載并實(shí)例化這個(gè)Servlet并調(diào)用Servlet的Service方法;

Servlet容器請(qǐng)求流程:

  • 當(dāng)客戶(hù)請(qǐng)求某個(gè)資源時(shí),HTTP 服務(wù)器會(huì)用一個(gè) ServletRequest 對(duì)象把客戶(hù)的請(qǐng)求信息封裝起來(lái),

  • 然后調(diào)用 Servlet 容器的 service 方法,Servlet 容器拿到請(qǐng)求后,根據(jù)請(qǐng)求的URL 和 Servlet 的映射關(guān)系,找到相應(yīng)的 Servlet,如果 Servlet 還沒(méi)有被加載,就用反射機(jī)制創(chuàng)建這個(gè) Servlet,

  • 并調(diào)用 Servlet 的 init 方法來(lái)完成初始化,接著調(diào)用 Servlet 的service 方法來(lái)處理請(qǐng)求,

  • 把 ServletResponse 對(duì)象返回給 HTTP 服務(wù)器,HTTP 服務(wù)器會(huì)把響應(yīng)發(fā)送給客戶(hù)端 ?

ServletContext

????每一個(gè)ServletContext對(duì)應(yīng)一個(gè)Web應(yīng)用,Servlet容器在啟動(dòng)時(shí),為每一個(gè)Web應(yīng)用創(chuàng)建一個(gè)ServletContext對(duì)象,一個(gè)Web容器中有可能有多個(gè)Servlet,我們就可以將ServletContext看做是一個(gè)全局對(duì)象,用來(lái)共享數(shù)據(jù)(Web應(yīng)用的初始化參數(shù)、Web應(yīng)用目錄下的文件資源等數(shù)據(jù))

Filter

??? Filter是過(guò)濾器,這個(gè)接口允許對(duì)請(qǐng)求和響應(yīng)做一些統(tǒng)一的處理,比如你可以根據(jù)請(qǐng)求的頻率來(lái)限制訪問(wèn),或者過(guò)濾不合法字符。

過(guò)濾器的工作原理是這樣的:

??? Web 應(yīng)用部署完成后,Servlet 容器需要實(shí)例化 Filter 并把 Filter 鏈接成一個(gè)FilterChain。當(dāng)請(qǐng)求進(jìn)來(lái)時(shí),獲取第一個(gè) Filter 并調(diào)用 doFilter 方法,doFilter 方法負(fù)責(zé)調(diào)用這個(gè) FilterChain 中的下一個(gè) Filter。?

Listener

??? Listener是監(jiān)聽(tīng)器。當(dāng) Web 應(yīng)用在 Servlet 容器中運(yùn)行時(shí),Servlet容器內(nèi)部會(huì)不斷的發(fā)生各種事件,如Web應(yīng)用的啟動(dòng)和停止、用戶(hù)請(qǐng)求到達(dá)等。Servlet容器提供了一些默認(rèn)的監(jiān)聽(tīng)器來(lái)監(jiān)聽(tīng)這些事件,當(dāng)事件發(fā)生時(shí),Servlet 容器會(huì)負(fù)責(zé)調(diào)用監(jiān)聽(tīng)器的方法 。

Servlet和Spring的關(guān)聯(lián)

????先來(lái)一個(gè)簡(jiǎn)單的關(guān)聯(lián):

  • Tomcat在啟動(dòng)時(shí)給每一個(gè)Web應(yīng)用創(chuàng)建一個(gè)全局的上下文環(huán)境ServletContext,為Spring提供宿主;

  • Tomcat在啟動(dòng)過(guò)程中觸發(fā)容器初始化條件,Spring的ContextLoaderListener監(jiān)聽(tīng)到后觸發(fā)contextInitialized方法,在這個(gè)方法中,初始化全局Spring容器即IoC容器,IoC初始化完后,Spring將其存儲(chǔ)到ServletContext中,以便后來(lái)獲取使用。

  • 一張圖足以說(shuō)明:

    本文到此結(jié)束,下一篇Tomcat系統(tǒng)架構(gòu)已更新!

    總結(jié)

    以上是生活随笔為你收集整理的servlet 规范_Tomcat原理解析(壹)— Servlet的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。