jsp和servlet操作mysql中文乱码问题的解决办法

 更新时间:2014年04月23日 09:41:44   作者:  
自己做测试的时候用到jsp/servlet 向mysql中写数据,但是中文总是乱码,今早纠结了半天才搞定,分享给大家我的解决办法

首先看是从什么地方开始出现的乱码,只要统一编码,就不会出现乱码,下面以uft-8(个人认为最好)为例,详细说明:

1、如果乱码是从jsp页面出现的,jsp头部页面加上:
<%@ page language="java" pageEncoding="UTF-8" %>
在head标签中加上标签。

2、如果乱码是在servlet中出现的,则有两种方法:
一种是在每个servlet中doget和doPost方法头部加上
request.setCharacterEncoding(“UTF-8″);
第二种最保险,一劳永逸,是专门写一个过滤器类,也称国际化,类名为SetCharacterEncodingFilter内容如下

复制代码 代码如下:

package com.sharep.filter;//包名
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 SetCharacterEncodingFilter implements Filter
{
 protected String encoding = null;
 protected FilterConfig filterConfig = null;
 protected boolean ignore = true;
 public void init(FilterConfig filterConfig) throws ServletException
 {
  this.filterConfig = filterConfig;
  this.encoding = filterConfig.getInitParameter("encoding");
  String value = filterConfig.getInitParameter("ignore");
  if (value == null)
   this.ignore = true;
  else if (value.equalsIgnoreCase("true"))
   this.ignore = true;
  else
   this.ignore = false;
 }
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException
 {

  if (ignore || (request.getCharacterEncoding() == null))
  {
   String encoding = selectEncoding(request);
   if (encoding != null)
    request.setCharacterEncoding(encoding);
  }
  chain.doFilter(request, response);
 }
 public void destroy()
 {
  this.encoding = null;
  this.filterConfig = null;
 }
 protected String selectEncoding(ServletRequest request)
 {
  return (this.encoding);
 }
}

然后在web-inf的web.xml中加上如下代码:

复制代码 代码如下:

<filter>
  <filter-name>SetCharacterEncoding</filter-name>
  <filter-class>com.young.filter.SetCharacterEncodingFilter</filter-class>//注意这里是类名,要有完整包名
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>SetCharacterEncoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

这样就搞定了

3、如果还是有乱码,就是mysql数据库的问题了

1)保证建立数据库的时候数据库编码选择的是utf-8,最好在每个表中也指定编码格式,mysql默认是latin1
2)如果mysql版本是4.x以上,数据库中还是出现乱码,有以下两种解决方法:
一种是在连接数据库的代码中指定编码方式:

复制代码 代码如下:
String url = “jdbc:mysql://localhost:3306/test2?autoReconnect=true&useUnicode=true&characterEncoding=gbk&mysqlEncoding=utf8″ ;

如果还是不行的话就是用

复制代码 代码如下:
show variables like ‘collation_%';

这个命令来查看默认字符集,如果不是utf-8的话在my.ini(windows)或者是my.cnf(linux)将相应的编码修改成utf8之后重启mysql服务器就ok了

相关文章

  • JSP开发之Spring方法注入之替换方法实现

    JSP开发之Spring方法注入之替换方法实现

    这篇文章主要介绍了JSP开发之Spring方法注入之替换方法实现的相关资料,需要的朋友可以参考下
    2017-07-07
  • 关于JSP用户登录连接数据库详情

    关于JSP用户登录连接数据库详情

    这篇文章主要介绍了关于JSP用户登录连接数据库的相关资料,需要的朋友可以参考下面文章内容
    2021-09-09
  • tomcat 3.1在RedHat下的安装

    tomcat 3.1在RedHat下的安装

    tomcat 3.1在RedHat下的安装...
    2006-10-10
  • JSP 自定义标签之一 简单实例

    JSP 自定义标签之一 简单实例

    当前软件开发越来越重视分工与协作,对于JSP技术而言,视图层与模型层分别由不同的团队完成也成为理所当然的选择,基于技术专长不同及其它因素考虑,众多规范中都明确要求JSP页面代码中不允许出现Java代码。
    2009-07-07
  • jsp获取客户端IP地址的方法

    jsp获取客户端IP地址的方法

    这篇文章主要介绍了jsp获取客户端IP地址的方法,涉及jsp获取客户端信息的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • 简单实现jsp分页

    简单实现jsp分页

    这篇文章主要为大家详细介绍了如何简单实现jsp分页,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JBuilder2005实现重构

    JBuilder2005实现重构

    JBuilder2005实现重构...
    2006-10-10
  • jsp 判断list是否包含string的实现方法

    jsp 判断list是否包含string的实现方法

    下面小编就为大家带来一篇jsp 判断list是否包含string的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • 详解JSP中的语句对象Statement操作MySQL的使用实例

    详解JSP中的语句对象Statement操作MySQL的使用实例

    这篇文章主要介绍了JSP中的语句对象Statement操作MySQL的使用实例,讲解了添加记录、更新记录、删除记录三种操作,说明都在代码注释中简单明了,需要的朋友可以参考下
    2016-04-04
  • 几种防止表单重复提交的方法

    几种防止表单重复提交的方法

    表单重复提交是在多用户Web应用中最常见的一个问题,很多场合都会遇到这种情况,下面与大家分享下防止表单重复提交的几种策略
    2014-02-02

最新评论