Java:JSP 在页面的其余部分停止执行

标签 java jsp servlets redirect

如何停止 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/

相关文章:

html - 在 DispatcherServlet 中找不到资源文件的映射

java - 在 JSTL 中将小数解析为整数

java - servlet java 中的错误

java - 为简单的 Java Web 应用程序使用框架是否有意义?

java - 具有多个 AbstractTestNGSpringContextTests 类的 Spring Boot TestNG

java - HTTP Url 连接是否需要在客户端打开 PORT

javascript - 如何在 JavaScript 代码中从 ModelAndView 访问变量

java - 如何使用robotium调用另一个类中的方法

java - 帮助处理 Java 中的哈希表和二次探测

java - 如何在jsp页面上显示来自mysql数据库的图像?