欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Servlet的生命周期,Servlet和CGI的區別
servlet的生命周期
servlet有良好的生存期的定義,包括如何加載、實(shí)例化、初始化、處理客戶(hù)端請求以及如何被移除。這個(gè)生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。
1、加載和實(shí)例化
容器負責加載和實(shí)例化一個(gè)servlet。實(shí)例化和加載可以發(fā)生在引擎啟動(dòng)的時(shí)候,也可以推遲到容器需要該servlet為客戶(hù)請求服務(wù)的時(shí)候。
首先容器必須先定位servlet類(lèi),在必要的情況下,容器使用通常的Java類(lèi)加載工具加載該servlet,可能是從本機文件系統,也可以是從遠程文件系統甚至其它的網(wǎng)絡(luò )服務(wù)。容器加載servlet類(lèi)以后,它會(huì )實(shí)例化該類(lèi)的一個(gè)實(shí)例。需要注意的是可能會(huì )實(shí)例化多個(gè)實(shí)例,例如一個(gè)servlet類(lèi)因為有不同的初始參數而有多個(gè)定義,或者servlet實(shí)現SingleThreadModel而導致容器為之生成一個(gè)實(shí)例池。
2、初始化
servlet加載并實(shí)例化后,容器必須在它能夠處理客戶(hù)端請求前初始化它。初始化的過(guò)程主要是讀取永久的配置信息,昂貴資源(例如JDBC連接)以及其它僅僅需要執行一次的任務(wù)。通過(guò)調用它的init方法并給它傳遞唯一的一個(gè)(每個(gè)servlet定義一個(gè))ServletConfig對象完成這個(gè)過(guò)程。給它傳遞的這個(gè)配置對象允許servlet訪(fǎng)問(wèn)容器的配置信息中的名稱(chēng)-值對(name-value)初始化參數。這個(gè)配置對象同時(shí)給servlet提供了訪(fǎng)問(wèn)實(shí)現了ServletContext接口的具體對象的方法,該對象描述了servlet的運行環(huán)境。
2.1初始化的錯誤處理
在初始化期間,servlet實(shí)例可能通過(guò)拋出UnavailableException 或者 ServletException異常表明它不能進(jìn)行有效服務(wù)。如果一個(gè)servlet拋出一個(gè)這樣的異常,它將不會(huì )被置入有效服務(wù)并且應該被容器立即釋放。在此情況下destroy方法不會(huì )被調用因為初始化沒(méi)有成功完成。在失敗的實(shí)例被釋放后,容器可能在任何時(shí)候實(shí)例化一個(gè)新的實(shí)例,對這個(gè)規則的唯一例外是如果失敗的servlet拋出的異常是UnavailableException并且該異常指出了最小的無(wú)效時(shí)間,那么容器就會(huì )至少等待該時(shí)間指明的時(shí)限才會(huì )重新試圖創(chuàng )建一個(gè)新的實(shí)例。
2.2、工具因素
當工具(注:根據筆者的理解,這個(gè)工具可能是應用服務(wù)器的某些檢查工具,通常是驗證應用的合法性和完整性)加載和內?。╥ntrospect)一個(gè)web應用時(shí),它可能加載和內省該應用中的類(lèi),這個(gè)行為將觸發(fā)那些類(lèi)的靜態(tài)初始方法被執行,因此,開(kāi)發(fā)者不能假定只要當servlet的init方法被調用后它才處于活動(dòng)容器運行狀態(tài)(active container runtime)。作為一個(gè)例子,這意味著(zhù)servlet不能在它的靜態(tài)(類(lèi))初始化方法被調用時(shí)試圖建立數據庫連接或者連接EJB容器。
3、處理請求
在servlet被適當地初始化后,容器就可以使用它去處理請求了。每一個(gè)請求由ServletRequest類(lèi)型的對象代表,而servlet使用ServletResponse回應該請求。這些對象被作為service方法的參數傳遞給servlet。在HTTP請求的情況下,容器必須提供代表請求和回應的HttpServletRequest和HttpServletResponse的具體實(shí)現。需要注意的是容器可能會(huì )創(chuàng )建一個(gè)servlet實(shí)例并將之放入等待服務(wù)的狀態(tài),但是這個(gè)實(shí)例在它的生存期中可能根本沒(méi)有處理過(guò)任何請求。
3.1、多線(xiàn)程問(wèn)題
容器可能同時(shí)將多個(gè)客戶(hù)端的請求發(fā)送給一個(gè)實(shí)例的service方法,這也就意味著(zhù)開(kāi)發(fā)者必須確保編寫(xiě)的servlet可以處理并發(fā)問(wèn)題。如果開(kāi)發(fā)者想防止這種缺省的行為,那么他可以讓他編寫(xiě)的servlet實(shí)現SingleThreadModel。實(shí)現這個(gè)類(lèi)可以保證一次只會(huì )有一個(gè)線(xiàn)程在執行service方法并且一次性執行完。容器可以通過(guò)將請求排隊或者維護一個(gè)servlet實(shí)例池滿(mǎn)足這一點(diǎn)。如果servlet是分布式應用的一部分,那么,那么容器可能在該應用分布的每個(gè)JVM中都維護一個(gè)實(shí)例池。如果開(kāi)發(fā)者使用synchronized關(guān)鍵字定義service方法(或者是doGet和doPost),容器將排隊處理請求,這是由底層的java運行時(shí)系統要求的。我們強烈推薦開(kāi)發(fā)者不要同步service方法或者HTTPServlet的諸如doGet和doPost這樣的服務(wù)方法。
3.2、處理請求中的異常
servlet在對請求進(jìn)行服務(wù)的時(shí)候有可能拋出ServletException或者UnavailableException異常。ServletException表明在處理請求的過(guò)程中發(fā)生了錯誤容器應該使用合適的方法清除該請求。UnavailableException表明servlet不能對請求進(jìn)行處理,可能是暫時(shí)的,也可能是永久的。如果UnavailableException指明是永久性的,那么容器必須將servlet從服務(wù)中移除,調用它的destroy方法并釋放它的實(shí)例。如果指明是暫時(shí)的,那么容器可以選擇在異常信息里面指明的這個(gè)暫時(shí)無(wú)法服務(wù)的時(shí)間段里面不向它發(fā)送任何請求。在這個(gè)時(shí)間段里面被被拒絕的請求必須使用SERVICE_UNAVAILABLE (503)返回狀態(tài)進(jìn)行響應并且應該攜帶稍后重試(Retry-After)的響應頭表明不能服務(wù)只是暫時(shí)的。容器也可以選擇不對暫時(shí)性和永久性的不可用進(jìn)行區分而全部當作永久性的并移除拋出異常的servlet。
3.3線(xiàn)程安全
開(kāi)發(fā)者應該注意容器實(shí)現的請求和響應對象(注:即容器實(shí)現的HttpServletRequest和HttpServletResponese)沒(méi)有被保證是線(xiàn)程安全的,這就意味著(zhù)他們只能在請求處理線(xiàn)程的范圍內被使用,這些對象不能被其它執行線(xiàn)程所引用,因為引用的行為是不確定的。
4、服務(wù)結束
容器沒(méi)有被要求將一個(gè)加載的servlet保存多長(cháng)時(shí)間,因此一個(gè)servlet實(shí)例可能只在容器中存活了幾毫秒,當然也可能是其它更長(cháng)的任意時(shí)間(但是肯定會(huì )短于容器的生存期)當容器決定將之移除時(shí)(原因可能是保存內存資源或者自己被關(guān)閉),那么它必須允許servlet釋放它正在使用的任何資源并保存任何永久狀態(tài)(這個(gè)過(guò)程通過(guò)調用destroy方法達到)。容器在能夠調用destroy方法前,它必須允許那些正在service方法中執行的線(xiàn)程執行完或者在服務(wù)器定義的一段時(shí)間內執行(這個(gè)時(shí)間段在容器調用destroy之前)。一旦destroy方法被調用,容器就不會(huì )再向該實(shí)例發(fā)送任何請求。如果容器需要再使用該servlet,它必須創(chuàng )建新的實(shí)例。destroy方法完成后,容器必須釋放servlet實(shí)例以便它能夠被垃圾回收。
區別在于servlet處于服務(wù)器進(jìn)程中,
它通過(guò)多線(xiàn)程方式運行其service方法,
一個(gè)實(shí)例可以服務(wù)于多個(gè)請求,
并且其實(shí)例一般不會(huì )銷(xiāo)毀,
而CGI對每個(gè)請求都產(chǎn)生新的進(jìn)程,
服務(wù)完成后就銷(xiāo)毀,
所以效率上低于servlet。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
servlet的生命周期
java基礎面試題(Servlet生命周期)
servlet線(xiàn)程不安全 單例 struts2線(xiàn)程安全 多例
Servlet的生命周期
Servlet對象的生命周期
JavaWeb,Servlet,Jsp生命周期
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久