1、盡量使用統(tǒng)一的編碼,如果你是重頭開(kāi)發(fā)一個(gè)系統(tǒng),特別是Java開(kāi)發(fā)的,推薦從頁(yè)面到數(shù)據(jù)庫(kù)再到配置文件都使用UTF-8進(jìn)行編碼,安全第一。

2、采用三種方式
1)入門(mén)方法,在所有的servlet和jsp中堆設(shè)定用的代碼。
2)中級(jí)方法,對(duì)web伺服器進(jìn)行配置。
3)高級(jí)方法,編寫(xiě)filter過(guò)濾器,對(duì)“POST”和“GET”獨(dú)立過(guò)濾處理。
上面的注意對(duì)post和get的分別處理

3、數(shù)據(jù)庫(kù)的亂碼
a.設(shè)置數(shù)據(jù)庫(kù)的編碼
b.創(chuàng)建connection時(shí)候,在url中傳遞編碼
jdbc:mysql://localhost:3306/hibernateTest?useUnicode=true&characterEncoding=GBK
c.當(dāng)傳遞的數(shù)據(jù)和數(shù)據(jù)庫(kù)不一致,只能重新new string














【參考】http://www.javaeye.com/topic/31742
亂碼對(duì)于使用非英語(yǔ)文字程序員基本上是一直纏繞在身邊的麻煩事,這個(gè)誰(shuí)也避免不了。下面是我解決亂碼時(shí)候的一點(diǎn)小經(jīng)驗(yàn)。歡迎指正
 
一、避免亂碼的一些注意點(diǎn):
1.盡量使用統(tǒng)一的編碼,如果你是重頭開(kāi)發(fā)一個(gè)系統(tǒng),特別是Java開(kāi)發(fā)的,推薦從頁(yè)面到數(shù)據(jù)庫(kù)再到配置文件都使用UTF-8進(jìn)行編碼,安全第一。
2.SetCharacterEncodingFilter的使用,這個(gè)東西不是萬(wàn)能的,但是沒(méi)有它就會(huì)很麻煩,如果是基于Servlet開(kāi)發(fā)的東西,能用的就給它用上,省心。不過(guò)有一個(gè)注意的地方,這個(gè)Filter只是對(duì)POST請(qǐng)求有效,GET一律忽略,不信你可以debug一下,看看它怎么做的,至于為什么不過(guò)濾get請(qǐng)求,好象是它對(duì)GET請(qǐng)求是無(wú)能為力的。
3.就如上面所說(shuō),GET請(qǐng)求有問(wèn)題,盡量使用POST請(qǐng)求,這個(gè)也是Web開(kāi)發(fā)的一個(gè)基本要領(lǐng):
Web Health Warning:Put All Destructive Actions Behind a POST method(from Agile Web Development with Rails)
有點(diǎn)扯遠(yuǎn)了,不過(guò)少用GET,是會(huì)有回報(bào)滴。
4.JavaScript和Ajax亂碼的避免,注意JavaScript默認(rèn)是ISO8859的編碼,避免JS/AJAX亂碼和GET一樣,不要在URL里面使用中文,實(shí)在避免不了,就只能在生成鏈接的時(shí)候轉(zhuǎn)碼,絕對(duì)不能想當(dāng)然的認(rèn)為SetCharacterEncodingFilter會(huì)幫你做什么事情。
5.盡早統(tǒng)一開(kāi)發(fā)環(huán)境,早點(diǎn)模擬真實(shí)環(huán)境測(cè)試,這個(gè)好像也有跑題的嫌疑,但凡軟件開(kāi)發(fā)都是這么干的,但仍然值得注意。我這出現(xiàn)過(guò)一次狀況,程序是在Win下編譯的,拿去Linux上測(cè)試沒(méi)問(wèn)題,等實(shí)際部署的時(shí)候代碼是在Linux下編譯,結(jié)果亂碼,秋后算帳總覺(jué)得有點(diǎn)晚。

