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 可以呈现您发送的内容以及正确的状态代码。不决定发送哪个状态码。
有没有办法从 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 可以呈现您发送的内容以及正确的状态代码。不决定发送哪个状态码。