Java 禁用Jetty 9.4.2中的默认错误响应正文
当Jetty捕获异常并返回错误时,如何禁用默认响应主体?我没有使用任何XML或WAR,也不想添加任何XML或WAR 我宁愿避免在每个Servlet中执行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
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
(这是针对非上下文和服务器端错误的)