二、亂碼發(fā)生的情況和應(yīng)對(duì)措施
1.開(kāi)發(fā)環(huán)境亂碼
      由于Java默認(rèn)使用UTF-8編碼,而且網(wǎng)上很多人都建議Struts開(kāi)發(fā)的時(shí)候應(yīng)盡量選用UTF-8做為默認(rèn)編碼,而非GBK。IDE使 用Eclipse,在第一次使用Eclipse的時(shí)候應(yīng)將default text editor改為UTF-8編碼,免得日后后悔再改就慘了,我本次開(kāi)發(fā)的時(shí)候就忽視了這一點(diǎn),剛開(kāi)始沒(méi)注意,結(jié)果到快交工時(shí)亂碼問(wèn)題無(wú)法解決,導(dǎo)致將所有 的文件全部修改一遍,嗚……
      自打使用Ubuntu,我就開(kāi)心的笑阿,再也不用為搞這些亂碼問(wèn)題而煩惱^^(Ubuntu公益廣告)
2.POST請(qǐng)求的過(guò)濾
      這個(gè)是最基本的了,每個(gè)Servlet系統(tǒng)基本都會(huì)用到這個(gè)東西。不過(guò)只對(duì)POST請(qǐng)求有效,這個(gè)挺關(guān)鍵的。
      使用SetCharacterEncodingFilter,這個(gè)很基礎(chǔ)的一套過(guò)濾器,將所有來(lái)自頁(yè)面的POST請(qǐng)求全部過(guò)濾為UTF-8編碼。
3. JSP ,HTML頁(yè)面亂碼
     將JSP頁(yè)面全部改為charset=UTF-8,這樣可以保證與后臺(tái)交互的時(shí)候都是UTF-8編碼,一般應(yīng)用做了以上工作就基本可以應(yīng)付了。
4.資源文件中漢字轉(zhuǎn)化UTF-8字符問(wèn)題
      國(guó)際化問(wèn)題,在使用資源文件的時(shí)候,由于中文在properties文件中無(wú)法被程序所識(shí)別,需要將其進(jìn)行轉(zhuǎn)碼,我在資源文件下面制作了一個(gè)很簡(jiǎn)單的 bat文件,每次修改資源文件的時(shí)候都是在一個(gè)臨時(shí)文件中修改,然后執(zhí)行這個(gè)bat文件,將其轉(zhuǎn)化并保存為所需要的資源文件,這個(gè)動(dòng)作挺煩的,也有項(xiàng)目組 成員使用一些插件,但是那些東西都是直接寫(xiě)UTF-8碼的,有時(shí)候反倒不方便,不過(guò)以后任務(wù)量巨大的時(shí)候可能會(huì)考慮使用。Bat文件內(nèi)容:   set path=%path%;%JAVA_HOME%/bin/,native2ascii -encoding UTF-8 ApplicationResources_bk.txt > ApplicationResources_zh.properties

     PS:上面的方法好老了,實(shí)際操作起來(lái)相當(dāng)麻煩,現(xiàn)在基本都是使用Eclipse插件,Eclipse3.1時(shí)使用PropertyEditor,但是這 個(gè)項(xiàng)目看上去好像停擺了,到Eclipse3.2時(shí)改用了ResourseBundle,相當(dāng)?shù)膹?qiáng)勁的一個(gè)插件,推薦使用。
5. GET請(qǐng)求亂碼
      如果在本項(xiàng)目中采用了get方式提交請(qǐng)求并附加參數(shù),結(jié)果導(dǎo)致編碼亂碼,原因是Tomcat默認(rèn)請(qǐng)求編碼是ISO8859,需要在Tomcat的配置文件 server.xml添加一個(gè)參數(shù),URIEncoding=”UTF-8”,這樣請(qǐng)求中附件的參數(shù)就會(huì)以UTF-8來(lái)進(jìn)行編碼。
6.Ajax請(qǐng)求亂碼
    使用Ajax,JS也是默認(rèn)使用ISO8859編碼,所以在進(jìn)行請(qǐng)求時(shí)遇到中文參數(shù)需要進(jìn)行編碼,如:var url = "GetSelectListAction.do?queryData=subTrade" + "&queryId=" + encodeURI(obj.value) + "&r=" + Math.random();  
    這里有兩個(gè)地方需要注意:第一個(gè)地方是encodeURI(),方法,可以將參數(shù)進(jìn)行轉(zhuǎn)碼,默認(rèn)是轉(zhuǎn)化為UTF-8,如果需要轉(zhuǎn)為其他碼制,需要在方法中添加第二個(gè)參數(shù)。
     第二個(gè)地方是Math.random(),由于Ajax有緩存機(jī)制,在接受請(qǐng)求的時(shí)候第一時(shí)間先判斷該請(qǐng)求的地址是否被訪問(wèn)過(guò),如果被訪問(wèn)過(guò)則 直接使用緩存中的內(nèi)容返回,這個(gè)東西很討厭,客戶在訪問(wèn)過(guò)一次出錯(cuò)后以后每次出現(xiàn)的都是這個(gè)錯(cuò)誤,所以在請(qǐng)求中給其增加一個(gè)時(shí)間戳,只要可以隨機(jī)生成一個(gè) 不同的字串就可以,保證Ajax每次都去訪問(wèn)服務(wù)器。
