Servlet執行機制與生命週期
當瀏覽器傳送給伺服器一個Servlet的請求時,如果這個Servlet是第一次被呼叫,那麼伺服器將會自動建立一個Servlet例項,並執行它;而如果這個Servlet已經被例項化,那麼伺服器只是會新啟動一個執行緒來執行它。所以,多個執行緒有可能會去訪問共享的全域性變數,因此,在使用這些全域性變數時,一定要特別小心,讓這些執行緒不會訪問到不同步的資料。除非是需要共享的資訊。
下面我們使用例子進行演示Servlet的執行過程,說明只建立一個例項,而進行多次執行緒呼叫,首先給這個Servlet增建一個建構函式,並在doGet()函式中也列印一個標記,重新部署,看看介面的顯示,程式碼如下所示:
- package servlet;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
publicclass ShoeServlet2 extends HttpServlet {
- public ShoeServlet2() {
- System.out.println("ShoeServlet2:建構函式");
- }
- protectedvoid processRequest(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html;charset=UTF-8");
-
try
- System.out.println("ShoeServlet2:processRequest");
- }
- }
- @Override
- protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- System.out.println("ShoeServlet2:doGet");
- processRequest(request, response);
- }
- protectedvoid doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- System.out.println("ShoeServlet2:doPost");
- processRequest(request, response);
- }
- @Override
- public String getServletInfo() {
- System.out.println("ShoeServlet2:getServletInfo");
- return"Short description";
- }// </editor-fold>
- }
執行後在控制檯出現如下結果:
第一次進入的顯示:
圖1 第一次進入時的顯示 圖2 重新整理後的顯示 從上面顯示效果可以看出:Servlet第一次被呼叫,那麼伺服器將會自動建立一個Servlet例項,並執行它;而如果這個Servlet已經被例項化,那麼伺服器只是會新啟動一個執行緒來執行它二、Servlet的生命週期
從前面的例子可以看出,一個Servlet在伺服器上最多隻會駐留一個例項,在此期間會涉及到HttpServlet的方法,如下所示:
在編寫Servlet程式時,都是讓它繼承HttpServlet這個類,然後根據需要去覆蓋HttpServlet中的方法。比較常用的方法有:init()、doGet()、doPost()、service()、destroy().
(1)doGet()/doPost()/service()
service()方法
如果客戶端有一個對Servlet的請求傳送過來,那麼伺服器端會產生一個新的執行緒,並且讓它呼叫Servlet的service()方法。service()方法根據收到的客戶端請求型別,決定調
doGet()還是doPost()還是其他的doXXX()方法。
如果不能確定客戶端的請求方式到底是GET還是POST方式,那麼可以在Servlet中同時定義這兩個方法,如下方式讓另一個來呼叫其中一個:
- publicvoid doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
- {
- //處理doGet請求
- }
- publicvoid doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
- {
- doGet(request,reponse);
- }
(2)init()方法 對Servlet做一些初始化工作,這個方法只會被呼叫一次,不會對每次連線都呼叫,可以將一些初始化程式碼放在該函式中
(3)destroy()方法
如果要刪除某個Servlet例項,那麼在刪除之前伺服器會先呼叫destroy()方法。可以在這個方法中執行一些清理動作,比如釋放資料庫連線,關閉開啟的檔案等。
綜上,Servlet的生命週期如下圖所示:
圖 Servlet生命週期圖
以上就是Servlet執行機制和生命週期的總結
相關推薦
Servlet執行機制與生命週期
轉載自:http://blog.csdn.net/suwu150/article/details/51487398 Servlet的執行機制和生命週期 一、Servlet的執行機制 當瀏覽器傳送給伺服器一個Servlet的請求時,如果這個Serv
servlet的執行原理與生命週期
一、先從servlet容器說起:大家最為熟悉的servlet容器就是Tomcat ,Servlet 容器是如何管理 Servlet? 先看一下tomcat的容器模型: 從上圖可以看出 Tomcat 的容器分為四個等級,真正管理Servlet 的容器是Cont
《第一行程式碼Android》學習總結第四章 Fragment的執行狀態與生命週期
一、Fragment四種狀態 1、執行狀態 當一個Fragment是可見的,同時它所關聯的Activity正處於執行狀態,則該Fragment也處於執行狀態。 2、暫停狀態 當一個Activity處於暫停狀態,與它關聯的可見碎片就會處於暫停狀態。 3、停止狀態 &
React渲染機制與生命週期
1. 一個元件載入完畢後,如果既沒有外部驅動,也沒有內部驅動,是不會進行重新渲染的。 2. 元件想要對自身進行重新整理,可以通過呼叫setState()或者forceUpdate()來實現,這是讓元件重新整理的內部驅動 3.父元件通過給子元件傳遞props,告知子元件有可
是goal還是phase Maven外掛 plugin goal的執行與生命週期 lifecycle phase的關係
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
執行緒第三課——多執行緒初探與執行緒的生命週期
這節課我們來進入多執行緒,來初步感受下多執行緒,並瞭解下執行緒的宣告週期 Demo 01: public static void main(String[] args) { //直接點,懶得想新的執行緒名了 &nb
servlet的執行流程和生命週期
一、執行流程1.客戶端請求Servlet並提交給伺服器2.伺服器就會在web.xml中尋找與之對應的URL地址(Servlet地址),即就是<url-pattern></url-pattern>標籤中的內容,還有對應的Servlet名,即<ser
Java多執行緒之狀態與生命週期
執行緒的生命週期 執行緒建立並啟動後,不是一啟動就進入執行狀態,也不會一直處於執行狀態。 執行緒啟動後不可能一直霸佔CPU,所以CPU會在多執行緒之間切換,於是執行緒狀態也會多次在執行、阻塞之間切換 線上程的生命週期中,執行緒共有5種狀態,在任意時刻,執行
JavaEE基礎(01):Servlet實現方式,生命週期執行過程
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Servlet簡介 Java編寫的伺服器端程式,具有獨立於平臺和協議的特性,主要功能在於互動式地瀏覽和生成資料,生成動態Web內容。使用Servlet,可以收集來自網頁表單的使用者輸入,呈現來自資料庫或者其他源的記錄,還可以動態建立網頁。 二
執行緒的生命週期以及五種基本狀態
一.執行緒的生命週期及五種基本狀態 關於Java中執行緒的生命週期,首先看一下下面這張較為經典的圖: 上圖中基本上囊括了Java中多執行緒各重要知識點。掌握了上圖中的各知識點,Java中的多執行緒也就基本上掌握了。主要包括: Java執行緒具有五中基本狀態 新建狀態(New
vue 元件與通訊與vuex與computed與生命週期(2)
二:vuex 先看官方文件 Vuex 官方文件:https://vuex.vuejs.org/zh-cn/ vuex 是一個專為vue應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。 vuex 不同於lo
vue 元件與通訊與vuex與computed與生命週期(1)
一:元件 1:先看官方文件 什麼是元件 元件 (Component) 是 Vue.js 最強大的功能之一。元件可以擴充套件 HTML 元素,封裝可重用的程式碼。在較高層面上,元件是自定義元素,Vue.js 的編譯器為它新增特殊功能。在有些情況下,元件也可以表現為用 is 特性進行
多執行緒 之執行緒的生命週期
執行緒是存在生命週期的。執行緒的生命週期分為五種狀態: 1.新建狀態 當執行緒使用new 關鍵字建立了一個執行緒以後,執行緒就出於新建狀態。和其他物件一樣,僅僅被分配記憶體,並初始化成員變數的值。 2.準備狀態 當執行緒呼叫start()方法後進入準備狀態。由cpu來決定哪個執行緒進入
spring作用域與生命週期簡介
1. spring 作用域 使用scope屬性指定bean的作用域,預設值為singleton singleton 即單例模式,每次返回都是同一個bean prototype 原型模式,每次都會重新生成一個新的bean例項 2. bean生命週期簡介
java基礎類庫學習(七.2)執行緒的生命週期
前言 利用java的類/介面建立好使用者執行緒後,我們呼叫執行緒物件的啟動方法,讓執行緒啟動 執行緒的生命週期:新建new 就緒runnable 執行running 阻塞blocked 死亡die 執行緒會在幾種狀態之間改變 新建new 執行緒類通過繼承Thread實現Run
Java執行緒的建立、執行緒的生命週期狀態
重新認識Java執行緒建立的三種方式: 繼承Thread類 1.通過繼承Thread類建立Thread子類,並重寫run方法。run方法的方法體表示執行緒類要完成的任務,因此也把run方法稱為執行體。 2.建立Thread子類的例項物件,就是建立了執行
JAVA執行緒的生命週期和分析工具
執行緒的生命週期的六種狀態 其中一種 有效的方法就是看原始碼 1、NEW 在 虛擬機器的 中建立物件,初始化 成員變數。 2、RUNNABLE 在虛擬中建立執行緒 私有的程式計數器,虛擬機器棧, 等待虛擬機器 執行緒排程器,分配時間片。 3、BLOCKED
PHP 底層的執行機制與原理解析(轉載)
我的另一篇文章:PHP底層工作原理 兩篇結合起來看,會更加好理解。 由於本人資料結構方面知識,淺薄,後面的尚未研究 關於 hash table ,這有個文章可以學習:HashTable原理和底層實現 關於 zval 可以研讀這個:入理解PHP7核心之zval
https的執行機制與配置
超文字傳輸安全協議(縮寫:HTTPS,英語:Hypertext Transfer Protocol Secure)是超文字傳輸協議和SSL/TLS的組合,用以提供加密通訊及對網路伺服器身份的鑑定。 (1) 所有資訊都是加密傳播,第三方無法竊聽。 (2) 具有校驗機制,一旦被篡改,通訊雙方會立刻發現。 (
[Android]Android四大基本元件介紹與生命週期
http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html Android四大基本元件介紹與生命週期 Android四大基本元件分別是Activity,S