1. 程式人生 > >Servlet執行機制與生命週期

Servlet執行機制與生命週期

轉載自:http://blog.csdn.net/suwu150/article/details/51487398 Servlet的執行機制和生命週期 一、Servlet的執行機制

           當瀏覽器傳送給伺服器一個Servlet的請求時,如果這個Servlet是第一次被呼叫,那麼伺服器將會自動建立一個Servlet例項,並執行它;而如果這個Servlet已經被例項化,那麼伺服器只是會新啟動一個執行緒來執行它。所以,多個執行緒有可能會去訪問共享的全域性變數,因此,在使用這些全域性變數時,一定要特別小心,讓這些執行緒不會訪問到不同步的資料。除非是需要共享的資訊。

下面我們使用例子進行演示Servlet的執行過程,說明只建立一個例項,而進行多次執行緒呼叫,首先給這個Servlet增建一個建構函式,並在doGet()函式中也列印一個標記,重新部署,看看介面的顯示,程式碼如下所示: 

  1. package servlet;  
  2. import java.io.IOException;  
  3. import java.io.PrintWriter;  
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8. publicclass ShoeServlet2 extends HttpServlet {  
  9.     public ShoeServlet2() {  
  10.         System.out.println("ShoeServlet2:建構函式");  
  11.     }  
  12.     protectedvoid processRequest(HttpServletRequest request, HttpServletResponse response)  
  13.             throws ServletException, IOException {  
  14.         response.setContentType("text/html;charset=UTF-8");  
  15.         try
     (PrintWriter out = response.getWriter()) {  
  16.             System.out.println("ShoeServlet2:processRequest");  
  17.         }  
  18.     }  
  19.     @Override
  20.     protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)  
  21.             throws ServletException, IOException {  
  22.         System.out.println("ShoeServlet2:doGet");  
  23.         processRequest(request, response);  
  24.     }  
  25.     protectedvoid doPost(HttpServletRequest request, HttpServletResponse response)  
  26.             throws ServletException, IOException {  
  27.         System.out.println("ShoeServlet2:doPost");  
  28.         processRequest(request, response);  
  29.     }  
  30.     @Override
  31.     public String getServletInfo() {  
  32.         System.out.println("ShoeServlet2:getServletInfo");  
  33.         return"Short description";  
  34.     }// </editor-fold>
  35. }  

執行後在控制檯出現如下結果:

第一次進入的顯示:

圖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中同時定義這兩個方法,如下方式讓另一個來呼叫其中一個:

  1. publicvoid doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException  
  2.        {  
  3.         //處理doGet請求
  4.        }  
  5. publicvoid doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException  
  6.        {  
  7.         doGet(request,reponse);  
  8.        }  

(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 元件通訊vuexcomputed生命週期(2)

二:vuex 先看官方文件 Vuex 官方文件:https://vuex.vuejs.org/zh-cn/ vuex 是一個專為vue應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。 vuex 不同於lo

vue 元件通訊vuexcomputed生命週期(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