struts解决乱码问题

本文用来解决struts2.2的乱码问题,首先说下提交的请求分为GET和POST方式,
get方式的特殊性:
  对应GET方式来说,乱码首先取决与服务器的设置。tomcat中的设置就是这样的
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               useBodyEncodingForURI="true" />
  红色部分的设置是说与用户页面编码一致,或者如果你所有的请求都是一个编码,那么你可以设置为URIEncoding="gbk"或uRIEncoding="UTF-8"等。因为我们的项目,不同的请求要做不同的编码,所以统一设置为useBodyEncodingForURI="true。

接下来就是GET与POST相同的地方,就是进入到过滤器以后,进行编码设置。

默认情况下如果没有设置struts.properties的话,dispatcher的默认编码为UTF-8,所以同样的道理,如果你的系统统一编码的话,可以增加struts.properties文件,设置为统一的UTF-8或gbk就可以解决,但是我们的系统又不一样,根据不同的请求,编码又不一样,所以就需要在过滤之前,将dispatcher的变化修改为指定的编码。代码编程了如下:
package com.hispeed.exchange.pgwpage.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;

public class ExchangeFilter extends StrutsPrepareAndExecuteFilter{
	
	FilterConfig filterConfig = null;
	Dispatcher dispatcher = null;
	public void doFilter(ServletRequest request, ServletResponse res, FilterChain chain) throws IOException, ServletException
    {
		String uri = ((HttpServletRequest)request).getRequestURI();
		if(uri.indexOf("/qq/")!=-1){
			dispatcher.setDefaultEncoding("gbk")		}else{
			dispatcher.setDefaultEncoding("utf-8")		}
		super.doFilter(request, res, chain);
			
    }
	/**
	 * 前提
	 */
	protected void postInit(Dispatcher dispatcher,FilterConfig filterConfig){
		
		this.dispatcher = dispatcher;
		this.filterConfig = filterConfig;
	}
}

猜你喜欢

转载自xuehuiyuan.iteye.com/blog/1018673