l 数据库里的表使用GBK编码
l struts.xml文件内添加常量:
<constant name="struts.i18n.encoding" value="GBK"/>
其实到这一部就已经解决了提交参数的中文乱码问题,但我看过一些web.xml里是这样配制struts2.x的mapping.
第一种方法:
<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,两者一同使用,并不会发生冲突。以上只是我个人的观点,不对的地方希望大家提出来,我也是新手。