运行Maven项目后无法查看Tomcat服务器状态,求排查帮助
Tomcat控制台无状态输出问题排查
代码逻辑错误修正
你的App类存在执行顺序错误,导致后续配置代码无法运行,自然看不到Tomcat状态日志。原代码:
package com.vikasreddy.springweb.MavenWebApp; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; import jakarta.servlet.Servlet; public class App { public static void main( String[] args ) throws LifecycleException { System.out.println( "Hello World!" ); Tomcat tomcat = new Tomcat(); tomcat.start(); tomcat.getServer().await(); Context context = tomcat.addContext(" ", null); Tomcat.addServlet(context, "h1", (Servlet) new HelloServlet()); context.addServletMappingDecoded("/hello", "h1"); } }
问题出在tomcat.start()和await()调用后,Tomcat进入阻塞等待状态,后面的Context、Servlet配置代码根本不会执行。调整顺序后:
package com.vikasreddy.springweb.MavenWebApp; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; import jakarta.servlet.Servlet; public class App { public static void main( String[] args ) throws LifecycleException { System.out.println( "Hello World!" ); Tomcat tomcat = new Tomcat(); // 先完成上下文与Servlet配置 Context context = tomcat.addContext("", null); Tomcat.addServlet(context, "h1", (Servlet) new HelloServlet()); context.addServletMappingDecoded("/hello", "h1"); // 再启动Tomcat并进入等待状态 tomcat.start(); tomcat.getServer().await(); } }
Eclipse环境排查步骤
- 确认运行方式:你是直接运行
App的main方法启动嵌入式Tomcat,还是通过Servers标签启动独立Tomcat?两种方式完全独立,若用Servers启动,需将项目部署到服务器,而非运行自己的main方法。 - 切换控制台窗口:点击Eclipse控制台右上角的「Display Selected Console」按钮,确认是否切换到了对应Tomcat控制台(Servers启动)或Java应用控制台(main方法启动)。
- 调整日志级别:打开Tomcat安装目录下的
conf/logging.properties,将org.apache.catalina.level设为INFO,避免级别过高过滤状态日志。 - 检查Maven依赖:确保
pom.xml已引入嵌入式Tomcat相关依赖,示例:
<dependencies> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>10.1.15</version> <!-- 匹配你的Tomcat版本 --> </dependency> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> </dependencies>
- 排查端口冲突:若Tomcat启动失败,可能是默认8080端口被占用。可在代码中指定其他端口:
tomcat.setPort(8081);
内容的提问来源于stack exchange,提问作者1DS18CS171_ vikas
相关产品推荐
相关产品推荐

