如何在JSP错误处理程序中设置HTTP状态代码

kay*_*ahr 6 java jsp tomcat java-ee

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

<% page errorPage="/WEB-INF/jsp/errors/500.jsp" %>
Run Code Online (Sandbox Code Playgroud)

对所有JSP执行此操作非常烦人,但可以接受.但不能接受的是,错误页面始终以HTTP状态代码200提供.我想要500而不是.我尝试使用servlet作为errorPage而不是JSP,并尝试设置response.setStatus(500)和response.sendError(500),但两个调用似乎都被忽略了.所以这段代码打印"200"两次,我不明白为什么:

System.out.println(response.getStatus());
response.setStatus(500);
System.out.println(response.getStatus());
Run Code Online (Sandbox Code Playgroud)

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

Tej*_*eni 4

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

<error-page>
        <error-code>
            500
        </error-code>
        <location>
            /500.jsp
        </location>
    </error-page>
Run Code Online (Sandbox Code Playgroud)

在你的 中500.jsp,将指令设置为<%@ page isErrorPage="true" %>