Java Servlet API 是Servlet容器(如tomcat)和Servlet之間的一系列接口,它們定義了容器與Servlet交互的的各種方法。
Servlet工作流程
Servlet核心類
UML
ServletConfig
ServletConfig包含了Servlet的配置參數,由容器在Servlet初始化的時候傳遞給Servlet。
ServletContext
ServletContext可以看作是Servlet容器的抽象,提供了操作容器的方法。
容器為每個web項目都創建一個ServletContext實例,在啟動時創建,服務器關閉時銷毀,在一個web項目中共享數據,管理web項目資源,為整個web配置公共信息等,通俗點講,就是一個web項目,就存在一個ServletContext實例,每個Servlet讀可以訪問到它。
Servlet接口
定義了一些由容器調用的方法,完成Servlet的配置,初始化以及執行具體邏輯。
GenericServlet
GenericServlet實現了Servlet接口以及ServletConfig接口,初步實現配置,日志,初始化相關方法。
HttpServlet
繼承GenericServlet,將處理請求的核心方法service根據Http Method分成對應的方法再處理。
ServletRequest
Servlet容器將接受到的請求的內容封裝成ServletRequest對象,傳遞給Servlet的service方法執行邏輯。ServletRequest中定義了獲取請求內容的一系列方法。
HttpServletRequest
繼承ServletRequest,定義了HTTP協議相關內容參數獲取的方法。
ServletResponse
請求出參的封裝對象,由Servlet容器在Servlet的service方法中傳入,根據業務邏輯填充,再由Servlet容器轉成對應的Response。
HttpServletResponse
繼承ServletResponse,根據HTTP協議定義相關方法。
ServletRequest和ServletResponse都是接口,具體的對象由Servlet容器提供,我們無需關心具體的實例對象,只需要操作接口的方法。
ServletResponseWrapper,ServletRequestWrapper
ServletResponseWrapper和ServletRequestWrapper是ServletResponse和ServletRequest的包裝類,允許我們重寫包裝類,在執行真實實例對象的前后做一些其他操作。
Filter
Servlet容器會在Servlet的service外層包裹一系列Filter組成的FilterChain,當請求進入Servlet容器時,實現在Servlet的service執行前后做一些其他處理。
在Filter的doFilter方法中調用FilterChain的DoFilter方法完成調用傳遞。
Filter初始化方法中傳入FilterConfig,通過該類可以獲取web.xml中定義的參數,以及ServletContext。
Listener
Servlet API 提供了一些Listener允許我們監聽特定的事件。
ServletContextListener
接收關于ServletContext生命周期更改的通知事件的接口。
ServletContextAttributeListener
接收web應用程序servlet上下文中屬性列表更改的通知。
ServletRequestListener
用于接收關于進入和超出Web應用程序范圍的請求的通知事件的接口。
ServletRequestAttributeListener
接收關于ServletRequest屬性更改的通知事件的接口。
HttpSessionListener
接收關于HttpSession生命周期更改的通知事件的接口。
HttpSessionBindingListener
使對象從會話綁定到綁定或從其綁定時被通知。
HttpSessionAttributeListener
用于接收關于HttpSession屬性更改的通知事件的接口。
HttpSessionActivationListener
用于接收session活躍與鈍化之間變化事件的接口。
AsyncListener
如果在添加了偵聽器的ServletRequest上啟動的異步操作已完成,超時或導致錯誤,將會通知偵聽器。