今天初次使用UrlRewriteFilter尝试进行URL重写,配置好UrlRewriteFilter进行调试,结果出现中文乱码问题。
仔细检查项目,因为原来在加入UrlRewriteFilter之前所有的编码都是正确的,项目中加入了一个filter来处理中文转码问题。
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
lonlysky.javaeye.com.gamecards.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>charset</filter-name>
<filter-class>
lonlysky.javaeye.com.gamecards.filter.CharsetFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>charset</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
看似没有问题,但是发现字符转码的filter在映射的时候只映射了action(*.do),这样不行,于是加入/*的映射
<url-pattern>/*</url-pattern>
重新调试,竟然仍然是乱码。有点郁闷了,难道是UrlRewriteFilter的问题?
后来仔细调试一番,发现问题原来是当我把UrlRewriteFilter放到字符转码过滤器前面以后就相当于字符转码过滤器无效
于是改过后的XML配置如下
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
lonlysky.javaeye.com.gamecards.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>charset</filter-name>
<filter-class>
lonlysky.javaeye.com.gamecards.filter.CharsetFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>charset</filter-name>
<servlet-name>action</servlet-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
重新调试,一切正常!
以后一定要禁忌,过滤器的配置顺序也很重要!!!