1.HttpServletRequest
2.HttpServletResponse
1.Response的API
1.1 通過response設置響應報文中的響應碼
1.2 通過response對象設置響應頭
1.3 通過response對象設置響應正文
可以通過字節流,將響應內容寫入響應報文
也可以通過字符流,將響應內容寫入響應報文
2 輸出中文遇到的亂碼問題
對於亂碼問題,其核心只有一個:就是編解碼不一致,要解決亂碼問題,必須使得編解碼一致。
對於向客戶端輸出響應這個過程而言:
編碼過程是指,將要發送給客戶端的字符串,放入http響應報文的過程。
解碼過程指,瀏覽器接收到響應報文,並將響應報文中的字符,在客戶端顯示的過程
注意,我們輸出到客戶端,要在客戶端瀏覽器中顯示的的內容,都是放在響應報文的正文中的
2.1 當使用字節流向客戶端輸出中文
對於使用字節流向客戶端輸出,中文字符的情況,解碼是通過字符串.getBytes(指定編碼字符集)的方式來完成的。(注意此時交給tomcat服務器的是字節數據,而不是字符數據,即這個編碼過程,是我們的程序完成的)
所以要想,編解碼一致,就必須,讓瀏覽器在解碼的時候,使用我們編碼時的字符集,保證編解碼一致,有三種方式,指定瀏覽器的編碼。
1. 手動改變,瀏覽器所使用的字符集
2. 通過這個 api設置響應報文的響應頭字段
爲,來設置瀏覽器解碼所使用的字符集
3. 在響應正文中,模擬html的<meta charset=”字符集”>的方式
2.2 當使用字符流向客戶端輸入中文字符
此時,編碼過程是由tomcat服務器來完成的,但是我們可以通過,api來制定,在響應報文中所使用的字符集。
對於解碼過程,同使用字節流的3中情況。
在這裏要說明的一點是:
這個api非常的好用,因爲,使用這個api相當於,既設置了tomcat編碼所使用的字符集,又同時告訴了瀏覽器解碼所用的字符集。
3 Response的常見應用
3.1 Refresh響應頭的應用
ServletRefresh :
response.sendHeader("Refresh","2") (表示2秒刷新一次)
response.sendHeader("Refresh","2;http://www.xxxx.com") (表示2秒後刷新跳轉)
3.2 緩存的控制
ServletCache:
response.setDataHeader("Expires" , System.currentTimeMillis()+1000*60*60)
表示緩存的銷燬時間爲1個小時,一般只有IE瀏覽器會生效。
4 Response的重定向
4.1 重定向的概念
請求重定向指:一個web資源收到客戶端請求後,通知客戶端去訪問另外一個web資源,這稱之爲請求重定向。
重定向機制的運作流程
1、用戶在瀏覽器端輸入特定URL,請求訪問服務器端的某個組件
2、服務器端的組件返回一個狀態碼爲302的響應結果。
3、當瀏覽器端接收到這種響應結果後,再立即自動請求訪問另一個web組件
4、瀏覽器端接收到來自另一個web組件的響應結果。
4.2 重定向的實現
4.2.1
關於這個api,中的參數location是設置,重定向的目標組件的url,也分爲相對路徑和絕對路徑,這裏相對路徑和絕對路徑的設置方式,和html的form表單中的設置方式相同。
4.2.2
實現原理:自己模擬sendRedirect的響應報文
302/307狀態碼和location頭即可實現重定向
4.3 重定向的特點
1. Servlet源組件生成的響應結果不會被髮送到客戶端。
2. response.sendRedirect(String location)方法一律返回狀態碼爲302的響應結果。
3. 如果源組件在進行重定向之前,已經提交了響應結果,會拋出IllegalStateException。爲了避免異常,不應該在源組件中提交響應結果。
//Cannot call sendRedirect() after the response has been committed
4. 在Servlet源組件重定向語句後面的代碼也會執行。
5. 源組件和目標組件不共享同一個ServletRequest對象。
6. 對於sendRedirect(String location)方法的參數,如果以“/”開頭,表示相對於當前服務器根路徑的URL (WEBAPP)。以“http"//”開頭,表示一個完整路徑。
目標組件不必是同一服務器上的同一個web應用的組件,它可以是任意一個有效網頁