7. GET方法的另一個(gè)亂碼問(wèn)題
      在項(xiàng)目即將交工的時(shí)候突然又出現(xiàn)亂碼問(wèn)題,發(fā)現(xiàn)對(duì)于超長(zhǎng)的漢字做為參數(shù)傳遞仍然會(huì)出現(xiàn)亂碼問(wèn)題,解決方法是采用java.net.URLEncoder的 Encode方法強(qiáng)制轉(zhuǎn)碼,缺點(diǎn)是會(huì)使JSP頁(yè)面代碼相當(dāng)?shù)拈L(zhǎng),但是目前還沒(méi)有其他好的解決辦法,我想最好的辦法就是不用中文做為參數(shù)傳遞 :P,寫(xiě)法如:<a href="TestAction.do?name=<%= java.net.URLEncoder.encode("你好","UTF-8")%>

8.亂碼仍然是偶們的心病,一直牽動(dòng)著大家的心,最近一位朋友說(shuō)連接MSSQL數(shù)據(jù)庫(kù)有亂碼,使用了很多辦法,都沒(méi)解決,后來(lái)重新下了個(gè)新的驅(qū)動(dòng)搞定……
數(shù)據(jù)庫(kù)亂碼其實(shí)也很討厭的,一般來(lái)說(shuō)驅(qū)動(dòng)問(wèn)題比較常見(jiàn),所以一旦碰到比較難纏的亂碼可以先考慮下?lián)Q換驅(qū)動(dòng)。也有如MySQL這種,直接連接的時(shí)候就需要顯示進(jìn)行編碼轉(zhuǎn)化的,這個(gè)就要不同情況區(qū)別對(duì)待了。

//2007年11月30日添加
9.WebService亂碼,由于對(duì)WebService不怎么熟悉,使用的是Weblogic提供的WebService支持,亂碼再次出現(xiàn)搞得手忙腳亂,而且無(wú)從下手,在自己系統(tǒng)上跑都沒(méi)有問(wèn)題,結(jié)果跑到服務(wù)器上就全亂套,又無(wú)法調(diào)試,愁人。
    反復(fù)嘗試的過(guò)程就不說(shuō)了,絕對(duì)比普通的Web開(kāi)發(fā)麻煩的多。最終解決方法:
    A.為WebService服務(wù)也加上一個(gè)filter,WebService也是走HTTP協(xié)議的,這個(gè)東西同樣有用,先得加上。
    B.修改服務(wù)器上的環(huán)境變量,LANG=zh_CN.UTF-8,改成這個(gè)是為什么我仍然說(shuō)的不是很清楚,不過(guò)當(dāng)時(shí)開(kāi)發(fā)人員就是在Win下開(kāi)發(fā)的,我在自己的Ubuntu上測(cè)試沒(méi)問(wèn)題,拿到Redhat服務(wù)器上就不行,因?yàn)榉?wù)器上默認(rèn)的是LANG=en_US.UTF-8,這個(gè)明顯是不支持漢字的。
    經(jīng)過(guò)這兩個(gè)步驟WebService亂碼總算得到抑制,它主要的麻煩在于所有與協(xié)議有關(guān)的東西都被Weblogic包辦,里面做什么事情我們不好控制,所以只能采取這種比較笨的辦法,雖然解燃煤之急但無(wú)法尋根溯源的搞定它,說(shuō)不定哪天又會(huì)出來(lái)搞鬼。果然又一次出現(xiàn)亂碼問(wèn)題,經(jīng)過(guò)比較環(huán)境變量發(fā)現(xiàn)服務(wù)器上的LC_CTYPE被修改了,所以強(qiáng)制改成LC_CTYPE=zh_CN。修改環(huán)境變量的方法不到萬(wàn)不得已不推薦使用。



