l         数据库里的表使用GBK编码

l         struts.xml文件内添加常量:

<constant name="struts.i18n.encoding" value="GBK"/>

其实到这一部就已经解决了提交参数的中文乱码问题,但我看过一些web.xml里是这样配制struts2.xmapping.

第一种方法:

<filter-mapping>

             <filter-name>struts2</filter-name>

             <url-pattern>/*</url-pattern>

       </filter-mapping>

第二种方法:

<filter-mapping>

             <filter-name>struts2</filter-name>

             <url-pattern>/*.action </url-pattern>

       </filter-mapping>

这两种配制是不是等效,我没有去研究过,但总使我有一种感觉:struts2.x参数的提交只是提交到action,而对于提交到其它servlet里的参数并没有进行处理。

       所以我还是动手写了一个字符过滤器类

l         编写EncodeFilter

package org.yxl.web;

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;

publicclass EncodeFilter implements Filter {

    protected FilterConfig filterConfig;

    private String targetEncoding = "GBK";

    publicvoid destroy() {

       // TODO Auto-generated method stub

       this.filterConfig = null;

    }

    publicvoid doFilter(ServletRequest arg0, ServletResponse arg1,

           FilterChain arg2) throws IOException, ServletException {

       // TODO Auto-generated method stub

        HttpServletRequest request = (HttpServletRequest)arg0;

        request.setCharacterEncoding(targetEncoding);

        arg2.doFilter(request,arg1);

    }

    publicvoid init(FilterConfig arg0) throws ServletException {

       // TODO Auto-generated method stub

       this.filterConfig = arg0;

        this.targetEncoding = arg0.getInitParameter("encoding");

    }

    publicvoid setFilterConfig(FilterConfig filterConfig) {

       this.filterConfig = filterConfig;

    }

}

l         web.xml里配制EncodeFilter

<filter>

       <filter-name>encoding</filter-name>

        <filter-class>org.yxl.web.EncodeFilter</filter-class>

       <init-param>

            <param-name>encoding</param-name>

            <param-value>GBK</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>encoding</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

这样整个配制就完成了,其中在struts.xml里定义国际化常量

<constant name="struts.i18n.encoding" value="GBK"/>是关键,是不能少的。而在定义完常量后再使用EncodeFilter,两者一同使用,并不会发生冲突。以上只是我个人的观点,不对的地方希望大家提出来,我也是新手。