struts1.x中的乱码有关问题

struts1.x中的乱码问题

 最近学习struts1.2.9的时候,遇到了中文乱码问题,网上查找了一些文档,主要的有两种解决方式:一是添加过滤器,二是重写 RequestProcessor。现将过滤器的方式共享出来,算是struts学习中有关中文乱码的一个小的总结吧说明:jsp页面编码是utf-8,开发环境编码是gbk

  

   自定义首先,定义一个过滤器 SetCharacerEncodingFilter

 

package com.cvicse.utils;

import java.io.IOException;

import javax.servlet.Filter;
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;

public class SetCharacterEncodingFilter3 implements Filter {

	protected String encoding = null;
	protected FilterConfig filterConfig = null;

	/*
	 * (non-Javadoc)
	 * 
	 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
	 */
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
		this.encoding = filterConfig.getInitParameter("encoding");
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
	 *      javax.servlet.ServletResponse, javax.servlet.FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		ProcessEncoding req = new ProcessEncoding((HttpServletRequest) request,
				this.encoding);
		chain.doFilter(req, response);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see javax.servlet.Filter#destroy()
	 */
	public void destroy() {
		this.encoding = null;
		this.filterConfig = null;
	}

}

 

 

  

然后,再定义一个代理请求ProcessEncoding.java,此类处理数据的编码方式的转换

 

package com.cvicse.utils;

//此类处理数据的编码方式的转换

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class ProcessEncoding extends HttpServletRequestWrapper {
	private String encoding;

	public ProcessEncoding(HttpServletRequest request, String encoding) {
		super(request);
		this.encoding = encoding;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see javax.servlet.ServletRequestWrapper#getParameterValues(java.lang.String)
	 */
	@Override
	public String[] getParameterValues(String name) {
		String strs[] = super.getParameterValues(name);
		for (int i = 0; i < strs.length; i++) {
			strs[i] = this.encodingConversion(strs[i]);
		}
		return strs;
	}

	/*
	 * 对接收到的字符进行编码转化
	 */
	private String encodingConversion(String input) {
		String output = "";
		try {
			output = new String(input.getBytes("ISO-8859-1"), this.encoding);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return output;
	}
}

  

 

最后配置这个过滤器到web.xml中

 

<filter>
	<filter-name>SetCharacterEncoding</filter-name>
	<filter-class>
		com.cvicse.utils.SetCharacterEncodingFilter3
	</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>    
</filter>
<filter-mapping>
	<filter-name>SetCharacterEncoding</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>  

  

 

1 楼 lxs575208196 2012-08-18  
和你做法一样  还是没转过来,非要这样写:String department = new String(request.getParameter("department").getBytes("ISO8859-1"),"UTF-8");
可是那么多方法,那么多参数,都这么写不好吧!求指教。。。