【问题标题】:Change response code in javax.servlet.http.HttpServlet更改 javax.servlet.http.HttpServlet 中的响应代码
【发布时间】:2015-07-20 10:58:11
【问题描述】:

javax.servlet.http.HttpServlet 的实现中,方法中抛出了异常。所以HTTP响应码是500

是否可以将响应代码设置为其他内容?还是每次出现异常时500

【问题讨论】:

标签: java http servlets httpresponse http-response-codes


【解决方案1】:

只需检查前置条件或捕获异常并通过HttpServletResponse#setStatus()HttpServletResponse#sendError() 设置所需的响应状态,具体取决于状态代码的性质(4nn/5nn == 错误)。

您的问题的表述方式表明,在您的情况下,无法使用例如执行简单的前置条件检查。 if 声明如下基本示例:

if (foo != null) { 
    processFoo(request, response, foo);
}
else {
    response.sendError(HttpServletResponse.SC_BAD_REQUEST);
}

显然它是一个第 3 方 servlet 左右。在这种情况下,创建一个servlet filter,它在Filter#doFilter() 方法中执行以下工作并将其映射到所需的servlet:

try {
    chain.doFilter(request, response);
}
catch (ServletException e) {
    if (e.getRootCause() instanceof IllegalArgumentException) {
        response.sendError(HttpServletResponse.SC_BAD_REQUEST);
    }
    else {
        throw e;
    }
}

用感兴趣的状态码替换IllegalArgumentException,当然还有SC_BAD_REQUEST (400)。

无论哪种方式,这都不会再咨询<error-page><exception-type>,因此最终会出现以下错误页面:

<error-page>
    <status-code>400</status-code>
    </location>/WEB-INF/errorpages/400.jsp</location>
</error-page>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多