Tomcat 项目报错和中文乱码
错误1 :
java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' Query: select * from librarian where username = ? and password = ? Parameters: [张飞, 123]
报错原因:
Mysql 建库,建表,字段的编码方式不对
修改方法:
如果建库未修改编码方式,则需要修改库 -> 表 -> 表中字段的编码方式
ALTER DATABASE coursework CHARACTER SET utf8;
ALTER TABLE students CHARACTER SET utf8;
ALTER TABLE students CHANGE sex sex VARCHAR(2) CHARACTER SET utf8;
ALTER TABLE librarian CHARACTER SET utf8;
ALTER TABLE librarian CHANGE username username VARCHAR(20) CHARACTER SET utf8;
ALTER TABLE librarian CHANGE PASSWORD PASSWORD VARCHAR(20) CHARACTER SET utf8;
错误2 :中文乱码问题
2.1 tomcat服务器启动打印日志乱码:
控制台(gbk)和tomcat(utf-8)编码方式不一样
解决方法:
修改conf目录下的logging.properties 文件
2.2 表单提交参数中文乱码问题
浏览器默认对中文进行编码的方式为UTF-8,服务器端接收到参数以后若解码方式不一致则会产生乱码
-
get方式提交中文不会产生乱码 -> get提交参数拼接在url后 -> tomcat 8版本以后内部对于URL编辑码采用的是UTF-8
-
post方式提交中文会乱码 -> post提交参数是在请求体中 -> 服务器默认解码方式为 ISO-8859-1
解决方式:
指定解码方式:
void setCharacterEncoding(String env)
放在servlet首行,或在全局Filter中配置
2.3 响应中文乱码问题
printwriter.write("中文");
服务器端对中文默认编码方式 ISO-8859-1, 而浏览器默认的解码方式为GBK(windows 10系统)
解决方法:
方法一:更改服务器端编码方式使其和浏览器端解码方式保持一致
- 设置服务器编码方式和浏览器端一致,GBK
- 写在servlet首行
resp.setCharacterEncoding("GBK")
方法二:使用方法直接将服务器和浏览器端编解码方式设置为一致
resp.setContextType("text/html;charset=utf-8")
2.4 tomcat服务器启动访问项目中的html静态资源中文出现乱码问题
修改配置文件 - server.xml
web.xml

浙公网安备 33010602011771号