<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    張慧的博客

    張慧的博客

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

    對于Servlet的生命周期,主要圍繞著init()、service()和destroy()三個回調方法展開的。什么是回調方法?通俗的說就是這三個方法定義完后由web容器負責在特定時間(需要的時候)調用。

    Servlet容器,如Tomcat一般會在用戶第一次請求Servlet的時候實例化該對象。另一種情況是在服務器啟動時立即加載并實例化,但這需要在web.xml文件中對Servlet進行load-on-startup的配置。

    當第一個用戶請求到來時,服務器根據部署描述符找到所訪問的Servlet類,并查找當前容器,發現沒有此類的實例,說明是第一次訪問此Servlet,所以容器開始加載Servlet,并實例化此對象,實例化之后會立即調用init()方法,而且init()方法由始至終只被調用一次,所以比較適合進行對象的初始化工作,比如讀取配置文件,初始化屬性等。當調用完init()方法后,Servlet實例處于ready狀態,這時開始調用其service()方法,并等待著下一次請求的到來。

    service()方法是服務方法,只要再有請求到來,服務器都會產生一個新的線程,調用service()方法,進行相關的服務。service()方法會檢查HTTP請求的類型(GET、POST等),來相應的調用doGet()、doPost()等。GET請求起因于正常URL請求,或沒有指定Method的HTML表單;Post請求起因于將Method定為Post的HTML表單。從圖中可見,service()方法可以被調用多次,因為之后用戶每一次訪問該Servlet,都會觸發服務器調用service()方法。

    如果實例長時間未被訪問,或者web服務器關閉,則容器會負責調用destroy()方法,該方法可以將一些資源釋放,destroy()方法也是只被調用一次,之后Servlet實例將被JVM回收空間。這樣通過init()-->service()-->destroy(),完成了Servlet的一個生命周期。

    上圖是UML中的狀態圖,形象的描述了一個對象在不同事件觸發時,其內部狀態的變更過程。實心的圓圈代表初始狀態,代表Servlet剛剛被實例化:中間寫Ready的橢圓形代表就緒狀態,最下面的圓圈代表結束,這時對象已被JVM的GC回收。圖中的另外一個分支,代表在執行init()操作時拋出了異常,造成無法調用service()方法,生命周期提前終止。

    posted on 2012-07-08 23:33 張慧 閱讀(1416) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲日韩AV一区二区三区中文| 亚洲国产成人久久一区WWW| 亚洲AV无码一区二区三区DV| 一区二区三区免费视频观看 | 亚洲女人影院想要爱| 亚洲视频在线观看免费视频| 亚洲精品韩国美女在线| 57PAO成人国产永久免费视频| 国产成人精品日本亚洲直接| 日韩高清在线免费看| 蜜芽亚洲av无码一区二区三区| 亚洲国产精品国产自在在线| 久久九九免费高清视频| 日韩亚洲Av人人夜夜澡人人爽 | 97视频免费在线| 亚洲sm另类一区二区三区| 免费播放春色aⅴ视频| 国产精品美女免费视频观看| 亚洲小说区图片区另类春色| 国产精品福利在线观看免费不卡 | 日韩成人在线免费视频| 美女视频黄频a免费| 亚洲中文久久精品无码| 久久久久久AV无码免费网站下载| 亚洲欧洲日本精品| 免费国产一级特黄久久| 国产精品免费看久久久 | 免费观看国产小粉嫩喷水| 巨胸喷奶水www永久免费| 久久精品国产精品亚洲毛片| 久久精品免费一区二区喷潮 | 免费国产污网站在线观看| 亚洲精品视频在线播放| 国产精品国产午夜免费福利看| 久久久精品国产亚洲成人满18免费网站| 亚洲人成影院在线| 免费国产美女爽到喷出水来视频| 免费无码av片在线观看| 亚洲人成未满十八禁网站| 国产精品亚洲A∨天堂不卡| 好大好硬好爽免费视频|