java.lang.IllegalStateException: Cannot forward after response has been committed

今天在写代码的时候遇见java.lang.IllegalStateException: Cannot forward after response has been committed这种异常,具体的代码实现如下所示:

package cn.zll.bookstore.category.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.zll.bookstore.category.domain.Category;
import cn.zll.bookstore.category.service.Service;
public class CategoryServlet extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        String name=request.getParameter("method");

        if(name.equalsIgnoreCase("findall")){

            findall(request,response);

        }
    if(name.equalsIgnoreCase("findallbook")){

           findallbook(request,response);

    }

}

public void findallbook(HttpServletRequest request,
        HttpServletResponse response)throws IOException,ServletException {

    request.getRequestDispatcher("/jsps/book/list.jsp").forward(request, response);


}
public  void  findall(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
        Service s=new Service();
        List<Category> list= s.finall();
        request.setAttribute("list", list);
        System.out.println(list.size());
        request.getRequestDispatcher("/jsps/left.jsp").forward(request, response);  
    }
}

注意:在这个servlet中前后一共接受两个请求。
首先是接收到findall这个请求,请求成功之后把list,通过转发返回到
left.jsp页面。
然后servlet又接受到findallbook的请求(我这里没有返回的具体内容),然后在转发到list.jsp中。(这两个请求有前后依赖关系,后一个请求依赖前一个请求的response)
然后我运行的时候会报出如下的异常:
java.lang.IllegalStateException: Cannot forward after response has been committed
他也就是说明,在转发之前,我们已经返回response.
**因为我在第一次请求的时候已经返回过response了,所以会报错。
在同一个servlet中我们不能同时成功出现有两次转发(只能同时成功出现一次转发)。**
而且转发并不意味这程序的结束,转发之后还会执行后边的代码,这一点非常的重要,很多种情况在转发之后需要我们return的
我这里的解决方法就是在创建一个servlet,把findallbook这个发送到新创建的的那个servlet中。这样就能避免异常报错。
如果您还有新的方法,可以在评论区进行交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值