部落客廣告聯播

2008年5月12日 星期一

Request encoding與 Filter與中文亂碼

故事是這樣的,我的web-app中有兩個filter
  1. CharEncodingFilter - 針對所有request作request.setCharacterEncodin("utf-8");動作,避免亂碼
  2. SessionCheckFilter - 檢查session是否timeout,並做些附加動作

然而亂碼所有設置照理講我都做了,卻還是看到亂碼??

這到底怎麼回事呢??

答案是針對同個request只要做過getParameter( )後,即使再作setCharacterEncoding( )動作, 後續再getParameter( ) 還是會使用舊的encoding取出parameter而得到亂碼 , 所以說若要避免亂碼則setCharacterEncoding要在所有getParameter動作前呼叫!

然而在我的情況下作debug發現我的sessionCheckFilter在charEncodingFilter之前執行,而我的sessionCheckFilter剛好有做getParameter動作 , 所以當然即使我的charEncodingFilter有執行,但怎樣取都是亂碼的啦!!

而Filter執行的順序是基於何呢??

經過嘗試答案是 在web.xml中的先後擺放順序,也就是說對應CharEncodingFilter的要放在前面才對!! ( 這是在tomcat上測試結果,在其他實做如何,如果有人知道請告訴我)

照理說setCharacterEncoding( )在getParameter( )後無效的話,應該丟個Exception出來, 這樣設計也才讓人知道說 問題出在哪, 然而實際上就是沒有, 這....

沒有留言: