【问题标题】:How to set HTTP status code in JSP error handlers如何在 JSP 错误处理程序中设置 HTTP 状态码
【发布时间】:2011-05-22 04:54:01
【问题描述】:

我有一个 JSP 页面(在 Tomcat 中),它使用 JSP 标签来检索一些数据。但是这些 JSP 标签可能会抛出异常(例如,当参数值无效时)。现在我想为这些情况实现更好的错误处理。我未能找到一种方法来全局指定异常处理程序(web.xml 中的错误页面定义不适用于 JSP 中引发的异常)。到目前为止,我发现的唯一方法是在所有 JSP 文件的页眉中指定一个 errorPage 属性。

<% page errorPage="/WEB-INF/jsp/errors/500.jsp" %>

对所有 JSP 都这样做很烦人,但可以接受。但不能接受的是错误页面总是以 200 的 HTTP 状态代码提供的事实。我想要一个 500 代替。我尝试使用 servlet 作为 errorPage 而不是 JSP,并尝试设置 response.setStatus(500) 和 response.sendError(500) 但两个调用似乎都被忽略了。所以这段代码打印了两次“200”,我不知道为什么:

System.out.println(response.getStatus());
response.setStatus(500);
System.out.println(response.getStatus());

所以问题是:如何在 JSP 错误处理程序中设置 HTTP 状态码?

【问题讨论】:

    标签: java jsp tomcat jakarta-ee


    【解决方案1】:

    您可以在web.xml 中配置错误页面。

    <error-page>
            <error-code>
                500
            </error-code>
            <location>
                /500.jsp
            </location>
        </error-page>
    

    在您的500.jsp 中,将指令设置为&lt;%@ page isErrorPage="true" %&gt;

    【讨论】:

    • 正如我所写:web.xml 中的错误页面定义不适用于 JSP。我已经在 web.xml 中有这些行来捕获 Servlet 中抛出的异常,它在那里工作正常,但我的问题是 JSP 中的异常处理,而不是 servlet。
    【解决方案2】:

    您最好使用sendError(500) 而不是setStatus(500) - 存在一些差异。 web.xml 中的配置适用于 sendError,但是,如果您不希望 web.xml 中的配置,页面指令中的 error-page 仅适用于我的异常,而不适用于 HTTP 错误代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2012-09-25
      • 2019-09-18
      • 1970-01-01
      • 2020-07-05
      • 2020-07-14
      • 2018-10-01
      相关资源
      最近更新 更多