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;}}