【新手向全教程】解决jsp和Tomcat连接数据库时中文无法查询的情况

在做毕设,发现在jsp界面查询中文数据时总是显示为空,打印出来发现中文都变成??,但数据库里是有这个数据的,我尝试了网上所有方法,最后在老师的指导下完美解决这个问题,以下贴出我查过的资料以及我最后的解决办法

我也是在网上翻了无数的教程,也算是在此汇总一下,方便大家学习,欢迎指正

这实际上是编码问题,所以我们要统一编码,编码使用utf8完全可以

在此之前请确认自己的代码无错,数据库查询语句无错,本篇主要解决编码问题

开发工具:idea,tomcat 9

①数据库设置

(1)代码里加上useUnicode=true&characterEncoding=utf8,如:

(2)数据库设置如下:

   字符集:uft8 

   数据库排序规则:utf_general_ci

(3)找到并编辑MySQL的配置文件my.ini

    在[client]段增加下面代码default-character-set=utf8(这里有的帖子建议改成gbk,但是我用utf8完全可以,如果本贴所有方法都尝试过后仍然不成功可尝试设置gbk)

(网图)

 

②代码设置

(1)在所有jsp页面代码中加入<%@ page contentType="text/html;charset=UTF-8" language="java" %>

(2)在方法最前面加入,如

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
(挺粗暴的哈)

(3)加入中文编码方法,如

if(name != null && !name.trim().isEmpty()){  //name非空
name = new String(name.getBytes("ISO-8859-1"),"utf-8");
customer.setName(name);
}

(4)将get方法改成post方法

我失败了,因为我的代码会报错,但不意味这个办法不可行,相反的,这个方法确实有用,我只是后续代码出了问题

 

 这里的get换成post试试

 

③Tomcat的设置

(1)(本人使用此种方法解决)

在tomcat的conf文件夹下的conf中找到server.xml文件
添加`URIEncoding="UTF-8"`内容
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8  useBodyEncodingForURI="true"/>

其中 useBodyEncodingForURI="true"这句一般在Tomcat 8以下才要加入,但本人使用Tomcat 9依然需要加入,所以建议所有版本的Tomcat均加入这句

 

(2)(同样适用于控制台中文乱码)

tomcat找到conf文件夹下的logging.properties文件,加入java.util.logging.ConsoleHandler.encoding = GBK

如果你使用了GBK汉字内码扩展规范依旧无效可以尝试换成UTF-8

 

 ④没办法的办法

如果你到这里依然没解决问题,我建议仔细检查代码或者之前的编码设置,这个东西很多,漏掉也在所难免

(1)找老师咨询(这个真的管用,经过本次事件之后我真的想说,姜还是老的辣)

(2)加入过滤器(我懒得写,我没有尝试这个办法)

(3)重做项目,尝试其他方法,如将servlet换成springboot(我差点这么干了,如果我老师没给解决我就重做了)





 

posted @ 2022-03-02 16:44  Catiser  阅读(424)  评论(0编辑  收藏  举报