1、servlet生命週期
1、網站中所有的servlet介面的實現類的例項物件,只能由http伺服器負責建立。開發人員不能手動建立servlet介面實現類的例項物件。
2、在預設情況下,http伺服器接收到當前servlet介面實現類第一次請求時,會自動建立這個servlet介面實現類的例項物件。
3、在手動配置情況下,要求http伺服器在啟動的時候自動建立某個servlet介面實現類的例項物件
4、在http伺服器執行期間,一個servlet介面實現類只能被建立一個實現類物件。
5、在http伺服器關閉時刻,會將所有的servlet實現類物件進行銷燬。
2、HttpServletRespones介面
一:介紹
1、HttpServletRespones介面來自於Servlet規範中,在tomcat中存在於servlet-api。jar中。
2、HttpServletRespones介面實現類由Http伺服器負責提供
3、HttpServletRespones介面負責將doGet/doPost方法執行結果寫入到【響應體】交給遊覽器。
4、開發人員習慣於將HttpServletRespones介面修飾的物件稱為【響應物件】
二:主要功能
1、將執行結果以二進位制的形式寫入到【響應體】
2、設定響應頭[content-type]屬性值,從而控制遊覽器使用對應編譯器將響應體二進位制資料編譯為[文字,圖片,影片,命令]
3、設定響應頭中【location】屬性,將一個請求地址賦值給location,從而控制遊覽器向指定伺服器傳送請求。
三:注意點
1、out。writer方法在將結果寫入到響應體的時候,如果結果是一個數字,那麼會將該數字對應的ASCII碼寫入到響應體中。 比如寫入數字97,那麼遊覽器展示的是 a
2、在實際開發中,我們都是使用out。print()方法,該方法不會將數字轉換成ASCII碼。會將結果原樣輸出。
3、遊覽器根據響應包中的響應頭裡面的content-type屬性的值,來解析相應體中的二進位制資料。在預設的情況下content-type屬性的值預設為 “text”,此時遊覽器會採用【文字編譯器】對響應體中的二進位制進行編譯。只會將響應體裡面的二進位制,以文字的形式進行輸出展示,不會解析html標籤的命令。
解決辦法:一定要在拿到輸出流之前,透過響應物件對響應頭中的content-type屬性進行一次重新賦值用於指定遊覽器採用正確的編譯器。content-type=“text/html”
respones。setContentType(“text/html”);
4、響應頭中的charset屬性值預設等於IOS-8859-1,那麼在不做修改的情況下。遊覽器會使用IOS-8859-1的字元編碼對響應體中的二進位制中文進行解碼操作,但是中文解碼需要UTF-8所以這時候就會出現亂碼的情況。解決辦法:respones。setContentType(“text/html;charset=UTF-8”);
5、重定向:透過伺服器端控制遊覽器的傳送請求。
respones。sendRedirect(“http://www。baidu。com”);//透過響應物件,將地址賦值給響應頭中的location屬性。
遊覽器接收到響應包之後,發現相應頭中存在location屬性,自動透過位址列向location指定的網站傳送請求。