Struts2中的乱码问题小结

来源:互联网 发布:黄金分析软件哪个好 编辑:程序博客网 时间:2024/04/20 10:34

Struts2中的乱码问题小结

乱码是个让人头疼的问题,往往在我们的项目做得兴高采烈的时候突然跳出来这样那样的乱码问题,搞的我们头都大了!!!下面就我实际开发中遇到的乱码问题简单小结一下。

1、  页面显示中文时乱码。

在比如jsp页面中显示中文时往往会出现乱码问题,不过这种问题还比较好解决。在jsp页头加上<%@ page language="java" import="java.util." pageEncoding="gb2312"> 

即可。注意最好整个项目编码都统一,一般统一为utf-8或者gbk或者gb2312。

2、  传递参数的乱码问题。

有时候页面之间跳转传递参数,或者网数据库中插入数据,尤其是在用MYSQL数据库时,经常出现乱码问题,这时候除了按照上面的统一编码以外,还可能需要一些其他操作。

首先,在struts.xml加入一句话

<constant name="struts.i18n.encoding"value="gb2312"/>,这就相当于我们在页面中setCharacterEncoding(“gb2312”),一般就可以解决了。因为struts2默认的字符集是utf-8,这里实际是改动struts2的默认字符集。这里要注意使用的数据库编码还要与之一致,不同的数据库不同,MySql的设置字符集的方式为:

alter database 数据库名 character set utf-8/gb2312;

如果还不行,那么就在进入下面几步:

一,进入tomcat中conf文件夹下找到server.xml文件,找到<Connector port="8080" protocol="HTTP/1.1" 

connectionTimeout="20000"   

redirectPort="8443" /> 

在其中加上 URIEncoding="UTF-8";

二、编写过滤器Filer

编写一个过滤器,实现javax.servlet.Filter接口中的doFilter()方法,将页面获取的参数再进行一次编码,如下代码:

package util;

 

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;

 

public class CharsetFilterimplements Filter {

 

   public void destroy() {

      // TODO Auto-generated method stub

 

    }

 

   public void doFilter(ServletRequest request,ServletResponse response,

          FilterChain chain) throws IOException, ServletException{

      request.setCharacterEncoding("gb2312");  

      chain.doFilter(request,response);  

 

    }

 

   public void init(FilterConfig arg0) throwsServletException {

      // TODO Auto-generated method stub

 

    }

 

}

三、在web.xml中加入配置文件,配置该Filter:

<filter> 

   <filter-name>characterEncoding</filter-name> 

   <filter-class>util.CharsetFilter</filter-class> 

 </filter> 

 <filter-mapping> 

<filter-name>characterEncoding</filter-name> 

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

 </filter-mapping> 

然后重启Tomcat,再测试,应该就差不多了。

3、 如果还不行的话,或者其他地方遇到了什么类似解决不了的问题,则采用最原始也是最好用的方式,调用String的构造方法重新构造该String,如一个字符串变量Str,他出现乱码,则使用

Str=new String(str.getBytes(“iso-8859-1”),”gb2312”);,则一般都能解决该问题。你需要做的就是将这个方法添加到合适的位置即可。

4.如果这样还是解决不了,那真该好好分析分析了,不要着急,可以设置断点,或者在合适的地方System.out.println();找出参数出现问题的根源,在去寻求其他办法,应该总能解决吧!

0 0
原创粉丝点击