【參考】Java開(kāi)發(fā),表單提交中發(fā)生中文亂碼的問(wèn)題。

Web開(kāi)發(fā)的中文問(wèn)題一直困惑大家,尤其是對(duì)于初上手者。這次有機(jī)會(huì)徹底解決研究了一下中文亂碼的原因和解決方案,做個(gè)總結(jié)。
為什么會(huì)有中文亂碼?
因?yàn)樵谀J(rèn)情況下,HTTP的包都是以“8859_1”來(lái)編碼的(沒(méi)辦法,誰(shuí)叫這些標(biāo)準(zhǔn)都是老美定的)。“8859_1”是西文編碼方式,對(duì)于英文字母沒(méi)有任何問(wèn)題,但是對(duì)于中文就不行了。所以,如果不做任何設(shè)定,直接將中文用“8859_1”來(lái)編碼傳遞,那結(jié)果必然是亂碼。
解決思路是什么?
好在老美還是有國(guó)際化眼光的,HTTP包的編碼方式可以由用戶指定。因此,只要事先指定好用相對(duì)應(yīng)的編碼方式來(lái)對(duì)傳遞內(nèi)容(比如表單提交的中文等)進(jìn)行編碼,就可以順利解決亂碼的問(wèn)題。
兩個(gè)基本概念
在進(jìn)入具體的解決方法之前,首先要對(duì)兩個(gè)基本概念作一下解釋。對(duì)于由表單提交的內(nèi)容,HTTP有兩種傳遞方式,分別是“GET”方式和“POST”方式。
“GET”方式就是將各參數(shù)直接通過(guò)HTTP的包頭(head)來(lái)傳遞,簡(jiǎn)而言之就是直接通過(guò)我們所熟悉的網(wǎng)址(URL)來(lái)傳遞,所以我們經(jīng)常能看到的在一個(gè)網(wǎng)址后面跟著許多復(fù)雜的由“?”和“&”構(gòu)成的字符串,其實(shí)這就是需要傳遞的參數(shù)了。
“POST”方式則是將所需傳遞的參數(shù)包在HTTP的正文(body)中來(lái)傳遞。因此通過(guò)“POST”方式來(lái)進(jìn)行傳遞,在瀏覽器的網(wǎng)址上面什么都看不見(jiàn)。
因此,相比較而言,“POST”隱蔽性較好;而“GET”方式使用起來(lái)比較容易,直接寫(xiě)URL就可以了。
綜上所述,不難發(fā)現(xiàn),解決中文亂碼問(wèn)題實(shí)際上就變?yōu)閷?duì)這兩種HTTP傳遞的編碼方式進(jìn)行適當(dāng)?shù)脑O(shè)定。當(dāng)然,從解決問(wèn)題的難易以及對(duì)系統(tǒng)架構(gòu)的完美性角度著手,又分為以下三個(gè)層次:
1)入門(mén)方法,在所有的servlet和jsp中堆設(shè)定用的代碼。
2)中級(jí)方法,對(duì)web伺服器進(jìn)行配置。
3)高級(jí)方法,編寫(xiě)filter過(guò)濾器,對(duì)“POST”和“GET”獨(dú)立過(guò)濾處理。
下面就具體描述各解決方法:
1)入門(mén)方法,在所有的servlet和jsp中“堆”寫(xiě)設(shè)定用的代碼。
所謂入門(mén)方法,那就是現(xiàn)實(shí)十分簡(jiǎn)單,當(dāng)然效果也是很好的。只是必須在每個(gè)相應(yīng)的文件中寫(xiě)相同的設(shè)定代碼,代碼的重復(fù)性就比較大。
由前面所述,由于“POST”和“GET”方式的不同,因此對(duì)應(yīng)著兩種的設(shè)定方式也不同。
“POST”的情況下,如果服務(wù)器端腳本是一個(gè)servlet,那只要在doPost()方法里面插入一句

request.setCharacterEncode("GB2312");

需要注意的是,這句設(shè)定必須在所有從request對(duì)象做提取操作之前執(zhí)行,如果類似于request.getParameter()的操作在前,那么系統(tǒng)將使用默認(rèn)的“8859_1”編碼方式,而忽略后面的設(shè)定代碼。
如果服務(wù)器端是一個(gè)jsp腳本,那只要在該腳本的jsp申明部分做好設(shè)定即可:

