Servlet生命周期

Servlet的生命周期由如下幾個步驟組成:

1.實例化(就是創(chuàng)建servlet對象,調(diào)用構(gòu)造器)

當用戶通過瀏覽器輸入一個路徑调违,這個路徑對應(yīng)的servlet被調(diào)用的時候复哆,該Servlet就會被實例化
為LoginServlet顯示提供一個構(gòu)造方法 LoginServlet()

無論訪問了多少次帘腹,LoginSerlvet構(gòu)造方法只會執(zhí)行一次烹植,所以Serlvet是單實例的

import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {
     
    public LoginServlet(){//調(diào)用構(gòu)造方法
        System.out.println("LoginServlet 構(gòu)造方法 被調(diào)用");
    }
 
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //略
    }
}

2.初始化

LoginServlet 繼承了HttpServlet橡羞,同時也繼承了init(ServletConfig) 方法

init方式是一個實例方法担租,所以會在構(gòu)造方法執(zhí)行后執(zhí)行。

無論訪問了多少次LoginSerlvet鲫构,init初始化只會執(zhí)行一次

public class LoginServlet extends HttpServlet {
     
    public LoginServlet(){//調(diào)用構(gòu)造方法
        System.out.println("LoginServlet 構(gòu)造方法 被調(diào)用");
    }
    public void init(ServletConfig config) {
        System.out.println("init(ServletConfig)");
    }
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //略
    }
}

3.提供服務(wù)

接下來就是執(zhí)行service()方法浓恶,然后通過瀏覽器傳遞過來的信息進行判斷,是調(diào)用doGet()還是doPost()方法

在service()中就會編寫我們的業(yè)務(wù)代碼结笨,在本例中就是判斷用戶輸入的賬號和密碼是否正確

public class LoginServlet extends HttpServlet {
 
    public LoginServlet() {
        System.out.println("LoginServlet 構(gòu)造方法 被調(diào)用");
    }
 
    public void init(ServletConfig config) {
        System.out.println("init(ServletConfig)");
    }
 
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        String name = request.getParameter("name");
        String password = request.getParameter("password");
  
        String html = null;
  
        if ("admin".equals(name) && "123".equals(password))
            html = "<div style='color:green'>success</div>";
        else
            html = "<div style='color:red'>fail</div>";
  
        PrintWriter pw = response.getWriter();
        pw.println(html);
  
    }
 
}

4.銷毀

在如下幾種情況下包晰,會調(diào)用destroy()

1.該Servlet所在的web應(yīng)用重新啟動
在serverl.xml中配置該web應(yīng)用的時候用到了

<Context docBase="/Users/dgscdi/Jason/apache-tomcat-7.0.77/wtpwebapps/servletHelloworld" path="/servletHelloworld" reloadable="true" source="org.eclipse.jst.jee.server:servletHelloworld"/>

如果把 reloadable="false" 改為reloadable="true" 就表示有任何類發(fā)生的更新湿镀,web應(yīng)用會自動重啟
當web應(yīng)用自動重啟的時候,destroy()方法就會被調(diào)用

  1. 關(guān)閉tomcat的時候 destroy()方法會被調(diào)用伐憾,但是這個一般都發(fā)生的很快勉痴,不易被發(fā)現(xiàn)。
public class LoginServlet extends HttpServlet {
 
    public void destroy() {
        System.out.println("destroy()");
    }
 
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        // 略
    }
 
}

5.被回收

當該Servlet被銷毀后塞耕,就滿足垃圾回收的條件了蚀腿。 當下一次垃圾回收GC來臨的時候嘴瓤,就有可能被回收扫外。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市廓脆,隨后出現(xiàn)的幾起案子筛谚,更是在濱河造成了極大的恐慌,老刑警劉巖停忿,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驾讲,死亡現(xiàn)場離奇詭異,居然都是意外死亡席赂,警方通過查閱死者的電腦和手機吮铭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颅停,“玉大人谓晌,你說我怎么就攤上這事●啵” “怎么了纸肉?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喊熟。 經(jīng)常有香客問我柏肪,道長,這世上最難降的妖魔是什么芥牌? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任烦味,我火速辦了婚禮,結(jié)果婚禮上壁拉,老公的妹妹穿的比我還像新娘谬俄。我一直安慰自己,他們只是感情好扇商,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布凤瘦。 她就那樣靜靜地躺著,像睡著了一般案铺。 火紅的嫁衣襯著肌膚如雪蔬芥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音笔诵,去河邊找鬼返吻。 笑死,一個胖子當著我的面吹牛乎婿,可吹牛的內(nèi)容都是我干的测僵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼谢翎,長吁一口氣:“原來是場噩夢啊……” “哼捍靠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起森逮,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤榨婆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后褒侧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體良风,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年闷供,在試婚紗的時候發(fā)現(xiàn)自己被綠了烟央。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡歪脏,死狀恐怖疑俭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唾糯,我是刑警寧澤怠硼,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站移怯,受9級特大地震影響香璃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舟误,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一葡秒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嵌溢,春花似錦眯牧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秧骑,卻和暖如春版确,著一層夾襖步出監(jiān)牢的瞬間扣囊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工绒疗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侵歇,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓吓蘑,卻偏偏與公主長得像惕虑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子磨镶,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Servlet 生命周期可被定義為從它被創(chuàng)建直到被銷毀的整個過程溃蔫。以下是 servlet 遵循的過程: 通過調(diào)用 ...
    _String_閱讀 293評論 0 0
  • Servlet 生命周期可被定義為從創(chuàng)建直到毀滅的整個過程。以下是 Servlet 遵循的過程: Servlet ...
    笑Skr人啊閱讀 273評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法棋嘲,類相關(guān)的語法酒唉,內(nèi)部類的語法,繼承相關(guān)的語法沸移,異常的語法,線程的語...
    子非魚_t_閱讀 31,662評論 18 399
  • Servlet程序是運行在服務(wù)器端的一段Java程序侄榴,其生命周期受到Web容器的控制雹锣,生命周期包括:加載程序、初始...
    kylelin閱讀 575評論 0 1
  • Servlet 生命周期:Servlet 加載--->實例化--->服務(wù)--->銷毀癞蚕。 Servlet生命周期分為...
    重山楊閱讀 759評論 0 2