Servlet报错“Cannot forward after response has been commited”
  TEZNKK3IfmPf 2023年11月13日 17 0

错误

Servlet报错“Cannot forward after response has been commited”

错误代码

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        // 获取保存在session中登录成功的用户的信息
        Student student = (Student)request.getSession().getAttribute("student");
        // 获取action
        String action = request.getParameter("action");
        if (action!=null&&!action.equals("")){
            if(action.equals("select")){
                String[] selectedIds = request.getParameterValues("selectedId");
                if(selectedIds!=null&&selectedIds.length>0){
                    for (String selectedId : selectedIds) {
                        Course course = new CourseDao().checkCourseById(Integer.parseInt(selectedId));
                        System.out.println(course);
                        StudentCourse studentCourse=new StudentCourse(student.getId(),course.getId(),0f);
                        int i = new StudentCourseDao().insertStudentCourse(studentCourse);
                    }
                    request.getRequestDispatcher("/pageServlet?action=pager&user=student&tab=select_course").forward(request,response);
                }
            }else if(action.equals("unselect")){
                String[] unselectedIds = request.getParameterValues("unselectedId");
                if(unselectedIds!=null&&unselectedIds.length>0){
                    for (String unselectedId : unselectedIds) {
                        Course course = new CourseDao().checkCourseById(Integer.parseInt(unselectedId));
                        System.out.println(course);
                        int i = new StudentCourseDao().deleteById(Integer.parseInt(unselectedId));
                    }
                    request.getRequestDispatcher("/pageServlet?action=pager&user=student&tab=select_course").forward(request,response);
                }
            }
            request.getRequestDispatcher("/pageServlet?action=pager&user=student&tab=select_course").forward(request,response);
        }
    }

原因

以前在使用Servlet的时候,总是在 doGet()或doPost() 中的最后一行才使用请求转发或者重定向。

报异常的原因是重复转发或者重定向了请求。

解决

如果能在if条件中进行跳转就不需要在最后一行使用请求转发或者重定向

或者在if中使用return语句,而最后一个请求转发或重定向不需要使用return语句。

正确代码

解决代码1

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        // 获取保存在session中登录成功的用户的信息
        Student student = (Student)request.getSession().getAttribute("student");
        // 获取action
        String action = request.getParameter("action");
        if (action!=null&&!action.equals("")){
            if(action.equals("select")){
                String[] selectedIds = request.getParameterValues("selectedId");
                if(selectedIds!=null&&selectedIds.length>0){
                    for (String selectedId : selectedIds) {
                        Course course = new CourseDao().checkCourseById(Integer.parseInt(selectedId));
                        System.out.println(course);
                        StudentCourse studentCourse=new StudentCourse(student.getId(),course.getId(),0f);
                        int i = new StudentCourseDao().insertStudentCourse(studentCourse);
                    }
                    request.getRequestDispatcher("/pageServlet?action=pager&user=student&tab=select_course").forward(request,response);
                }
            }else if(action.equals("unselect")){
                String[] unselectedIds = request.getParameterValues("unselectedId");
                if(unselectedIds!=null&&unselectedIds.length>0){
                    for (String unselectedId : unselectedIds) {
                        Course course = new CourseDao().checkCourseById(Integer.parseInt(unselectedId));
                        System.out.println(course);
                        int i = new StudentCourseDao().deleteById(Integer.parseInt(unselectedId));
                    }
                    request.getRequestDispatcher("/pageServlet?action=pager&user=student&tab=select_course").forward(request,response);
                }
            }
        }
    }

删除了最后一行的请求转发

解决代码2

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        // 获取保存在session中登录成功的用户的信息
        Student student = (Student)request.getSession().getAttribute("student");
        // 获取action
        String action = request.getParameter("action");
        if (action!=null&&!action.equals("")){
            if(action.equals("select")){
                String[] selectedIds = request.getParameterValues("selectedId");
                if(selectedIds!=null&&selectedIds.length>0){
                    for (String selectedId : selectedIds) {
                        Course course = new CourseDao().checkCourseById(Integer.parseInt(selectedId));
                        System.out.println(course);
                        StudentCourse studentCourse=new StudentCourse(student.getId(),course.getId(),0f);
                        int i = new StudentCourseDao().insertStudentCourse(studentCourse);
                    }
                    request.getRequestDispatcher("/pageServlet?action=pager&user=student&tab=select_course").forward(request,response);
                    return;
                }
            }else if(action.equals("unselect")){
                String[] unselectedIds = request.getParameterValues("unselectedId");
                if(unselectedIds!=null&&unselectedIds.length>0){
                    for (String unselectedId : unselectedIds) {
                        Course course = new CourseDao().checkCourseById(Integer.parseInt(unselectedId));
                        System.out.println(course);
                        int i = new StudentCourseDao().deleteById(Integer.parseInt(unselectedId));
                    }
                    request.getRequestDispatcher("/pageServlet?action=pager&user=student&tab=select_course").forward(request,response);
                    return;
                }
            }
            request.getRequestDispatcher("/pageServlet?action=pager&user=student&tab=select_course").forward(request,response);
        }
    }

在if条件中添加了return语句

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月15日   48   0   0 servletJSp
  TEZNKK3IfmPf   2023年11月15日   34   0   0 servlet
  TEZNKK3IfmPf   2023年11月14日   31   0   0 servletjavajvm
TEZNKK3IfmPf