徹底解決全站亂碼(過濾器)

2021-06-20 14:48:37 字數 2327 閱讀 2543

出自:

先分析一下出現亂碼的幾種情況:

資料在頁面顯示有亂碼

也就是伺服器獲取資料時沒有問題,在客戶端上顯示資料為亂碼,這種情況最好解決,只需修改頁面的編碼即可:

pageencoding="utf-8"

資料到伺服器後有亂碼

通常出現在表單提交資料給伺服器,伺服器獲取時得到的是亂碼,以tomcat為例,出現這種情況是因為沒有告訴伺服器以什麼編碼去獲取資料,假設頁面是以utf-8的編碼顯示的資料,你填寫時沒有問題,看起來是沒有問題,但是計算機只認識0和1,它在傳輸過程中是以二進位制的樣式進入到伺服器的,這時你的伺服器就不知道它之前是什麼編碼,如果你沒有指定,它就會按照老外的喜好,以iso8859-1的編碼去讀取,結果就出亂碼了.

這種情況的解決方式又要一分為二,為post和get方式,post解決方案很簡單,既然獲取時有亂碼,那麼在獲取之前,設定編碼即可:

request.setcharacterencoding("utf-8");

然後再使用傳統方法獲取:

string value = request.getparameter("value");

需要注意,這種設定只對post提交有效,如果是get則相對麻煩一點.因為亂碼是在呼叫方法getparameter()時出現的,方法內部的編碼肯定出現了問題,既然它不能自動使用utf-8,那我們就手動來**

if(request.getmethod().equalsignorecase("get"))

/**建立乙個request物件的包裝類:
1.編寫乙個類,實現與被增強物件相同的介面

2.在類中定義乙個變數,記住被增強物件
3.在類中定義乙個構造方法,接收被增強物件

4.覆寫想要增強的方法
5.對於不想增強的方法,直接呼叫被增強物件(目標物件)的方法

包裝設計模式"五步曲"
*/

private httpservletrequest request;
public myrequest(httpservletrequest request)
@override
public string getparameter(string name)
/*程式執行到此,請求方式必然為get
先獲取值,再進行手動轉換*/

string value = this.request.getparameter(name);
try  catch (unsupportedencodingexception e)
return value;        //返回
}
}
public

void destroy()

public

void init(filterconfig fconfig) throws servletexception

}

過濾器記得在web.xml中配置一把

過濾器+動態**

class characterfilter2 implements filter

string methodname = method.getname();
//如果傳遞進來的方法不是getparameter(),則不用增強

if(!methodname.equals("getparameter"))
//為get,並且是getparameter(),...

string value = (string) method.invoke(request, args);
if(value!=null)
return value;
}
}), response);
}
public

void destroy()

public

void init(filterconfig fconfig) throws servletexception

}

好了,還是記得要配置一把

至此,全站的亂碼問題得到解決,其實還有乙個更為簡單的方式,就是修改伺服器的配置檔案,但是如果伺服器不受自己控制,就沒用了.

徹底解決全站亂碼

先分析一下出現亂碼的幾種情況 資料在頁面顯示有亂碼 也就是伺服器獲取資料時沒有問題,在客戶端上顯示資料為亂碼,這種情況最好解決,只需修改頁面的編碼即可 pageencoding utf 8 資料到伺服器後有亂碼 通常出現在表單提交資料給伺服器,伺服器獲取時得到的是亂碼,以tomcat為例,出現這種情...

重新學javaweb 過濾器 應用 全站亂碼

之前沒用過濾器的時候我們解決亂碼 的辦法是在每個servlet最前面加 響應亂碼 response.setcharacterencoding utf 8 通知伺服器 response.setcontenttype text html charset utf 8 通知瀏覽器 其實底層也通知了伺服器 所...

過濾器壓縮全站jsp

過濾器 包裝getwrite 方法,jsp頁面輸出內容使用的是response.getwriter write 58 所以要包裝 59 override 60public printwriter getwriter throws ioexception 6566 如果過濾器需要過濾servlet,則...