SpringMVC源碼解析之Servlet

一、Servlet

Servlet是JavaWeb的核心接口,運行在web服務器中,負責接收來自web客戶端的請求並作出響應。
Servlet接口
Servlet接口定義了5個方法。
(1)init方法
負責Servlet的初始化,在servlet被加入到web容器時由容器調用,只會被調用一次。如tomcat容器會在StandardWrapper#initServlet(Servlet)中調用該初始化方法。
(2)getServletConfig方法
負責返回該Servlet的ServletConfig對象,ServletConfig保存了該Servlet相關的配置。
(3)getServletInfo方法
用於返回servlet相關的信息,如作者、版權等等。
(4)service方法
具體處理一個請求的邏輯
(5)destroyfan方法
在servlet銷燬(一般是關閉服務器)時的處理,主要是釋放資源,只會被調用一次。

二、配置文件

一個簡單的SpringMVC的配置文件如下,我們將在後面簡單介紹每個配置項的作用。

<display-name>SpringMVC xml demo</display-name>
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>application.xml</param-value>
</context-param>
<servlet>
	<servlet-name>dispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>dispatcher.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>dispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

三、ServletConfig

ServletConfig是Servlet的配置內容,在容器初始化Servlet時作爲參數傳遞。一個Servlet對應一個ServletConfig。
ServletConfig接口
共有4個方法。
getServletName方法返回servlet的名稱,與配置文件中的servlet-name對應。
getInitParameterNames方法用於返回所有<init-param>配置項下的<param-name>集合。
getInitParameterName方法用於根據<param-name>獲取<param-value>值。
getServletContext方法用於獲取ServletContext對象。

四、ServletContext

ServletContext是web應用的上下文,用於servlet與容器之間的交流。與ServletConfig與Servlet一一對應不同,ServletContext被容器內的所有servlet共享。也就是說,ServletConfig是Servlet級的,ServletContext是應用級的。
ServletContext
ServletContext作爲容器的上下文,除了全局的配置參數以外,還有一些更多的功能,常見的作用如下:
(1)傳遞配置參數
和ServletConfig一樣,保存並傳遞配置參數是ServletContext最常見的使用方式之一。
如:getInitParameterName,getInitParameterNames獲取初始化參數(對應context-param),getServletContextName獲取應用名稱(對應display-name)
(2)獲取容器信息
可以通過ServletContext獲取容器的信息。
如getServerInfo返回容器的名稱、版本等信息,getMajorVersion和getMinorVersion返回容器支持的Servlet的最大和最小版本。
(3)配置應用級屬性
通過getAttribute、getAttributeNames、setAttribute、removeAttribute方法獲取和配置應用級別的屬性。
attribute屬性和parameter參數是彼此獨立的兩套數據,即使同名也不會互相覆蓋。
(4)站點級的操作
站點級是比Context更高一層的級別(Tomcat的Host級),通過public ServletContext getContext(String uripath)可以根據路徑獲取同一個站點下的其它應用的ServletContext,從而進行站點級的操作。不過出於安全的考慮,一般該方法都是返回null值。
(5)Servlet管理
通過getServlets、getServlet、getServletNames獲取並管理應用下的Servlet。
(6)資源文件解析
通過getResourcePaths、getResource、getResourceAsStream、getRequestDispatcher等方法對資源文件進行處理。
(7)日誌功能
通過log進行日誌記錄。
等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章