??? 今天跟項目組做集成的時候發現一個很奇怪的亂碼問題,web.xml的filter、jsp頁面均進行了編碼設置, 反復調試發現引起bug的原因是web.xml的下面幾行:
??? <filter-mapping>
??????? <filter-name>SecurityFilter</filter-name>
??????? <url-pattern>*.do</url-pattern>
??? </filter-mapping>
??? <filter-mapping>
??????? <filter-name>CharacterEncoding</filter-name>
??????? <url-pattern>*.do</url-pattern>
??? </filter-mapping>
??? <filter-mapping>
??????? <filter-name>CharacterEncoding</filter-name>
??????? <url-pattern>*.jsp</url-pattern>
??? </filter-mapping>
根據servlet2.3規范filter執行是按照web.xml配置的filter-mapping先后順序進行執行,所以上面的配置會導致遇見*.do的url請求,先進行SecurityFilter的過濾器處理,這時候沒有做編碼處理,已經是亂碼,到下面的filter處理時已經時亂碼,再做編碼處理已經沒有用處。
修正方式,調整filter-mapping順序,如下:
??? <filter-mapping>
??????? <filter-name>CharacterEncoding</filter-name>
??????? <url-pattern>*.do</url-pattern>
??? </filter-mapping>
??? <filter-mapping>
??????? <filter-name>CharacterEncoding</filter-name>
??????? <url-pattern>*.jsp</url-pattern>
??? </filter-mapping>
??? <filter-mapping>
??????? <filter-name>SecurityFilter</filter-name>
??????? <url-pattern>*.do</url-pattern>
??? </filter-mapping>