我用struts开发是,只要一用mapping.findforward,就出现乱码。用EncodingFilter了还是一样!,我把主要代码发出来,大火帮忙看看!
EncodingFilter
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if(request.getCharacterEncoding() == null && encoding!=null ){
request.setCharacterEncoding(encoding);
} chain.doFilter(request, response);
} public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
web.xml
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
com.lbj.util.EncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
EncodingFilter
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if(request.getCharacterEncoding() == null && encoding!=null ){
request.setCharacterEncoding(encoding);
} chain.doFilter(request, response);
} public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
web.xml
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
com.lbj.util.EncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
还有就是页面和过滤器的编码一致 。。应该没问题。。
1、如果是在客户端乱码,你则可查看jsp文件<head>部分,增加一个<meta http-equiv="Content-Type" content="text/html;charset=gbk">
2、如果是服务哭端接收时就乱码了,则分两种情况post:request.setCharacterEncoding("gbk"),get:response.setContentType(HTTP/1.1);和response.setCharacterEncoding("gbk");
3、如果是在服务哭端响应时乱码了,则要修改web容器的配置文件,增加一个属性:URIEncoding="gbk";
第3条一般人是不知道的,它还可以解决get方法的AJAX乱码。希望这些能对你有所帮助。
try {
if (strvalue == null) {
return null;
} else {
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
} catch (Exception e) {
return null;
}
}你应该可以看明白吧。这样做比较好维护。用吧