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

如何通过编程方式自定义嵌入式Tomcat的错误页面?

嵌入式Tomcat自定义错误页面配置方法

采用编程式配置嵌入式Tomcat时,可通过以下步骤自定义错误页面:

1. 实现自定义错误处理组件

你可以写一个Servlet来处理错误渲染,比如ErrorPageServlet:

public class ErrorPageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 从请求中获取错误相关属性
        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        String errorMessage = (String) request.getAttribute("javax.servlet.error.message");
        
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html><head><title>自定义错误页</title></head>");
        out.println("<body>");
        out.println("<h2>页面出错啦</h2>");
        out.println("<p>状态码:" + (statusCode != null ? statusCode : "未知") + "</p>");
        out.println("<p>错误信息:" + (errorMessage != null ? errorMessage : "无详细信息") + "</p>");
        out.println("</body></html>");
    }
}

2. 在Tomcat配置中绑定错误页面

在你的嵌入式Tomcat启动代码里,先注册错误Servlet,再通过Context对象配置错误映射规则:

public static void main(String[] args) throws Exception {
    Tomcat tomcat = new Tomcat();
    tomcat.setPort(Integer.getInteger("port", 8080));
    tomcat.getConnector();

    // 创建Web上下文
    Context ctx = tomcat.addContext("", new File(".").getAbsolutePath());

    // 注册错误处理Servlet
    Tomcat.addServlet(ctx, "ErrorPageServlet", new ErrorPageServlet());
    ctx.addServletMappingDecoded("/error", "ErrorPageServlet");

    // 配置特定状态码的错误页映射
    ErrorPage error404 = new ErrorPage();
    error404.setErrorCode(404);
    error404.setLocation("/error");

    ErrorPage error500 = new ErrorPage();
    error500.setErrorCode(500);
    error500.setLocation("/error");

    // 配置全局异常对应的错误页
    ErrorPage generalError = new ErrorPage();
    generalError.setExceptionType("java.lang.Throwable");
    generalError.setLocation("/error");

    // 将错误页规则添加到上下文
    ctx.addErrorPage(error404);
    ctx.addErrorPage(error500);
    ctx.addErrorPage(generalError);

    // 注册你的业务Servlet
    Tomcat.addServlet(ctx, "HelloServlet", new HelloServlet());
    ctx.addServletMappingDecoded("/hello", "HelloServlet");

    tomcat.start();
    tomcat.getServer().await();
}

3. 可选:使用静态HTML作为错误页

如果不需要动态处理,也可以直接指定静态HTML文件路径:

ErrorPage error404 = new ErrorPage();
error404.setErrorCode(404);
// 假设静态文件放在项目根目录下的errors/404.html
error404.setLocation("/errors/404.html");
ctx.addErrorPage(error404);

此时需要注册默认Servlet来处理静态资源请求:

Tomcat.addServlet(ctx, "default", new DefaultServlet());
ctx.addServletMappingDecoded("/", "default");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:15:00