關於Servlet的原理以及常用類

技術小哥哥發表於2017-11-21

Servlet是JavaWeb的三大元件之一,它屬於動態資源。

在Servlet中通常需要:

  接收請求資料;

  處理請求;

  完成響應。

實現Servlet有三種方式:

  實現javax.servlet.Servlet介面;

  繼承javax.servlet.GenericServlet類;

  繼承javax.servlet.http.HttpServlet類;

 

與Servlet的生命週期相關的方法有:

  void init(ServletConfig);

  void service(ServletRequest,ServletResponse);

  void destroy();

伺服器會在Servlet第一次被訪問時建立Servlet,或者是在伺服器啟動時建立Servlet。如果伺服器啟動時就建立Servlet,那麼還需要在web.xml檔案中配置(<load-on-startup>0</load-on-startup>)。也就是說預設情況下,Servlet是在第一次被訪問時由伺服器建立的。

 

而且一個Servlet型別,伺服器只建立一個例項物件.

在Servlet被建立後,伺服器會馬上呼叫Servlet的void init(ServletConfig)方法。請記住, Servlet出生後馬上就會呼叫init()方法,而且一個Servlet的一生。

當伺服器每次接收到請求時,都會去呼叫Servlet的service()方法來處理請求。伺服器接收到一次請求,就會呼叫service() 方法一次,所以service()方法是會被呼叫多次的。

 

Servlet是不會輕易離去的,通常都是在伺服器關閉時Servlet才會離去!在伺服器被關閉時,伺服器會去銷燬Servlet,在銷燬Servlet之前伺服器會先去呼叫Servlet的destroy()方法

 

Servlet與執行緒安全

因為一個型別的Servlet只有一個例項物件,那麼就有可能會現時出一個Servlet同時處理多個請求,那麼Servlet是否為執行緒安全的呢?答案是:“不是執行緒安全的”。這說明Servlet的工作效率很高,但也存線上程安全問題!

所以我們不應該在Servlet中便宜建立成員變數,因為可能會存在一個執行緒對這個成員變數進行寫操作,另一個執行緒對這個成員變數進行讀操作。

 

GenericServlet概述

GenericServlet是Servlet介面的實現類,我們可以通過繼承GenericServlet來編寫自己的Servlet。

 

HttpServlet類是GenericServlet的子類,它提供了對HTTP請求的特殊支援,所以通常我們都會通過繼承HttpServlet來完成自定義的Servlet。

 

HttpServlet類中提供了service(HttpServletRequest,HttpServletResponse)方法,這個方法是HttpServlet自己的方法,不是從Servlet繼承來的。

在HttpServlet的service(HttpServletRequest,HttpServletResponse)方法會去判斷當前請求是GET還是POST,如果是GET請求,那麼會去呼叫本類的doGet()方法,如果是POST請求會去呼叫doPost()方法,這說明我們在子類中去覆蓋doGet()或doPost()方法即可。

 

ServletContext

伺服器會為每個應用建立一個ServletContext物件:

l  ServletContext物件的建立是在伺服器啟動時完成的;

l  ServletContext物件的銷燬是在伺服器關閉時完成的。

  ServletContext物件的作用是在整個Web應用的動態資源之間共享資料!

 

 

JSP—->Servlet—->編譯.class檔案 執行.

 

擴充套件: 關於Session的建立和銷燬

Session:session將資料儲存在伺服器端.通過cookie回寫了一個JSESSIONID.

* session的建立和銷燬:

建立的時候:

伺服器端第一次呼叫getSession()方法的時候建立的.

* 銷燬:

* 第一種:非正常關閉伺服器.(正常關閉session不會銷燬—序列化.tomcat/work路徑下.)

* 第二種:預設30分鐘.tomcat/conf/web.xml中.

* 第三種:手動呼叫了session.invalidate();

 

本文轉自SummerChill部落格園部落格,原文連結:http://www.cnblogs.com/DreamDrive/p/4090989.html,如需轉載請自行聯絡原作者


相關文章