【新手向全教程】解决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(我差点这么干了,如果我老师没给解决我就重做了)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~