如何停止 JSP 的执行?
我有 JSP,它通过“转发”将用户踢出页面。
public boolean kickIfNotLoggedIn(
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
//code to check if user is logged in
req.getRequestDispatcher(
ACCESS_DENIED_PAGE).forward(request, response);
}
在我的 JSP 中,在任何 HTML 输出之前我有以下代码:
<%
//loginHelper.kickIfNotLoggedIn(request, response);
if (!loginHelper.kickIfNotLoggedIn(request, response)) {
return;
}
%>
如果我不使用 return 语句,JSP 将继续处理,并且我会收到 NullPointerException。如果我使用 return 语句(正如网上各种来源通常建议的那样),我会得到一个 IllegalStateException:
StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: PWC3991: getOutputStream() has already been called for this response
at org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:717)
at org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:226)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:187)
有什么想法可以解决这个问题,或者有其他方法来实现访问被拒绝的页面吗?
谢谢
最佳答案
你不能这样做。该错误消息有点不清楚,但它与开始在一个资源中渲染响应、停止、然后转发到另一个资源(尝试重新启动 HTTP 响应的处理)有关。
在所有需要登录的 JSP 前面使用 servlet Filter
来代替,在任何 JSP 接触响应之前进行重定向。
关于Java:JSP 在页面的其余部分停止执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2956844/