Struts2中的乱码问题小结
2014-04-18 12:55
567 查看
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 CharsetFilter
implements 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) throws
ServletException {
// 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();找出参数出现问题的根源,在去寻求其他办法,应该总能解决吧!
乱码是个让人头疼的问题,往往在我们的项目做得兴高采烈的时候突然跳出来这样那样的乱码问题,搞的我们头都大了!!!下面就我实际开发中遇到的乱码问题简单小结一下。
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 CharsetFilter
implements 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) throws
ServletException {
// 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();找出参数出现问题的根源,在去寻求其他办法,应该总能解决吧!
相关文章推荐
- struts2异常处理
- struts2数据校验小结
- Struts2类型转换器小结
- struts2拦截器配置小知识
- java编写的socket聊天程序(登录)
- 用JAVA编写的文档编辑器源代码
- JAVA编写的计算器源代码
- java解压zip文件,处理文件名不能为中文
- 基于Struts2的文件上传
- Java并发编程实战笔记_并发任务执行
- spring性能提升
- Java性能的问与答:概述以及Cpu调优
- Ganymed SSH-2 for Java系列5之删除远程服务器上的目录(补充说明)
- Ganymed SSH-2 for Java系列5之删除远程服务器上的目录
- struts2之单个文件上传
- Ganymed SSH-2 for Java系列4之删除远程服务器上的文件
- 62 Java 重写类的equals()方法
- SpringMvc国际化 根据不同请求调用不同的资源文件
- java实现FTP上传下载
- springframework中使用ReloadableResourceBundleMessageSource加载properties文件的问题