发新话题

用UrlRewriteFilter进行URL重写中文乱码问题

今天初次使用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>	


重新调试,一切正常!

以后一定要禁忌,过滤器的配置顺序也很重要!!!



编辑 回复 快速回复 TOP
谢谢,以前遇到过,不过后来放弃了这种用法,那是一年前了,要是提前一年有这帖那有多好^
编辑 回复 快速回复 TOP
发新话题