- JavaWeb整合開發實例精通:Struts+Hibernate+Spring
- 閆術卓 吳峻申
- 870字
- 2018-12-31 14:45:39
2.2.4 Servlet的生命周期
Servlet不同于JSP的是因為它有它的一個生命周期。此生命周期是存在于容器中的,如果容器被重啟或者停止,則生命周期重新開始或結束。它的生命周期流程如下:
根據用戶發出的請求,容器根據響應創建了HttpServletRequest和HttpServletReponse對象,并且創建了Servlet的一個實例,把上述兩個對象當作參數傳遞進來。此時會對Servlet對象進行初始化操作,調用Servlet的init方法。然后初始化完成后,會調用Servlet的核心方法service方法。根據傳遞進來的請求是get還是post屬性調用doGet或doPost方法。在這兩個方法中處理請求,完成后直接調用destroy方法,結束Servlet生命周期。
簡而言之,Servlet的生命周期包括加載、實例化、初始化、處理請求、銷毀服務等幾個部分。其中所說的get和post都是數據傳輸轉向的方法。它們之間的不同有如下幾點:
●get是從服務器上得到數據,而post是向服務器傳遞數據。
●get將表單中的數據按照variable=value的形式,添加到action所指向的URL后面,并且兩者使用“?”連接,而各個變量之間使用“&”連接;post是將表單中的數據放在表單的數據中,按照變量和值相對應的方式,傳遞到action所指向的URL。
●get是不安全的,在傳輸過程中,數據被放在請求的URL中,而如今現有的很多服務器、代理服務器或者用戶代理都會將請求URL記錄到日志文件中,然后放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。
●get傳輸的數據量小,這主要是因為受URL長度的限制;post則可以傳輸大量的數據,所以在上傳文件只能使用post。
●get限制表單的數據集的值必須為ASCII字符;而post支持整個ISO10646字符集。
●get是表單的默認數據傳輸方法。
仔細研究Servlet的類屬性和方法,還會發現有兩個API,一個是forward方法,另一個是redirect方法。它們的區別如下:
Forward表示的功能僅是容器的控制器轉向,在瀏覽器中不會顯示轉向后的地址。而redirect則是完全的跳轉,瀏覽器顯示轉向后的地址,并重新發送請求。因此前者效率較高,也有助于隱藏實際的鏈接地址。但是如果想跳轉到其他服務器的地址,那就有可能需要使用redirect方法。一般在Web項目中,不同服務器的轉發情況很少發生。因此大多數情況下都用forward方法。
- JSP網絡編程(學習筆記)
- Modular Programming with Python
- 摩登創客:與智能手機和平板電腦共舞
- Arduino by Example
- Flink SQL與DataStream入門、進階與實戰
- Learning Python by Building Games
- Hands-On Full Stack Development with Go
- Learning Vaadin 7(Second Edition)
- 響應式架構:消息模式Actor實現與Scala、Akka應用集成
- Creating Data Stories with Tableau Public
- Machine Learning With Go
- 機器學習微積分一本通(Python版)
- Natural Language Processing with Python Quick Start Guide
- Get Your Hands Dirty on Clean Architecture
- Joomla!Search Engine Optimization