Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提交响应后无法调用sendRedirect()_Java_Jsp_Servlets_Servlet Filters - Fatal编程技术网

Java 提交响应后无法调用sendRedirect()

Java 提交响应后无法调用sendRedirect(),java,jsp,servlets,servlet-filters,Java,Jsp,Servlets,Servlet Filters,我有一个过滤器来检查会话是否存在。如果它不存在,我会使用response.sendRedirect(),将用户重定向到登录页面 在某些网页上它是有效的,在其他网页上它是无效的。我收到此错误在提交响应后无法调用sendRedirect() 似乎如果我在jsp页面中删除一些代码部分,如,它就会工作。 但是,正如我所说,在其他jsp页面中,即使我有这样的代码,它也可以工作。 我真的不明白出了什么问题 我在这个论坛上读了一些类似的帖子,但我没有找到解决办法 这是我的过滤器 public class Se

我有一个过滤器来检查会话是否存在。如果它不存在,我会使用
response.sendRedirect()
,将用户重定向到登录页面

在某些网页上它是有效的,在其他网页上它是无效的。我收到此错误
在提交响应后无法调用sendRedirect()

似乎如果我在jsp页面中删除一些代码部分,如
,它就会工作。 但是,正如我所说,在其他jsp页面中,即使我有
这样的代码,它也可以工作。 我真的不明白出了什么问题

我在这个论坛上读了一些类似的帖子,但我没有找到解决办法

这是我的过滤器

public class SessionFilter implements Filter {

    public void destroy() {}

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        try {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
            String url = request.getServletPath();

            HttpSession session = request.getSession(false);

            /*caso in cui il webserver non abbia ancora creato la sessione*/
            if (null == session) {
                reindirizza = true;
            } else {
                /*caso in cui il webserver abbia creato la sessione e l'utente  sia loggato*/
                if(session.getAttribute("loggato")!=null && session.getAttribute("loggato").equals("si")) {
                    reindirizza = false;
                }
                /*caso in cui il webserver abbia creato la sessione e l'utente  non sia loggato*/
                else {
                    reindirizza = true;
                }
            }

            chain.doFilter(req, res);
            if(reindirizza) {
                response.sendRedirect("Gestione.jsp?message=Sessione scaduta o non valida. Effettuare il Login");
            }
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void init(FilterConfig config) throws ServletException { }
}

我还经常遇到相同类型的问题,即在提交响应后无法调用sendRedirect()/forward


这个错误有点误导性,但实际发出的错误是jsp中jstl标记的一些不正确使用。例如,标记没有正确终止。因此,检查您的所有标记是否处于正确的形状

这里,您需要关闭jsp中所有打开的out.println和out.flush语句。这应该可以解决您的问题。

响应之后,我也遇到了同样的问题。sendRedirect(“jsppage”)
您应该像

return;

sendredirect
方法之后添加上述语句,则没有问题。

您应该显示一些相关的代码。.是否尝试调试?我尝试过,但我不知道在哪里设置检查点。如果我删除了一段html代码,比如div,那么在我删除了很多代码之后,它就会工作。但是在我的html代码中没有任何错误。我用w3c验证器检查了它。这似乎是一个“随机错误”,我将部分代码复制到html代码较少的页面中,没有问题。似乎错误与页面中编写的代码量有关。