Return 包含 JSP 中的 500 错误

Return with a 500 error from inside a JSP include

有没有办法从 jsp:include 页面内部获取其请求页面以响应 HTTP 500 错误?我试过使用 response.sendError(418, "I'm a teapot.");,但这只适用于包含 jsp:include 的 JSP,并且只有当它是第一行时才有效,因为你不能在响应后调用它已承诺。我有的是:

Index.jsp:

// other HTML

<jsp:include page="Exapmle.jsp">
    <jsp:param name="aVariable" value="aValue" />
</jsp:include>

// other HTML

Example.jsp:

<%
    String aVariable = request.getParameter("aVariable");
    if (aVariable != null && !aVariable.trim().isEmpty) {
        // code to generate content
        %><%=someContent%><%
    } else { 
        response.sendError(418, "I'm a teapot");
    }
%>

那么有什么方法可以做到这一点吗?我对 JSP 的工作方式表示怀疑,但希望这里的某个地方可以提供帮助。此外,servlet 不是一个选项(至少现在是这样)。

如果你让它工作,你不应该依赖它始终在所有平台和未来更新上工作。正如您正确陈述的那样:一旦响应已提交(例如,所有 HTTP headers 都在发送给客户端的途中),服务器将无法再添加任何其他 HTTP headers。更不用说更改状态码了。

这就是为什么 JSP 被视为应用程序的 VIEW 层,而不是 CONTROLLER 的原因。所有应用程序逻辑都写在 JSP 中的时代已经过去了,您应该在某个地方进行适当的请求处理(如果只在 servlet 中,但可能更强大的 abstraction/framework)——决定结果并重定向到错误消息或该代码中的正确可视化。

JSP 可以呈现您发送的内容以及正确的状态代码。不决定发送哪个状态码。