java - 在 Jetty 9.4.2 中禁用默认错误响应主体

标签 java servlets jakarta-ee jetty servlet-3.0

当 Jetty 捕获异常并返回错误时,如何禁用默认响应体?我没有使用任何 XML 或 WAR,也不想添加任何内容。

我更愿意避免在每个 servlet 中执行 try {//Servlet code } catch (Exception e) { resp.setStatus(500) }

如果我不这样做,Jetty 将返回一个 500 响应,其中包含一个指定堆栈跟踪的正文。如果到达未找到的端点,Jetty 将返回一个 404 响应,其正文为“Powered by Jetty”。我想删除那些主体并只保留响应代码。

这是启动我的 Jetty 服务器的代码:

private static void startServer() throws Exception {
    final org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server(7070);
    final WebAppContext context = new WebAppContext("/", "/");
    context.setConfigurations(new Configuration[] { new AnnotationConfiguration(), new WebInfConfiguration() });
    context.setExtraClasspath("build/classes/main/com/example");
    server.setHandler(context);
    server.start();
    server.join();
}

最佳答案

Jetty documentation 中描述了解决方案:

为了在生成错误页面时覆盖 Jetty 默认行为,需要一个扩展 ErrorHandler 的类。它可以通过 ContextHandler 或 Jetty 服务器注册。

CustomErrorHandler 类:

public class CustomErrorHandler extends ErrorHandler {

    @Override
    protected void writeErrorPage(HttpServletRequest request, Writer writer, int code, String message, boolean showStacks) throws IOException {}
}

然后我将其添加到我的 Jetty 嵌入式配置中: context.setErrorHandler(new CustomErrorHandler());

关于java - 在 Jetty 9.4.2 中禁用默认错误响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43160377/

相关文章:

java - 从 servlet 调用外部 Web 服务

spring - Hibernate - Spring,SessionFactory nullPointerException(调用 getCurrentSession() 时)

java - 在复杂环境中处理属性和 log4j 的工具

apache - 如何为粘性 session 配置Glassfish 4集群?

java - PostgreSQL Between 子句

java - Android studio,打开一个文件,不断写入然后关闭

java - 如何为JADE Agent设置AID?

java - Java中没有输出

java - servlet 中的线程局部变量

mysql - HTTP 状态 500 - 处理 JSP 页面时发生异常,未检索到数据