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

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

           

           

          寫這篇總結(jié)的時(shí)候,已經(jīng)辭職有好幾天了。去北京還沒(méi)有買到票, 4 月前,北京、上海、拉薩等地方的火車票都沒(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 類在什么位置, Servlet 容器可以從本地文件系統(tǒng)、遠(yuǎn)程文件系統(tǒng)或者其他網(wǎng)絡(luò)服務(wù)器中通過(guò)類加載器加載 Servlet 類,成功加載后,容器創(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è)诰帉?/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í)例可以拋出異常來(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ì)象得到客戶端的相關(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 閱讀(1719) 評(píng)論(4)  編輯  收藏 所屬分類: 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)始了
          作者的類容真的很有用, 學(xué)習(xí)中希望自己也能有自己的收獲啊,我也要加油了  回復(fù)  更多評(píng)論
            

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊(cè)

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 917238
          • 排名 - 40

          最新評(píng)論

          主站蜘蛛池模板: 德格县| 襄汾县| 青神县| 沁阳市| 东至县| 卓尼县| 英德市| 河东区| 乐平市| 阳朔县| 曲阳县| 鄂托克前旗| 漳州市| 安福县| 五大连池市| 宜黄县| 伊川县| 奉贤区| 翼城县| 陇川县| 绥江县| 元阳县| 慈利县| 东乌珠穆沁旗| 长宁区| 陕西省| 梁平县| 逊克县| 屏山县| 翁牛特旗| 株洲县| 金山区| 惠州市| 凤翔县| 兴化市| 石狮市| 兴宁市| 韩城市| 神木县| 白朗县| 英吉沙县|