<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>

如果是“GET”方式,也就是想通過(guò)URL來(lái)傳遞中文的話,稍微要麻煩些,首先因?yàn)闉g覽器地址欄是不支持中文的,也就是如果直接將中文放置在超級(jí)連接里面是無(wú)效的。因此需要在發(fā)送端對(duì)中文內(nèi)容進(jìn)行編碼,比如:

URLEncoder.encoder("http://localhost/submit?name=張三","UTF-8");

“UTF-8”表示用這種編碼方式對(duì)原字符串進(jìn)行編碼,編碼好之后看到的結(jié)果是

http://localhost/submit?name=%D5%C5%C8%FD

所以我們經(jīng)常看到在瀏覽器里面有眾多的類似與“%D5%C5%C8%FD”這樣的字符串,就是表明被UTF-8編碼過(guò)了。由于UTF-8是跨各種平臺(tái)的通用編碼方式,因此比較常用于各種語(yǔ)言文字的傳輸載體。
相對(duì)應(yīng)的,在接受方需要進(jìn)行反向的解碼即可,代碼如下:

new String( request.getParameter("name").getBytes("8859_1"), "gb2312" );

這里可能會(huì)有一些疑問(wèn),為什么用“8859_1”來(lái)解碼。事實(shí)上,我在第一次嘗試的時(shí)候也曾使用“UTF-8”來(lái)嘗試解碼,結(jié)果出現(xiàn)亂碼失敗。究其原因,盡管“張三”被編碼成了“%D5%C5%C8%FD”來(lái)傳輸,但是在傳輸過(guò)程中,“%D5%C5%C8%FD”仍舊需要由“8859_1”來(lái)編碼打包成HTTP,因此,在接收端,自然先需要由“8859_1”來(lái)還原到“%D5%C5%C8%FD”的“UTF-8”格式,然后再由“UTF-8”還原到“GB2312”。
所以這樣也不難理解為什么所謂“瀏覽器地址欄是不支持中文”,不能直接用中文而要用“UTF-8”來(lái)通過(guò)“8859_1”來(lái)打包了,原因就是“%D5%C5%C8%FD”這串類似于密碼般的字符串本身就是西文字符,用“8859_1”編解碼沒(méi)有任何問(wèn)題。而中文由于是2byte一個(gè)漢字,直接用西文方式來(lái)編解碼自然就會(huì)出現(xiàn)問(wèn)題。這也就是為什么稱“UTF-8”為“跨各種平臺(tái)的通用編碼方式”了。
背景小資料:
由于“UTF-8”是通用編碼方式,因此所有的語(yǔ)言格式均可以轉(zhuǎn)換為“UTF-8”,在日益國(guó)際的今天,多語(yǔ)言的系統(tǒng)要求越來(lái)越多,因此強(qiáng)烈建議使用“UTF-8”來(lái)做為系統(tǒng)統(tǒng)一的編解碼方式,從而徹底解決中文亂碼的問(wèn)題。
“UTF-8”為了能做到兼容所有語(yǔ)言的編解碼,因此每一個(gè)字符均用2個(gè)byte來(lái)編碼。這樣就造成了存西文字符時(shí)需要多一倍的空間。這也算是為了通用而付出的代價(jià)了。
2)中級(jí)方法,對(duì)web伺服器進(jìn)行配置
可想而知,相對(duì)于“堆”寫(xiě)大量代碼,配置一下web伺服器config文件來(lái)解決中文亂碼問(wèn)題就顯得優(yōu)雅許多。但是由于各種web伺服器的情況不同,其配置方法也不盡相同。因此,其兼容性是個(gè)比較大的問(wèn)題。
這里列舉一下,如何通過(guò)修改Tomcat的conf配置文件來(lái)解決中文亂碼的問(wèn)題。
找到Tomcat的配置文件server.xml中的Connector這一行,為其添加一個(gè)如下的屬性

tomcat4 中 get 與 post 的編碼是一樣的,所以只要在過(guò)濾器中通過(guò) request.setCharacterEncoding 設(shè)定一次就可以解決 get 與 post 的問(wèn)題。
然而,在 tomcat5 中,get 與 post 的處理是分開(kāi)進(jìn)行的,對(duì)get的處理通過(guò) 前面的URIEncoding進(jìn)行處理,對(duì)post的內(nèi)容依然通過(guò) request.setCharacterEncoding 處理,為了保持兼容,就有了這個(gè)設(shè)定(useBodyEncodingForURI="true" 使用與 Body 一樣的編碼來(lái)處理 URI, 這個(gè)設(shè)定是為了與 tomcat4保持兼容)。




