??? 今天跟項(xiàng)目組做集成的時(shí)候發(fā)現(xiàn)一個(gè)很奇怪的亂碼問題,web.xml的filter、jsp頁(yè)面均進(jìn)行了編碼設(shè)置, 反復(fù)調(diào)試發(fā)現(xiàn)引起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>
根據(jù)servlet2.3規(guī)范filter執(zhí)行是按照web.xml配置的filter-mapping先后順序進(jìn)行執(zhí)行,所以上面的配置會(huì)導(dǎo)致遇見*.do的url請(qǐng)求,先進(jìn)行SecurityFilter的過濾器處理,這時(shí)候沒有做編碼處理,已經(jīng)是亂碼,到下面的filter處理時(shí)已經(jīng)時(shí)亂碼,再做編碼處理已經(jīng)沒有用處。
修正方式,調(diào)整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>