分為啟動(加載web應(yīng)用的有關(guān)數(shù)據(jù),創(chuàng)建ServletContext對象旗唁,對Filter和一些Servlet初始化)、運行時(主要是Servlet容器調(diào)用service(方法))和終止(釋放資源)三個階段。
該過程可通過Tomcat的管理應(yīng)用來控制應(yīng)用的生命周期:
Reload操作: 相當(dāng)于先stop當(dāng)前web應(yīng)用,再start勋桶。
Undeploy操作: 從Tomcat卸除,web文件被刪除侥猬。
## Servlet生命周期
就是Servlet容器控制的Servlet接口提供的init例驹、service、destroy三個方法退唠。
在Servlet的生命周期中鹃锈,初始化和銷毀只會發(fā)生一次,即init()和destroy()方法只會被Servlet容器調(diào)用一次瞧预。service()取決于客戶端請求的次數(shù)屎债。
實踐驗證:寫一個繼承于GenericServlet類的xxxservlet仅政,設(shè)置三個全局變量分別在三個方法中打印,看結(jié)果盆驹,即可圆丹。
并且,可以有多個xxxservlet對象對應(yīng)同一個xxxServlet類躯喇,盡管類代碼一模一樣辫封,但屬于不同的servlet,互相沒有關(guān)系A觥倦微!
——————
## ServletContext與Web應(yīng)用范圍
Servlet容器在啟動一個web應(yīng)用時,會為它創(chuàng)建唯一的ServletContext對象雅倒,終止時銷毀璃诀。
因此,ServletContext對象與web應(yīng)用具有同樣的生命周期蔑匣。而且劣欢,ServletContext對象可以被web應(yīng)用中的所有web組件共享。因此裁良,可以利用該對象來存取web應(yīng)用范圍內(nèi)的共享數(shù)據(jù)(可以是任意類型)凿将。
實踐驗證: 實現(xiàn)web統(tǒng)計訪問次數(shù)的功能。先寫一個Counter類价脾,將其放入servletContext對象牧抵。(這里有一種技巧,就是怎么放侨把?犀变?你總不能每次請求都放一次吧!所以秋柄,先從servletContext獲取該對象获枝,如果為null則將其放入,所以第二次以后都只是取骇笔,不會再執(zhí)行放入的邏輯了省店,if不符合了啊,當(dāng)且僅當(dāng)?shù)谝淮尾欧?笨触。