Servlet系列:(一)servlet原理剖析

CodeWalker發表於2018-10-12
Servlet 處理請求和傳送響應的過程是由一種叫做Servlet的程式來完成的,並且Servlet是為了解決實現動態頁面而衍生的東西。


Tomcat 是Web應用伺服器,是一個Servlet/JSP容器. Tomcat 作為Servlet容器,負責處理客戶請求,把請求傳送給Servlet,並將Servlet的響應傳送回給客戶.而Servlet是一種執行在支援Java語言的伺服器上的元件. Servlet最常見的用途是擴充套件Java Web伺服器功能,提供非常安全的,可移植的,易於使用的CGI替代品


  

①:Tomcat將http請求文字接收並解析,然後封裝成HttpServletRequest型別的request物件,所有的HTTP頭資料讀可以通過request物件呼叫對應的方法查詢到。

②:Tomcat同時會要響應的資訊封裝為HttpServletResponse型別的response物件,通過設定response屬性就可以控制要輸出到瀏覽器的內容,然後將response交給tomcat,tomcat就會將其變成響應文字的格式傳送給瀏覽器。


web容器啟動過程:

1.啟動WEB專案的時候,容器(如:Tomcat)會去讀它的配置檔案web.xml.讀兩個節點:

<listener></listener> 和 <context-param></context-param>

2.緊接著,容器建立一個ServletContext(上下文),這個WEB專案所有部分都將共享這個上下文.

3.容器將<context-param></context-param>轉化為鍵值對,並交給ServletContext.

4.容器建立<listener></listener>中的類例項,即建立監聽.

5.在監聽中會有contextInitialized(ServletContextEvent args)初始化方法,在這個方法中獲得:

ServletContext = ServletContextEvent.getServletContext();
context-param的值 = ServletContext.getInitParameter("context-param的鍵");

6.得到這個context-param的值之後,你就可以做一些操作了.注意,這個時候你的WEB專案還沒有完全啟動完成.這個動作會比 所 有的Servlet都要早.
換句話說,這個時候,你對<context-param>中的鍵值做的操作,將在你的WEB專案完全啟動之前被執行.

7.舉例.你可能想在專案啟動之前就開啟資料庫.
那麼這裡就可以在<context-param>中設定資料庫的連線方式,在監聽類中初始化資料庫的連線.

8.這個監聽是自己寫的一個類,除了初始化方法,它還有銷燬方法.用於關閉應用前釋放資源.比如說資料庫連線的關閉.

web.xml節點載入順序:context-param -> listener -> filter -> servlet

<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>

<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>


Servlet生命週期:

1:初始化階段,呼叫init()方法
2:響應客戶請求階段,呼叫service()方法
3:終止階段,呼叫destory()方法

建立一個servlet為什麼繼承自HttpServlet?

HttpServlet是一個抽象類繼承自GenernicServlet,GenernicServlet實現了Servlet和ServletConfig

Servlet包含五個方法:

init  getServletConfig  service  getServletInfo  destroy

ServletConfig包含四個方法:

getServletName getServletContext getInitParameter getInitParameterNames

因service方法不常用,HttpServlet加了doGEt(),doPost(),doPut()


在tomcat容器中對請求做了封裝,將請求頭、請求體等資訊封裝成了HttpServletRequset物件


相關文章