[错误]解决Myeclipse中的javaWeb项目向mysql数据库执行sql语句取不到结果,request获取的参数出现中文乱码

问题:

在控制台上测试文学类的共有18种,然而Servlet返回的结果却不正确.并且商品分类显示乱码.
在这里插入图片描述
在这里插入图片描述

分析:

  1. 在控制台上测试能够得到正确的结果 说明sql语句没有问题
  2. Servlet返回的结果却不正确,可能是获取到的request参数出现了问题.
  3. 获取到的参数是通过url传递的,请求方式是get
  4. tomcat收到了这批数据,getParameter 默认使用ISO-8859-1去解码
  5. 而我的开发环境使用的是utf-8编码,这就使得get请求过来的数据在url地址栏上就已经经过ISO-8859-1编码了,所以我们取到的就是乱码,

解决方案

  1. 代码转码
    比如:
    String username = request.getParameter("username");
    //get请求过来的数据,在url地址栏上就已经经过编码了,所以我们取到的就是乱码,
    //tomcat收到了这批数据,getParameter 默认使用ISO-8859-1去解码

    //先让文字回到ISO-8859-1对应的字节数组 , 然后再按utf-8组拼字符串
    username = new String(username.getBytes("ISO-8859-1") , "UTF-8");

  2. (推荐) 直接在tomcat里面做设置处理 (以后get请求过来的数据永远都是用UTF-8编码。)
    conf/server.xml 加上URIEncoding=“utf-8”

    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

我采用第二种解决方案,一劳永逸!!!找到Tomcat的安装目录conf/server.xml,使用高级记事本(比如EditPlus)打开,相应位置加上URIEncoding="utf-8"
在这里插入图片描述
在这里插入图片描述
最终完美解决:

在这里插入图片描述

踩过的坑

  1. 之前一直以为是数据库的编码和myEclipse的编码不一致导致的,通过网上查阅资料,查看我的数据库和myeclipse的编码,发现都是utf-8编码,没有不一致.
    SHOW CREATE DATABASE bookstore;查看我的数据库编码
    在这里插入图片描述
    t_70)

  2. 接着看到其他人的解决方案,考虑说是不是jdbc的url没有指定约束,于是我修改我的c3p0-config.xml
    jdbc:mysql://localhost:3306/bookstore==>jdbc:mysql://localhost:3306/bookstore?useUnicode=true&amp;characterEncoding=utf-8

然而并没有用…
注意: 在xmi文件中需要将&进行转义&amp; 即jdbc:mysql://localhost:3306/bookstore?useUnicode=true&characterEncoding=utf-8这种写法是错误的,xml不能识别,会报错!!!

在这里插入图片描述

小结

  • 总之,一定要注意中文乱码问题,无论是客户端提交数据给服务器端,还是服务器返回数据给客户端 ,如果数据中带有中文的话,有可能会出现乱码情况,一定要解决中文乱码问题,
  • 服务器总客户端获取的中文参数一定不能有乱码, 否则使用获取到的乱码参数去执行sql, 是得不到正确的结果的!!!

猜你喜欢

转载自blog.csdn.net/weixin_43843847/article/details/89737343