IDEA2024.2.3下使用tomcat-10.1.7跑Servlet时,System.out.println打印中文在Server中出现乱码(Server中文日志信息正常显示)

目录

问题描述:

解决方案:

测试证明有效:

上述解决方案依赖的具体场景:

1-IDEA全局设置了UTF-8编码

2-默认的apache-tomcat-10.1.7没有更改编码相关的配置文件(logging.properties),

3-deepseek思路【按前文描述解决不了就灵活问deepseek!】

视频解释【注意看17分钟左右】:

象漂亮更新动力!


问题描述:

IDEA运行普通Java程序打印中文不出现乱码,

然而用Tomcat跑Servlet执行System.out.println("Servlet下中文测试")出现中文乱码,形如下图

解决方案:

Tomcat 启动时如果没有 -Dfile.encoding=UTF-8,默认编码在windows下是GBK。【如果不设置则jvm加载.class文件使用的是GBK,而我们.java文件是UTF-8编译到.class文件,jvm使用GBK解码utf-8的.class文件,自然会出现乱码】

我个人配置的IDEA使用了全局UTF-8的配置,GBK和UTF-8冲突,所以乱码,一般我们会让编码保持一致,如GBK和GBK,UTF-8和UTF-8这样。

在Tomcat启动配置中添加 

-Dfile.encoding=UTF-8

形如下图

测试证明有效:

上述解决方案依赖的具体场景:

1-IDEA全局设置了UTF-8编码

2-默认的apache-tomcat-10.1.7没有更改编码相关的配置文件(logging.properties),

#默认配置
java.util.logging.ConsoleHandler.encoding = UTF-8

3-deepseek思路【按前文描述解决不了就灵活问deepseek!】

视频解释【注意看17分钟左右】:

085.乱码问题_HTML_Tomcat日志_sout乱码问题_哔哩哔哩_bilibili

象漂亮更新动力!

欢迎大家点赞、收藏、关注、评论、批评啦 

