通過在myeclipse上進行簡單測試來得到所需結論,問題發現:
我們知道網頁中出現亂碼一般是由於伺服器預設的編碼方式是iso8859-1,所以只需要設定響應頭content-type的值為text/html;charset=utf-8就可以告訴瀏覽器傳送給它的內容是文字並制定編碼方式。但是這行**可以寫在servlet和過濾器兩個位置,所以到底哪個位置是最終決定這個響應頭的取值,成為我通過理論推導無法得出結論的乙個問題。所以我做了如下實驗,並得到了想要的結果。
通過jsp頁面訪問servlet
伺服器做出響應發回jsp頁面
這個過程被指定過濾器過濾一遍
傳送內容為含有中文字元的純文字
所以有亂碼解決方案
在servlet和filter中同時設定
看哪乙個會生效
servlet中的**如下:
public
void
doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception
filter的**如下:
@override
public
void
destroy()
@override
public
void
dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception
@override
public
void
init(filterconfig filter) throws servletexception
輸出結果:
控制台:
進入過濾器:
設定響應頭,編碼集為utf-8
開始訪問servlet:
設定響應頭,編碼集為iso8859-1
servlet結束
過濾器放行之後
頁面: 這是過濾器輸出的一段話:over
這是servlet輸出的一段話:over
servlet響應頭與filter響應頭之間的關係
1.執行順序:頁面通過超連結或者src訪問伺服器資源->
過濾器設定響應頭->
過濾器放行->
進入servlet->
servlet跳轉回jsp頁面->
servlet結束->
一次請求響應(包含一些不屬於http內容的工作)完成->
伺服器等待下一次請求...
2.設定優先順序:
過濾器和servlet都具有設定響應頭的功能
但如果設定了相同的響應頭,在同一次請求響應過程中
過濾器設定生效,忽略servlet設定的相同響應頭
servlet設定的其他不重複響應頭不受約束
HTTP請求頭與響應頭
請求頭 瀏覽器向伺服器傳送請求的資料,資源。響應頭 伺服器向瀏覽器響應資料,告訴瀏覽器我是誰,我要你怎麼做。如,我是nginx,給你的資源是正確的200 還是錯誤的404,我要你快取多久。常見的請求頭 accept text html,image 瀏覽器可以接收的型別 accept charset ...
關於HTTP請求頭與響應頭
http請求頭格式 get 請求的方式 url 請求的目標資源 http 1.1 請求採用的協議和版本號 首部欄位名 值 accept 客戶端能接收的資源型別 accept language en us 客戶端接收的語言型別 connection keep alive 維護客戶端和服務端的連線關係 ...
Servlet中的請求與響應
接收到請求後伺服器轉交請求給web容器 web容器產生請求物件request和響應物件response 呼叫servlet的service 方法,並將請求和響應物件作為引數傳入該方法 httpservlet的service方法 service方法根據請求方式呼叫do 方法 一般要重寫do 方法 ge...