本文用来解决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;
}
}