關於Servlet的原理以及常用類
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,如需轉載請自行聯絡原作者
相關文章
- 關於servlet的理解Servlet
- Stream常用操作以及原理探索
- 關於Servlet小總結Servlet
- 關於servlet mappingServletAPP
- 關於類的初始化以及類的例項化一些思考
- 關於Servlet中的事件監聽 薦Servlet事件
- Servlet系列:(一)servlet原理剖析Servlet
- 關於常用的http請求頭以及響應頭詳解HTTP
- 關於Qos中常用的CIR、PIR、CBS、PBS、EBS的解釋以及用法關係
- 關於飛機射擊類遊戲的設計原理 (轉)遊戲
- Python - 關於類(self/cls) 以及 多程式通訊的思考Python
- Servlet中關於web.xml的測試ServletWebXML
- Android 常用換膚方式以及原理分析Android
- Servlet開發技術,建立,以及Servlet的配置,web.xml的配置ServletWebXML
- 關於easymock的模擬servlet的doPost的方法的淺例MockServlet
- Servlet 工作原理解析Servlet
- javaweb關於jsp、servlet基礎筆記JavaWebJSServlet筆記
- jsp、servlet關於中文問題再談JSServlet
- 急問:關於servlet中得session問題ServletSession
- servlet的過濾器filter類Servlet過濾器Filter
- 交換機中的工作原理以及種類的區分(轉)
- Java Sting類關於split處理空串以及擷取最大數Java
- 【分散式鎖的演化】常用鎖的種類以及解決方案分散式
- 關於佈局以及rem的小結REM
- Java Servlet工作原理問答JavaServlet
- Java Servlet 工作原理問答JavaServlet
- PHP的工作原理以及lamp四者之間的關係PHPLAMP
- 關於懶載入原理
- 關於Java中類的成員Java
- 關於System Change Number(SCN)的常用操作
- BlockingQueue的作用以及實現的幾個常用阻塞佇列原理BloC佇列
- 關於keras框架的介紹以及操作使用Keras框架
- 關於dva框架的簡單操作以及demo框架
- 初識Javaweb之Servlet以及TomcatJavaWebServletTomcat
- 關於直接路徑插入的工作原理
- 關於類似於awr的效能分析報告
- Activity 的啟動模式 以及與AppManager類的關係模式APP
- SpringBoot2.4.0中嵌入式servlet容器的自動配置以及啟動原理(自我理解)Spring BootServlet