Tomcat8和Tomcat9乱码问题
今天新开了一个小项目,我丢,乱码了,咋回事,好久没遇到过了,都忘了咋回事。今天必须记录下来,避免继续踩坑
Tomcat 8
不需要进行任何配置即可,它默认的是GBK,而win10 win7 默认的也是GBK,所以
项目放webapp下然后 启动startup.bat 所展现的启动窗口,也不会有乱码。至于idea中配置Tomcat8 ,控制台也不会有乱码,如果有,那就看下图是否设置为GBK
Tomcat 9
默认的是utf - 8,所以需要做下处理:
1、修改 conf/logging.properties 下图红框内容,utf-8 改为 GBK
2、bin\catalina.out 增加以下内容
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% -Dfile.encoding=GBK"
网上都是教set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% -Dfile.encoding=utf-8"
运行项目也没问题,但是在项目中输出System.out.print() 就乱码了,因为这时输出到idea控制台的编码是utf-8,而你的 Settings - >Editor -> Console 中配置的是GBK,所以乱码。如果你改
Settings - >Editor -> Console 的 GBK 为 utf-8 ,那么idea运行Tomcat时,所打印出来的Tomcat相关信息又是乱码了,因为你第一步设置为GBK了。所以第一步,你还得改为utf-8 。但这又会有一个问题,那就是你把项目放到 Tomcat 的webapp下运行,这时候所弹出来的运行窗口又是乱码了,因为该窗口默认的是gbk,哈哈,你还得把第一步改为gbk才行。
所以建议按此文章内的正常步骤设置即可
3、确保idea配置如下图
那么,Tomcat 9经过上面配置后,效果跟Tomcat 8 一样了
其他说明
1、乱码跟idea这些配置没有关系的,当然,下图我们就应该这样配置,在项目未创建之前都该这样配置了
2、Tomcat 10 启动报错
参考网文:
原来是 Servlet、JSP 与 Spring 的版本之间的匹配出了问题。众所周知,2018 年,Java EE 改名为 Jakarta EE。这导致一些 JAR 包的包名也在之后的版本中进行了更改。这对本项目的影响是,Spring 本身是不含 Servlet、JSP 的 JAR 包的,但其依赖这些 JAR 包。如果在 Tomcat 服务器中部署的项目使用了 Spring,则这部分的 JAR 包将由 Tomcat 服务器来提供。而问题在于,Spring 5.2.9.RELEASE 期望的 JAR 包前缀是 javax,而Tomcat 10.0.0 提供的 JAR 包前缀是 jakarta。因此,Spring 报了一个认为没有 Servlet、JSP 的 JAR 包的错。
(查看 Tomcat 的各版本对应的 Servlet 等的版本的网址是:http://tomcat.apache.org/whichversion.html)
由于 Tomcat 与 Servlet、JSP 的 JAR 包关系密切,因此无法通过替换 Tomcat 下的文件夹 lib 中 Servlet、JSP 的 JAR 包来解决。而且这也无法通过在 Maven 中添加正确的 Servlet、JSP 依赖来解决,实际上,如果该工程的纯 Java 代码的部分没有使用到 Servlet、JSP 的 JAR 包,其实这里在 Maven 添加的 Servlet、JSP 依赖都可以删掉。(更专业的说法是,在基于 Maven 的 Web 应用中,对 Servlet、JSP 的依赖范围为 provided。)
幸运的是,Tomcat 9.0.41 使用的 JAR 包前缀是 javax 。因此,这里只需要再安装一个Tomcat 9.0.41 即可解决(不需要卸载已有的 Tomcat,因为不同版本的 Tomcat 的安装路径可以不同,只是安装时需要先关闭已有的 Tomcat 服务器,避免占用同一个端口号)。
3、网上说在idea的Tomcat配置里加,其实不用加
4、这属于URI的乱码,跟上面乱码不是一回事,但也要设置下