Servlet的生命週期【JAVAEE基礎】

Servlet生命週期

1.生命週期表示一個java對象從最初被創建到最終被銷燬,經歷的所有過程。

2.Servlet對象的生命週期

  Servlet對象的生命週期,javaweb程序員是無權干涉的,包括Servlet對象相關方法的調用,都是無權干涉的
  Servlet對象從最初的創建,方法的調用,以及對象的銷燬,整個過程,都是由web容器來管理的。
  Web Container管理Servlet對象的生命週期。

3.“默認情況下”,Servlet對象在對象在WEB服務器啓動階段不會被實例化【想要啓動時實例化,需要特殊配置web.xml】

4.描述Servlet對象生命週期

1) 用戶在瀏覽器地址欄上輸入URL: http://localhost:8080/prj_servlet_01_war_exploded/hello
2) WEB容器截取請求路徑 /prj_servlet_01_war_exploded/hello
3)WEB容器在容器上下文中找請求路徑 /prj_servlet_01_war_exploded/hello 對應的Servlet對象
4)若沒有找到對應的Servlet對象-(沒找到9中的容器,找10中的容器)
	4.1) 通過web.xml文件中相關的配置信息,得到請求路徑/hello 對應的Servlet完整類名
	4.2)通過反射機制,調用Servlet類的無參構造方法完成Servlet對象的實例化
    4.3)web容器調用Servlet對象的init()方法完成初始化操作
	4.4)web容器調用Servlet對象的service()方法提供服務
5)若找到對應的Servlet對象-(找到9中的容器)
	5.1)web容器直接調用Servlet對象的service()方法提供服務
6) web容器關閉的時候/webapp重新部署的時候/該Servlet對象長時間沒有用戶再次訪問的時候
   web容器會將該Servlet對象銷燬,在銷燬該對象之前,web容器會調用Servlet對象的destroy方法,
   完成銷燬之前的準備

5.總結

 5.1 Servlet類的構造方法只執行一次
 5.2 Servlet對象的init方法只執行一次
 5.3 Servlet對象的service方法,只要用戶請求一次,則執行一次
 5.4 Servlet對象的destroy方法只執行一次

流程

6.注意

  init方法執行的時候,Servlet對象已經被創建好了。
  destroy方法執行的時候,Servlet對象還沒有被銷燬,即將被銷燬

7.Servlet對象是單例,但是不符合單例設計模式,只能稱爲僞裝單例
單例模式的構造方法是私有化的
所以Servlet對象是在單實例多線程的環境下運行的。 那麼Servlet對象中若有實例變量,
並且實例變量涉及到修改操作,Servlet對象一定會存在線程安全問題,
所以不建議在Servlet對象中使用實例變量,儘量使用局部變量

8.在服務器啓動階段,實例化Servlet對象,需要在web.xml文件中進行相關的配置,例如:
1//"1"表示運行的優先級,0最高

9.Servlet對象實例化後
大多數的WEB容器都是將Servlet對象以及對應的url-pattern存儲到MAp集合中了

 WEB容器中有這樣一個Map集合 
 Map<String,Servlet>集合
 key       value
 ----------------
 /login     LoginServlet對象引用
 /delete    DeleteServlet對象調用
 /save      SaveServlet對象引用

10.服務器在啓動的時候會解析各個webapp的web.xml文件
將web.xml文件中的url-pattern和對應Servlet完整類名存儲到Map集合中了

 在Web容器中有這樣一個Map集合
 Map<String,String>集合
 key       value
 ----------------
 /login     com.chif.loginServlet
 /delete    com.chif.deleteServlet
 /save      com.chif.saveServlet

8. Servlet3.0

*好處:支持註解配置,可以不寫web.xml
  *步驟:
      1.創建項目,選擇Servlet3.0以上的版本。
      2.定義一個Servlet類。
      3.複寫方法
      4.在類上使用@webServlet註解,進行配置
        @webServlet("資源路徑")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章