servlet響應頭與filter響應頭之間的關係

2021-07-03 09:59:56 字數 1581 閱讀 4912

通過在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...