Java Servlet API 是Servlet容器(如tomcat)和Servlet之間的一系列接口,它們定義了容器與Servlet交互的的各種方法。
Servlet工作流程

Servlet核心類
UML

ServletConfig
ServletConfig包含了Servlet的配置參數(shù),由容器在Servlet初始化的時(shí)候傳遞給Servlet。

ServletContext
ServletContext可以看作是Servlet容器的抽象,提供了操作容器的方法。
容器為每個(gè)web項(xiàng)目都創(chuàng)建一個(gè)ServletContext實(shí)例,在啟動(dòng)時(shí)創(chuàng)建,服務(wù)器關(guān)閉時(shí)銷毀,在一個(gè)web項(xiàng)目中共享數(shù)據(jù),管理web項(xiàng)目資源,為整個(gè)web配置公共信息等,通俗點(diǎn)講,就是一個(gè)web項(xiàng)目,就存在一個(gè)ServletContext實(shí)例,每個(gè)Servlet讀可以訪問(wèn)到它。

Servlet接口
定義了一些由容器調(diào)用的方法,完成Servlet的配置,初始化以及執(zhí)行具體邏輯。

GenericServlet
GenericServlet實(shí)現(xiàn)了Servlet接口以及ServletConfig接口,初步實(shí)現(xiàn)配置,日志,初始化相關(guān)方法。

HttpServlet
繼承GenericServlet,將處理請(qǐng)求的核心方法service根據(jù)Http Method分成對(duì)應(yīng)的方法再處理。

ServletRequest
Servlet容器將接受到的請(qǐng)求的內(nèi)容封裝成ServletRequest對(duì)象,傳遞給Servlet的service方法執(zhí)行邏輯。ServletRequest中定義了獲取請(qǐng)求內(nèi)容的一系列方法。

HttpServletRequest
繼承ServletRequest,定義了HTTP協(xié)議相關(guān)內(nèi)容參數(shù)獲取的方法。

ServletResponse
請(qǐng)求出參的封裝對(duì)象,由Servlet容器在Servlet的service方法中傳入,根據(jù)業(yè)務(wù)邏輯填充,再由Servlet容器轉(zhuǎn)成對(duì)應(yīng)的Response。

HttpServletResponse
繼承ServletResponse,根據(jù)HTTP協(xié)議定義相關(guān)方法。

ServletRequest和ServletResponse都是接口,具體的對(duì)象由Servlet容器提供,我們無(wú)需關(guān)心具體的實(shí)例對(duì)象,只需要操作接口的方法。
ServletResponseWrapper,ServletRequestWrapper
ServletResponseWrapper和ServletRequestWrapper是ServletResponse和ServletRequest的包裝類,允許我們重寫(xiě)包裝類,在執(zhí)行真實(shí)實(shí)例對(duì)象的前后做一些其他操作。
Filter
Servlet容器會(huì)在Servlet的service外層包裹一系列Filter組成的FilterChain,當(dāng)請(qǐng)求進(jìn)入Servlet容器時(shí),實(shí)現(xiàn)在Servlet的service執(zhí)行前后做一些其他處理。

在Filter的doFilter方法中調(diào)用FilterChain的DoFilter方法完成調(diào)用傳遞。

Filter初始化方法中傳入FilterConfig,通過(guò)該類可以獲取web.xml中定義的參數(shù),以及ServletContext。

Listener
Servlet API 提供了一些Listener允許我們監(jiān)聽(tīng)特定的事件。
ServletContextListener
接收關(guān)于ServletContext生命周期更改的通知事件的接口。

ServletContextAttributeListener
接收web應(yīng)用程序servlet上下文中屬性列表更改的通知。

ServletRequestListener
用于接收關(guān)于進(jìn)入和超出Web應(yīng)用程序范圍的請(qǐng)求的通知事件的接口。

ServletRequestAttributeListener
接收關(guān)于ServletRequest屬性更改的通知事件的接口。

HttpSessionListener
接收關(guān)于HttpSession生命周期更改的通知事件的接口。

HttpSessionBindingListener
使對(duì)象從會(huì)話綁定到綁定或從其綁定時(shí)被通知。

HttpSessionAttributeListener
用于接收關(guān)于HttpSession屬性更改的通知事件的接口。

HttpSessionActivationListener
用于接收session活躍與鈍化之間變化事件的接口。

AsyncListener
如果在添加了偵聽(tīng)器的ServletRequest上啟動(dòng)的異步操作已完成,超時(shí)或?qū)е洛e(cuò)誤,將會(huì)通知偵聽(tīng)器。