E:\study\tomcat\apache-tomcat-10.1.7-windows-x64\apache-tomcat-10.1.7\bin\catalina.bat run [2025-03-29 12:49:44,850] Artifact SharesViews:war exploded: Waiting for server connection to start artifact deployment... Using CATALINA_BASE: "C:\Users\fds\AppData\Local\JetBrains\IntelliJIdea2023.2\tomcat\e128b7f3-9212-4985-bb18-60573139d5e5" Using CATALINA_HOME: "E:\study\tomcat\apache-tomcat-10.1.7-windows-x64\apache-tomcat-10.1.7" Using CATALINA_TMPDIR: "E:\study\tomcat\apache-tomcat-10.1.7-windows-x64\apache-tomcat-10.1.7\temp" Using JRE_HOME: "E:\jdk17" Using CLASSPATH: "E:\study\tomcat\apache-tomcat-10.1.7-windows-x64\apache-tomcat-10.1.7\bin\bootstrap.jar;E:\study\tomcat\apache-tomcat-10.1.7-windows-x64\apache-tomcat-10.1.7\bin\tomcat-juli.jar" Using CATALINA_OPTS: "" 29-Mar-2025 00:49:45.521 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.服务器版本: Apache Tomcat/10.1.7 29-Mar-2025 00:49:45.524 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器构建: Feb 27 2023 20:25:27 UTC 29-Mar-2025 00:49:45.525 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器版本号: 10.1.7.0 29-Mar-2025 00:49:45.525 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 操作系统名称: Windows 10 29-Mar-2025 00:49:45.525 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS.版本: 10.0 29-Mar-2025 00:49:45.525 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 架构: amd64 29-Mar-2025 00:49:45.525 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java 环境变量: E:\jdk17 29-Mar-2025 00:49:45.525 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java虚拟机版本: 17.0.1+12-LTS-39 29-Mar-2025 00:49:45.525 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM.供应商: Oracle Corporation 29-Mar-2025 00:49:45.525 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: C:\Users\fds\AppData\Local\JetBrains\In
03-29
<think>好的,用户遇到了Tomcat 10.1.7在启动等待服务器连接的问题,操作系统是Windows 10使用JDK 17IntelliJ IDEA。我需要根据提供的引用信息常见问题来分析可能的原因解决方法。 首先,用户提到了启动Tomcat是通过进入安装目录的bin子目录并运行startup.sh,但这是在Linux下的操作,而用户用的是Windows,所以可能应该是执行startup.bat。不过用户在IDE中配置了远程服务器,这可能涉及到不同的启动方式,或者配置有误。需要确认是否正确配置了Tomcat的安装路径,引用[3]指出Tomcat的安装目录应直接包含binconf等目录,所以需要检查IntelliJ中的Tomcat配置是否正确指向了C:\Program4java\apache-tomcat-10.1.7。 其次,JDK版本兼容性也是一个可能的问题。Tomcat 10.1.7要求至少JDK 11,而用户使用的是JDK 17,理论上兼容,但有新版本可能会有兼容性问题。需要确认TomcatJDK17是否完全兼容,可能需要检查Tomcat日志文件,如catalina.out或localhost.log,查看是否有相关的错误信息。 端口冲突也是一个常见问题,特别是8080端口是否被其他程序占用。用户可以在命令行运行netstat -ano | findstr :8080来检查端口占用情况,并终止占用端口的进程。 另外,应用程序上下文配置的问题也可能导致启动延迟。引用[4]提到applicationContext中的路径配置,如果配置错误或上下文未正确加载,可能导致Tomcat启动卡住。需要检查项目的web.xml或应用配置,确保上下文路径正确,没有循环依赖或初始化阻塞的情况。 还有,IntelliJ IDEA的配置问题,比如部署设置是否正确,是否添加了正确的工件(Artifact),或者是否有断点或调试模式导致启动暂停。用户应检查IDE中的Tomcat服务器配置,确认部署的工件是否正确生成,并尝试清理重新构建项目。 最后,建议用户查看Tomcat日志文件,特别是catalina.loglocalhost.log,以获取具体的错误信息。如果日志中有类加载失败、资源未找到或Servlet初始化错误,可以根据日志内容进一步排查。 总结可能的原因:配置错误、端口冲突、JDK兼容性问题、应用程序上下文问题、IDE配置问题。需要逐步检查这些方面,从日志入手,确认具体问题所在。</think>### Tomcat 10.1.7 启动等待服务器连接的原因及解决方法 #### 一、可能原因分析 1. **配置路径错误** IntelliJ IDEA 中配置的 Tomcat 安装目录未正确指向 `C:\Program4java\apache-tomcat-10.1.7`(引用[3]),导致无法加载核心组件。例如,若路径包含空格或特殊符号,可能引发启动失败。 2. **端口冲突** Tomcat 默认使用 `8080` 端口,若该端口被其他程序(如 Skype、IIS)占用,会导致启动无限等待。可通过以下命令检查端口占用: ```bash netstat -ano | findstr :8080 ``` 3. **JDK 版本兼容性问题** 虽然 Tomcat 10.1.x 支持 JDK 17,但需确认 `JAVA_HOME` 环境变量指向正确的 JDK 17 路径,且 IntelliJ IDEA 的 **Project SDK** 配置与 Tomcat 使用的 JDK 一致(引用[3])。 4. **应用程序上下文配置错误** 若项目中的 `applicationContext` 路径配置异常(如未保留默认的 `/`),可能导致上下文加载阻塞(引用[4])。 5. **日志级别不足** Tomcat 日志未记录详细错误信息,需检查 `logs/catalina.log` `logs/localhost.log`。 --- #### 二、解决方法 1. **检查 Tomcat 配置路径** - 在 IntelliJ IDEA 中,进入 **Run/Debug Configurations** → **Tomcat Server** → **Local**。 - 确认 **Application Server** 指向 `C:\Program4java\apache-tomcat-10.1.7`(引用[3])。 - 确保 **Deployment** 选项卡中已正确添加项目工件(如 WAR 包)。 2. **解决端口冲突** - 终止占用 `8080` 端口的进程: ```bash taskkill /PID <进程ID> /F ``` - 或修改 Tomcat 端口: 编辑 `conf/server.xml`,将 `<Connector port="8080" ... />` 中的端口改为 `8081` 等。 3. **验证 JDK 配置** - 在 IntelliJ IDEA 中,进入 **File → Project Structure → Project**,确认 **Project SDK** 为 JDK 17- 检查系统环境变量 `JAVA_HOME` 是否指向 JDK 17 安装目录。 4. **检查应用程序上下文** - 在项目的 `web.xml` 或 Spring 配置文件中,确保上下文路径未冲突(引用[4])。例如: ```xml <Context path="/myapp" docBase="myapp" /> ``` 5. **查看详细日志** - 打开 `logs/catalina.log`,搜索 `SEVERE` 或 `ERROR` 级别的日志- 若存在 `ClassNotFoundException` 或 `Servlet` 初始化失败,需检查依赖包是否完整。 --- #### 三、操作示例(IntelliJ IDEA 配置) 1. **添加 Tomcat 服务器** - 进入 **Settings → Build, Execution, Deployment → Application Servers**,点击 **+** 选择 Tomcat- 设置 **Tomcat Home** 为 `C:\Program4java\apache-tomcat-10.1.7`(引用[3])。 2. **部署项目** - 在 **Run/Debug Configurations** 中,选择 **Deployment** 选项卡,点击 **+** 添加 **Artifact**。 - 确保 **Application Context** 设置为 `/` 或自定义路径(引用[4])。 --- #### 四、高级排查 1. **启用调试模式** 在 Tomcat 启动配置的 **Startup/Connection** 选项卡中,添加 `-Xdebug` 参数,通过断点检查阻塞位置。 2. **清理 Tomcat 缓存** 删除 `work/Catalina` `temp` 目录中的缓存文件,避免旧配置残留。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员象漂亮

竭诚为您服务!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值