zoukankan      html  css  js  c++  java
  • 关于 Cannot forward after response has been committed的错误

    这个错误顾名思义:就是在给客户端做出提交响应完毕后,就不能再次使用request的转发。

    代码原先是这样的:

     1 package com.bdqn.jsp.study.web.filter;
     2 
     3 import javax.servlet.*;
     4 import javax.servlet.annotation.WebFilter;
     5 import javax.servlet.http.HttpServletRequest;
     6 import javax.servlet.http.HttpServletResponse;
     7 import java.io.IOException;
     8 
     9 @WebFilter(filterName = "checkLoginFilter", urlPatterns = "/*")
    10 public class CheckLoginFilter implements Filter {
    11     @Override
    12     public void init(FilterConfig filterConfig) throws ServletException {
    13 
    14     }
    15 
    16     @Override
    17     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    18         HttpServletRequest request = (HttpServletRequest) servletRequest;
    19         HttpServletResponse response = (HttpServletResponse) servletResponse;
    20         if (request.getRequestURI().contains("/user")) {
    21             Object value = request.getSession().getAttribute("user");
    22             if (value == null) {
    23                 response.sendRedirect(request.getContextPath() + "/login.jsp");
    24                 //return;
    25             }
    26         }
    27         filterChain.doFilter(request, response);
    28     }
    29 
    30     @Override
    31     public void destroy() {
    32 
    33     }
    34 }

    注意这里是个filter主要作用:用于判断用户是否登录后才能访问相关页面,地址栏里有“/user”的地址信息,就认为改地址是登录后才能进行访问

    然而在某一个servlet里有如下相关代码:

      if (returnValue != null) {
          request.getRequestDispatcher("/" + returnValue.toString()).forward(request, response);
      }

    如果这么写就出问题了,因为在filter里response做出重定向后,还要执行doFilter方法,因此当执行servlet中的转发操作时就会报错了,因为在response.sendRedirect()会认为已经给response的commited属性设置成true了,因此不能再进行转发

  • 相关阅读:
    tf导出pb文件,以及如何使用pb文件
    word2vec入门理解的博客整理
    简单的RNN和BP多层网络之间的区别
    图像中用到的信息论中的一些概念公式
    raw文件转mha文件
    mha格式的CT体数据转为jpg切片
    在MySQL的表中增加一列
    ES7学习笔记(二)ES的集群原理
    MySQL中的幻读,你真的理解吗?
    ES7学习笔记(一)Elasticsearch的安装与启动
  • 原文地址:https://www.cnblogs.com/niechen/p/7488128.html
Copyright © 2011-2022 走看看