1、什么是生命周期?
生命周期表示一個java對象從最初被創(chuàng)建到最終被銷毀,經歷的所有過程。
2、Servlet對象的生命周期是誰來管理的?程序員可以干涉嗎?
Servlet對象的生命周期,javaweb程序員是無權干涉的,包括該Servlet對象的相關方法的調用,javaweb程序員也是無權干涉的。
Servlet對象從最初的創(chuàng)建,方法的調用,以及最后對象的銷毀,這個過程,是由Web容器來管理的。
Web Container管理Servlet對象的生命周期。
3、“默認情況下”,Servlet對象在WEB服務器啟動階段不會被實例化。【若希望在Web服務器啟動階段實例化Servlet對象,需要進行特殊的設置】
4、描述Servlet對象的生命周期
1)用戶在瀏覽器中輸入Serlvet的URL
2)web容器截取請求鏈接
3)web容器在容器上下文中找請求路徑對應的Servlet對象
4)若沒有找到對應的Servlet對象
4.1)通過web.xml文件中的相關配置信息,得到請求路徑對應的Servlet對象
4.2)通過反射機制,調用Servlet類的無參構造方法完成Servlet對象的實例化
4.3)web容器調用Servlet對象的init方法完成實例化操作
4.4)web容器調用Servlet對象的service方法提供服務
5)若找到對應的Servlet對象
5.1)web容器直接調用Servlet對象的service方法提供服務
6)web容器關閉的時候/webapp重新部署的時候/該Servlet對象長時間沒有用戶再次訪問的時候,web容器會將該Serlvet對象銷毀,在銷毀該對象之前,web容器會調用Servlet對象的destory方法,完成銷毀之前的準備。
5、總結:
5.1)Servlet類的構造方法只執(zhí)行一次
5.2)Servlet對象的init方法只執(zhí)行一次
5.3)Servlet對象的service方法,只要用戶請求一次,則執(zhí)行一次
5.4)Servlet對象的destory方法,只執(zhí)行一次
6、注意
init方法執(zhí)行的時候,Servlet對象已經被創(chuàng)建好了。
destory方法執(zhí)行的時候,Servlet對象還沒有被銷毀,即將被銷毀
7、Servlet對象是單例,但是不符合單例測試,只能稱為偽單例。真單例的構造方法是私有化的,Tomcat服務器是支持多線程的。所以Servlet對象在單實例多線程的環(huán)境下運行的。那么Servelet對象中若有示例變量,并且示例變量涉及到修改操作,那么這個Servlet對象一定會存在線程安全問題,不建議在Servlet對象中使用實例變量,盡量使用局部變量。
新聞熱點
疑難解答