You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌入式Tomcat Java应用启动后无法访问,求问题排查方案

问题分析与解决方案

你的问题核心在于:你只是启动了Tomcat核心服务,但没有配置任何可对外提供服务的Web应用上下文(Context)和请求处理端点(比如Servlet)。Tomcat启动后,因为没有需要处理的Web应用实例,HTTP连接器并没有真正监听你设置的8888端口,这就是为什么netstat看不到端口开放、curl连接被拒绝的原因。

下面是修正后的代码,我会一步步解释关键改动:

import org.apache.catalina.Context;
import org.apache.catalina.startup.Tomcat;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws Exception {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8888);
        
        // 1. 创建根路径的Web应用上下文,指定临时目录作为资源目录(无需静态资源时临时目录完全够用)
        Context context = tomcat.addWebapp("", System.getProperty("java.io.tmpdir"));
        
        // 2. 定义一个简单的Servlet处理GET请求
        HttpServlet helloServlet = new HttpServlet() {
            @Override
            protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
                resp.setContentType("text/plain");
                resp.getWriter().write("Hello from embedded Tomcat!");
            }
        };
        // 注册Servlet并映射到根路径 "/"
        Tomcat.addServlet(context, "helloServlet", helloServlet);
        context.addServletMappingDecoded("/", "helloServlet");
        
        tomcat.start();
        tomcat.getServer().await();
    }
}

关键改动说明:

  • 添加Web应用上下文:tomcat.addWebapp("", System.getProperty("java.io.tmpdir")) 为Tomcat默认Host添加了根路径的Web应用,这一步是让Tomcat明确知道需要为哪个路径提供服务,是激活端口监听的前提。
  • 注册并映射Servlet:我们创建了一个极简的HttpServlet处理根路径的GET请求,通过映射配置告诉Tomcat:当收到localhost:8888的请求时,用这个Servlet来处理。

依赖补充说明:

你的build.gradle依赖tomcat-embed-core:9.0.21足够运行这个示例,但如果之后需要支持JSP,需额外添加:

implementation 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.21'

现在运行修正后的代码,再用curl localhost:8888测试,应该能收到返回的文本,同时netstat -nlt也能看到8888端口处于监听状态了。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:21:08