問題:
使用Struts的ActionForm接收到的中文全部是亂碼,例如提交過去的“測試”字符串,得到的是“??????è????”。開頭以為是傳統(tǒng)的encoding識(shí)別的問題,但是用各種編碼重新構(gòu)造得到的byte[]數(shù)組,依然無法得到正確的中文。但是如果用普通的jsp來接收form的數(shù)據(jù),中文是完全正常的。
我開始覺得是struts的流程當(dāng)中,錯(cuò)誤地使用了編碼,以至最后得到的結(jié)果完全亂了。搜索了好多文章,總算找到一個(gè)比較接近的。
解決方法:
定義一個(gè)filter,filter只做一件事情,就是:
request.setCharacterEncoding("UTF-8");
在web.xml的filter mapping里,設(shè)定和struts的action同樣的mapping。
解釋: Filter最先攔截web請求,在這里設(shè)置了正確的CharacterEncoding,接下來各個(gè)處理的組件就不會(huì)搞錯(cuò)了。在沒有Filter的情況下,我的resin服務(wù)器上獲得的是null,估計(jì)struts不同的處理組件對null的解釋和處理不太一致,導(dǎo)致錯(cuò)誤的產(chǎn)生。
要注意我所有頁面都是UTF-8編碼,所以在filter里面定義了UTF-8,如果是其它的編碼,這里應(yīng)該相應(yīng)改一下。