HttpServletRequest & Response

1.HttpServletRequest






2.HttpServletResponse

1.Response的API

1.1 通過response設置響應報文中的響應碼

 

1.2 通過response對象設置響應頭

 

1.3 通過response對象設置響應正文

可以通過字節流,將響應內容寫入響應報文

 

也可以通過字符流,將響應內容寫入響應報文

 

輸出中文遇到的亂碼問題

對於亂碼問題,其核心只有一個:就是編解碼不一致,要解決亂碼問題,必須使得編解碼一致。

對於向客戶端輸出響應這個過程而言:

編碼過程是指,將要發送給客戶端的字符串,放入http響應報文的過程。

解碼過程指,瀏覽器接收到響應報文,並將響應報文中的字符,在客戶端顯示的過程

 

注意,我們輸出到客戶端,要在客戶端瀏覽器中顯示的的內容,都是放在響應報文的正文中的

2.1 當使用字節流向客戶端輸出中文

對於使用字節流向客戶端輸出中文字符的情況解碼是通過字符串.getBytes(指定編碼字符集)的方式來完成的。(注意此時交給tomcat服務器的是字節數據,而不是字符數據,即這個編碼過程,是我們的程序完成的

 

所以要想,編解碼一致,就必須,讓瀏覽器在解碼的時候,使用我們編碼時的字符集,保證編解碼一致,有三種方式,指定瀏覽器的編碼。

1. 手動改變,瀏覽器所使用的字符集

2. 通過這個  api設置響應報文的響應頭字段

    爲來設置瀏覽器解碼所使用的字符集

3. 在響應正文中,模擬html<meta charset=字符集>的方式

 

 

2.2 當使用字符流向客戶端輸入中文字符

此時,編碼過程是由tomcat服務器來完成的,但是我們可以通過,api來制定,在響應報文中所使用的字符集。

 

對於解碼過程,同使用字節流的3中情況。

在這裏要說明的一點是:

 

這個api非常的好用,因爲,使用這個api相當於,既設置了tomcat編碼所使用的字符集,又同時告訴了瀏覽器解碼所用的字符集。

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瀏覽器會生效。

Response的重定向

4.1 重定向的概念

請求重定向指:一個web資源收到客戶端請求後,通知客戶端去訪問另外一個web資源,這稱之爲請求重定向。

 

重定向機制的運作流程

1、用戶在瀏覽器端輸入特定URL,請求訪問服務器端的某個組件

2、服務器端的組件返回一個狀態碼爲302的響應結果。

3、當瀏覽器端接收到這種響應結果後,再立即自動請求訪問另一個web組件

4、瀏覽器端接收到來自另一個web組件的響應結果。

4.2 重定向的實現

4.2.1  

 

關於這個api,中的參數location是設置,重定向的目標組件的url,也分爲相對路徑和絕對路徑,這裏相對路徑和絕對路徑的設置方式,和htmlform表單中的設置方式相同。

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應用的組件,它可以是任意一個有效網頁



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章