Java 禁用Jetty 9.4.2中的默认错误响应正文

Java 禁用Jetty 9.4.2中的默认错误响应正文,java,servlets,jakarta-ee,jetty,servlet-3.0,Java,Servlets,Jakarta Ee,Jetty,Servlet 3.0,当Jetty捕获异常并返回错误时,如何禁用默认响应主体?我没有使用任何XML或WAR,也不想添加任何XML或WAR 我宁愿避免在每个Servlet中执行try{//Servlet code}catch(异常e){resp.setStatus(500)} 如果我不这样做,Jetty将返回一个500响应,其中包含一个指定堆栈跟踪的主体。如果到达一个未找到的端点,Jetty将返回404响应,响应体显示“由Jetty供电”。我想移除那些尸体,只保留回复代码 这是启动Jetty服务器的代码: privat

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

我宁愿避免在每个Servlet中执行
try{//Servlet code}catch(异常e){resp.setStatus(500)}

如果我不这样做,Jetty将返回一个500响应,其中包含一个指定堆栈跟踪的主体。如果到达一个未找到的端点,Jetty将返回404响应,响应体显示“由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();
}

在war文件的
WEB-INF/WEB.xml
中,指定要用于处理错误的
元素

例如:


迈罗
com.company.MyErrorServlet
迈罗
/迈罗
/迈罗
元素可能非常强大


参见

中的其他答案解决方案如所述:

生成错误页面时,需要扩展类
ErrorHandler
,以覆盖Jetty默认行为。它可以通过
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(新的CustomErrorHandler())

我没有使用任何XML或WAR工件,只使用servlet的注释。有程序化的解决方案吗?在您的解决方案中,每个错误(500、404等)是否都会转到同一个MyErrorServlet?我想返回相同的错误代码,但没有泄漏数据的Jetty响应主体。您使用的是
WebAppContext
这一事实意味着您使用的是war(它可以是分解目录)。不能指定带有注释的错误页面(没有注释),必须使用
WEB-INF/WEB.xml
。请参阅另一个答案以了解错误分派和有关错误状态的属性。如果要将其添加到WebAppContext,则需要从
ErrorPageErrorHandler
扩展,而不是
ErrorHandler
(这是针对非上下文和服务器端错误的)