[原创] Java WebApp 中的 MySql 中文乱码问题

来源:互联网 发布:c多进程编程 编辑:程序博客网 时间:2024/06/09 17:45

  最近在做 Java WebApp 的过程中总结 Hibernate 与各种数据库的连接与操作的时候中遇到了不少问题,也获得了不少经验,其中,JSP 插入 MySql 中文乱码问题应该是不少 Progammer 都遇到过的,所以我把解决这个问题的一些技巧和注意问题记录下来,以供参考。

  首先,要提到的是 MySQL 4.1 对多语言的支持有了很大变化,开始提供对 Unicode 编码的支持,这里我推荐大家使用 UTF-8 编码来加强 Java 项目对多语言的支持。然而,就是这个编码的问题还是让不少人头疼不已,其实,我们所要做的就是让页面显示和数据库的编码统一罢了,一点也不复杂 ...


  首先,我在 JSP 页面加上 来强制页面显示 UTF-8 字符。然后,我给 webapp 加入了一个 Filter 来过滤提交过程中出现的乱码字符,具体 Filter 的相关程序以及配置如下:

EncodingFilter.java

import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.Filter;
import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.FilterConfig;

public class EncodingFilter implements Filter{

protected FilterConfig filterConfig;
private String targetEncoding = null;

public void init(FilterConfig config)throws ServletException{
this.filterConfig = config;
this.targetEncoding = config.getInitParameter("encoding");
}


public void doFilter(ServletRequest srequest,ServletResponse sresponse,FilterChain chain)throws IOException,ServletException{
// System.out.println("doFilter : encoding=" + targetEncoding);
HttpServletRequest request=(HttpServletRequest)srequest;
request.setCharacterEncoding(targetEncoding);

chain.doFilter(srequest,sresponse);
}


public void setFilterConfig(final FilterConfig filterConfig){
this.filterConfig=filterConfig;
}


public void destroy(){
this.filterConfig=null;
}

}

在 web.xml 加入如下配置:

<filter>
<filter-name>encoding</filter-name>
<filter-class>EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  配置好 Filter 后,我们在 Mysql Server 端的配置文件 my.cnf(my.ini)中的 [mysqld] 下加入 default-character-set =utf8 并放到 /etc 目录下,重启 MySql 服务,你也可以用 show variables 命令查看一下刚才的配置时候已经生效。完成以上步骤之后你就可以放心的向 MySql 中插入或抽取数据了,OK :)

 
原创粉丝点击