2017-04-01 45 views
1

當Jetty捕獲異常並返回錯誤時,如何禁用默認響應主體?我沒有使用任何XML或WAR,我不想添加任何。在Jetty中禁用默認錯誤響應正文9.4.2

我寧願避免在每個servlet中都做一個try { // Servlet code } catch (Exception 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(); 
} 

回答

-1

將溶液在Jetty documentation描述:

是需要的,以便產生誤差頁面時覆蓋碼頭默認行爲延伸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 {} 
} 

我加入這個到我的碼頭嵌入式配置: context.setErrorHandler(new CustomErrorHandler());

我沒有使用任何XML或WAR神器
1

在你的WAR文件的WEB-INF/web.xml,指定要用於處理錯誤的<error-page>元素。

實施例:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 
    <servlet> 
    <servlet-name>myerror</servlet-name> 
    <servlet-class>com.company.MyErrorServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>myerror</servlet-name> 
    <url-pattern>/myerror</url-pattern> 
    </servlet-mapping> 

    <error-page> 
    <location>/myerror</location> 
    </error-page> 
</web-app> 

<error-page>元件可以是相當強大。

查看其它答案在https://stackoverflow.com/a/16340504/775715

+0

,只是註解的servlet。有沒有程序化的解決方案?在你的解決方案中,每個錯誤(500,404等)都會轉到同一個MyErrorServlet嗎?我想返回相同的錯誤代碼,但沒有泄露數據的Jetty響應主體。 – niklabaz

+0

您使用「WebAppContext」這一事實意味着您正在使用戰爭(可能是爆炸目錄)。你不能用註釋指定錯誤頁面(沒有註釋),你必須使用'WEB-INF/web.xml'。查看其他答案以瞭解錯誤分派和有關錯誤狀態的屬性。 –