3)高級(jí)方法,編寫(xiě)filter過(guò)濾器,對(duì)“POST”和“GET”獨(dú)立過(guò)濾處理。
高級(jí)方法,顧名思義,就是可以脫離于任何平臺(tái),同時(shí)又免去冗余的隊(duì)旗代碼工作的解決方案——編寫(xiě)過(guò)濾器,F(xiàn)ilter。
首先編寫(xiě)一個(gè)過(guò)濾器SetCharacterEncodingFilter

public class SetCharacterEncodingFilter implements Filter {
/**
        * The default character encoding to set for requests that pass through
        * this filter.
        */
protected String encoding = null;
/**
        * The filter configuration object we are associated with.  If this value
        * is null, this filter instance is not currently configured.
        */
   protected FilterConfig filterConfig = null;
   /**
       * Should a character encoding specified by the client be ignored?
       */    
protected boolean ignore = true;
 // --------------------------------------------------------- Public Methods
   /**
    * Take this filter out of service.
    */
   public void destroy() {
       this.encoding = null;
       this.filterConfig = null;
   }
/**
    * Select and set (if specified) the character encoding to be used to
    * interpret request parameters for this request.
    *
    * @param request The servlet request we are processing
    * @param result The servlet response we are creating
    * @param chain The filter chain we are processing
    *
    * @exception IOException if an input/output error occurs
    * @exception ServletException if a servlet error occurs
    */
   public void doFilter(ServletRequest request, ServletResponse response,
                        FilterChain chain)
   throws IOException, ServletException {
 // Conditionally select and set the character encoding to be used
       if (ignore || (request.getCharacterEncoding() == null)) {
           String encoding = selectEncoding(request);
           if(encoding != null){
               HttpServletRequest httpServletRequest = (HttpServletRequest) request;
               if(httpServletRequest.getMethod().toLowerCase().equals("post")){
   //如果是POST方法
                   request.setCharacterEncoding(encoding);
               }
               else{
                 //如果是GET方法
                   //非常抱歉,我還有沒(méi)有找到很好的對(duì)應(yīng)get方法的代碼
                   //一旦完成了這部分代碼,馬上添加在這里。
                   //!·#¥%……—*()——+|
               }
           }
       }
 // Pass control on to the next filter
       chain.doFilter(request, response);
   }
   /**
    * Place this filter into service.
    *
    * @param filterConfig The filter configuration object
    */
   public void init(FilterConfig filterConfig) throws ServletException {
   this.filterConfig = filterConfig;
       this.encoding = filterConfig.getInitParameter("encoding");
       String value = filterConfig.getInitParameter("ignore");
       if (value == null)
           this.ignore = true;
       else if (value.equalsIgnoreCase("true"))
           this.ignore = true;
       else if (value.equalsIgnoreCase("yes"))
           this.ignore = true;
       else
           this.ignore = false;
   }
 // ------------------------------------------------------ Protected Methods
   /**
    * Select an appropriate character encoding to be used, based on the
    * characteristics of the current request and/or filter initialization
    * parameters.  If no character encoding should be set, return
    * <code>null</code>.
    * <p>
    * The default implementation unconditionally returns the value configured
    * by the <strong>encoding</strong> initialization parameter for this
    * filter.
    *
    * @param request The servlet request we are processing
    */
   protected String selectEncoding(ServletRequest request) {
       return (this.encoding);
   }
}

編寫(xiě)完過(guò)濾器以后,需要對(duì)其進(jìn)行部署,也就是在web.xml中做個(gè)配置:
在<display-name>標(biāo)簽之后,添加:

   <filter>
       <filter-name>Set Character Encoding</filter-name>
       <filter-class>com.zavax.utility.filters.SetCharacterEncodingFilter</filter-class>
           <init-param>
               <param-name>encoding</param-name>
               <param-value>UTF8</param-value>
           </init-param>
           <init-param>
               <param-name>ignore</param-name>
               <param-value>true</param-value>
           </init-param>
       </filter>
   <filter-mapping>
       <filter-name>Set Character Encoding</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>