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

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

           

           

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

           

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

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

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

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

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

          (2)       初始化

          Servlet 實(shí)例化之后,容器必須調(diào)用 Servlet init ()方法初始化這個(gè)對(duì)象。初始化的目的是為了讓 Servlet 對(duì)象在處理客戶請(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í)例可以拋出異常來通知容器。

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

          Servlet 容器調(diào)用 Servlet service ()方法對(duì)請(qǐng)求進(jìn)行處理。要注意的是,在 service ()方法調(diào)用之前, init ()方法必須成功執(zhí)行。在 service ()方法中, servlet 實(shí)例通過 ServletRequest 對(duì)象得到客戶端的相關(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 的生命周期過程中,創(chuàng)建 Servlet 實(shí)例、調(diào)用實(shí)例的 init ()和 destroy ()方法都只進(jìn)行一次,當(dāng)初始化完成后, Servlet 容器會(huì)將該實(shí)例保存在內(nèi)存中,通過調(diào)用它的 service ()方法,為接收到的請(qǐng)求服務(wù)。

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


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

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊(cè)

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916114
          • 排名 - 40

          最新評(píng)論

          主站蜘蛛池模板: 永兴县| 龙胜| 太湖县| 防城港市| 远安县| 额尔古纳市| 开阳县| 合肥市| 莱西市| 陇川县| 乃东县| 安康市| 汉沽区| 呼图壁县| 葵青区| 阿克陶县| 高淳县| 海盐县| 特克斯县| 永宁县| 渝北区| 泗洪县| 巴彦淖尔市| 濉溪县| 勃利县| 德惠市| 会泽县| 肇州县| 北海市| 元氏县| 当阳市| 白水县| 抚松县| 隆安县| 深水埗区| 林口县| 南安市| 清丰县| 屯门区| 松桃| 屏东市|