servlet 學(xué)習(xí)筆記之二

          ——關(guān)于 Servlet 生命周期

           

           

          寫(xiě)這篇總結(jié)的時(shí)候,已經(jīng)辭職有好幾天了。去北京還沒(méi)有買(mǎi)到票, 4 月前,北京、上海、拉薩等地方的火車(chē)票都沒(méi)有了,還好我不急著走。

           

          下面總結(jié)了 servlet 的生命周期。

          Servlet 運(yùn)行在 Servlet 容器中,其生命周期由容器來(lái)管理。 Servlet 的生命周期通過(guò) Servlet 接口中 init ()、 service ()、 destroy ()方法來(lái)表示。

          Servlet 的生命周期包含了下面 4 個(gè)階段。

          (1)       加載和實(shí)例化

          Servlet 容器負(fù)責(zé)加載和實(shí)例化 Servlet 。當(dāng) Servlet 容器啟動(dòng)時(shí),或者在容器檢查到需要這個(gè) Servlet 來(lái)響應(yīng)一個(gè)請(qǐng)求時(shí),創(chuàng)建 Servlet 實(shí)例。當(dāng) Servlet 容器啟動(dòng)后,它必須要知道所需的 Servlet 類(lèi)在什么位置, Servlet 容器可以從本地文件系統(tǒng)、遠(yuǎn)程文件系統(tǒng)或者其他網(wǎng)絡(luò)服務(wù)器中通過(guò)類(lèi)加載器加載 Servlet 類(lèi),成功加載后,容器創(chuàng)建 Servlet 實(shí)例。因?yàn)槿萜魇峭ㄟ^(guò) Java 的反射 API 來(lái)創(chuàng)建 Servlet 實(shí)例,調(diào)用的是 Servlet 的默認(rèn)構(gòu)造函數(shù),也就是那個(gè)不帶參數(shù)的構(gòu)造函數(shù),所以我們?cè)诰帉?xiě) Servlet 類(lèi)的時(shí)候,不應(yīng)該提供帶參數(shù)的構(gòu)造函數(shù)。——這也就是為什么 Servlet 類(lèi)可以不寫(xiě)構(gòu)造函數(shù)的原因。

          (2)       初始化

          Servlet 實(shí)例化之后,容器必須調(diào)用 Servlet init ()方法初始化這個(gè)對(duì)象。初始化的目的是為了讓 Servlet 對(duì)象在處理客戶(hù)請(qǐng)求前完成一些初始化工作,如建立數(shù)據(jù)庫(kù)連接,獲取配置信息等。對(duì)于每一個(gè) Servlet 實(shí)例, init ()方法只能被調(diào)用一次。在初始化期間, Servlet 實(shí)例可以使用容器為它準(zhǔn)備的 ServletConfit 對(duì)象從 web 應(yīng)用程序的配置信息(在 web.xml 中配置)中獲取初始化的參數(shù)信息。在初始化期間,如果發(fā)生錯(cuò)誤, Servlet 實(shí)例可以?huà)伋霎惓?lái)通知容器。

          (3)       請(qǐng)求處理

          Servlet 容器調(diào)用 Servlet service ()方法對(duì)請(qǐng)求進(jìn)行處理。要注意的是,在 service ()方法調(diào)用之前, init ()方法必須成功執(zhí)行。在 service ()方法中, servlet 實(shí)例通過(guò) ServletRequest 對(duì)象得到客戶(hù)端的相關(guān)信息和請(qǐng)求信息,在對(duì)請(qǐng)求進(jìn)行處理后,調(diào)用 servletResponse 對(duì)象的方法設(shè)置響應(yīng)信息。

          (4)       服務(wù)終止

          當(dāng)容器檢測(cè)在一個(gè) Servlet 實(shí)例應(yīng)該從服務(wù)中被移除的時(shí)候,容器就會(huì)調(diào)用實(shí)例的 destroy ()方法,以便讓該實(shí)例可以釋放它所使用的資源,保存數(shù)據(jù)到持久存儲(chǔ)設(shè)備中。當(dāng)需要釋放內(nèi)存或者容器關(guān)閉時(shí),容器就會(huì)調(diào)用 Servlet 實(shí)例的 destroy ()方法。在調(diào)用 destroy ()方法后,容器會(huì)釋放這個(gè) Servlet 實(shí)例,該實(shí)例隨后會(huì)被 java 的垃圾收集器回收。

           

          在整個(gè) Servlet 的生命周期過(guò)程中,創(chuàng)建 Servlet 實(shí)例、調(diào)用實(shí)例的 init ()和 destroy ()方法都只進(jìn)行一次,當(dāng)初始化完成后, Servlet 容器會(huì)將該實(shí)例保存在內(nèi)存中,通過(guò)調(diào)用它的 service ()方法,為接收到的請(qǐng)求服務(wù)。

          posted on 2007-03-26 19:16 -274°C 閱讀(1710) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): JSP


          FeedBack:
          # re: servlet學(xué)習(xí)筆記之二[未登錄](méi)
          2007-03-26 20:26 | 阿蜜果
          許久不見(jiàn)了,繼續(xù)加油,找份好工作!  回復(fù)  更多評(píng)論
            
          # re: servlet學(xué)習(xí)筆記之二
          2007-03-27 13:47 | 兵臨城下
          呵呵,無(wú)意中看到了。去中興面試問(wèn)我這個(gè)問(wèn)題,一時(shí)沒(méi)答上來(lái),郁悶!現(xiàn)在知道了!  回復(fù)  更多評(píng)論
            
          # re: servlet學(xué)習(xí)筆記之二
          2007-03-27 15:05 | BeanSoft
          是呀, 面試大部分時(shí)候都是問(wèn)些概念題...  回復(fù)  更多評(píng)論
            
          # re: servlet學(xué)習(xí)筆記之二
          2012-03-08 22:14 | 開(kāi)始了
          作者的類(lèi)容真的很有用, 學(xué)習(xí)中希望自己也能有自己的收獲啊,我也要加油了  回復(fù)  更多評(píng)論
            

          常用鏈接

          留言簿(21)

          隨筆分類(lèi)(265)

          隨筆檔案(242)

          相冊(cè)

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916109
          • 排名 - 40

          最新評(píng)論

          主站蜘蛛池模板: 北京市| 武宁县| 永寿县| 唐海县| 三都| 都匀市| 武穴市| 晋城| 桃园市| 五河县| 海南省| 林西县| 长兴县| 海盐县| 绥芬河市| 舞阳县| 临澧县| 宁化县| 沂南县| 丁青县| 德州市| 德惠市| 获嘉县| 方山县| 凤山市| 丹巴县| 龙游县| 桃园县| 宜春市| 大连市| 鹤峰县| 宜黄县| 于田县| 台前县| 保亭| 庆元县| 鄢陵县| 华蓥市| 仲巴县| 天气| 德惠市|