官术网_书友最值得收藏!

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方法。

主站蜘蛛池模板: 黄骅市| 吴桥县| 镇平县| 太原市| 宝应县| 栾川县| 崇仁县| 比如县| 奈曼旗| 九台市| 眉山市| 滦平县| 二连浩特市| 双流县| 鄂伦春自治旗| 连平县| 新乡县| 大兴区| 通海县| 浦北县| 宁阳县| 绥阳县| 益阳市| 扎兰屯市| 石嘴山市| 霍城县| 乡城县| 平阴县| 景洪市| 武冈市| 莱西市| 都匀市| 防城港市| 明星| 自治县| 冷水江市| 墨江| 阳春市| 那曲县| 金阳县| 盐亭县|