首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

解决struts1中文乱码有关问题

2012-10-11 
解决struts1中文乱码问题最近工作中遇到一些中文乱码的问题,其中包括在struts1框架下,通过form的打拼的属

解决struts1中文乱码问题

最近工作中遇到一些中文乱码的问题,其中包括在struts1框架下,通过form的打拼的属性值,如果为中文的话,在Action中得到值全部为“?”

?

网上找了一些解决的方法,主要有两种,一是添加过滤器,二是重写 RequestProcessor。两种方法在我的系统中只有前者试验成功了,现在把这个解决方案分享一下,也算备份一下!

?

首先,定义一个过滤器 SetCharacerEncodingFilter.java

import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.Filter;import javax.servlet.FilterConfig;import javax.servlet.FilterChain;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;public class SetCharacterEncodingFilter extends HttpServlet implements Filter {    protected String encoding = null;    protected FilterConfig filterConfig = null;    protected boolean ignore = true;    /*     * (non-Javadoc)     *     * @see javax.servlet.Filter#destroy()     */    @Override    public void destroy() {        this.encoding = null;        this.filterConfig = null;    }    /*     * (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 {        MyRequest req = new MyRequest((HttpServletRequest) request, this.encoding);        chain.doFilter(req, response);    }    /*     * (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");        String value = filterConfig.getInitParameter("ignore");        if (value == null) {            this.ignore = true;        } else if (value.equalsIgnoreCase("true")) {            this.ignore = true;        } else if (value.equalsIgnoreCase("yes")) {            this.ignore = true;        } else {            this.ignore = false;        }    }    /*     *     */    protected String selectEncoding(ServletRequest request) {        return (this.encoding);    }}

?然后,再定义一个代理请求MyRequest.java,这是关键,这个类来处理数据的编码方式的转换

new String(input.getBytes("ISO-8859-1"), "UTF-8"); 
import java.io.UnsupportedEncodingException;import javax.servlet.http.HttpServletRequest;public class MyRequest extends javax.servlet.http.HttpServletRequestWrapper {    HttpServletRequest request;    String formate;    public MyRequest(HttpServletRequest request, String format) {        super(request);        this.request = request;        this.format = format;    }    @Override    public String[] getParameterValues(String name) {        String strs[] = super.getParameterValues(name);        for (int i = 0; i < strs.length; i++) {            strs[i] = this.myEncoding(strs[i]);        }        return strs;    }    private String myEncoding(String input) {        String output = "";        try {            output = new String(input.getBytes("ISO-8859-1"), this.format);         } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return output;    }}

?最后再把这个过滤器配置到web.xml中去。

<filter>        <filter-name>Encoding</filter-name>        <filter-class>com.asus.hzia.pms.server.SetCharacterEncodingFilter        </filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>UTF-8</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>Encoding</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>
?

热点排行