我只要在struts里面的action写上这样一段代码就会跑异常,代码如下:
      PrintWriter out = response.getWriter();
      PrintWriter w = new PrintWriter(out);//输出MAP信息 
      w.flush();
异常如下:
严重: Servlet.service() for servlet action threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed有谁帮忙解释一下为什么会产生这个异常?

解决方案 »

  1.   

    我估计你的一个方法action里用到了多个forward(“xxx”)的跳转方法吧.
    解决方法:
    在每个forward 方法后加一个return null 试试。
    servlet出现这个异常就是这样解决的,struts我还没遇到过这个问题,
    你试试吧。
      

  2.   

    Action 的方法不能有返回值,将 return mapping.findForward('.......') 改为 return null
      

  3.   

    写法有问题,我想问个问题,action 是用来控制跳转的,你为什么要当它是个servlet的输出呢?
      

  4.   

    如果你是单纯的为了在控制台看结果的话,你可以System.out.println()输出。
      

  5.   

    这个是我做测试用的。代码如下package com.hit.struts.action;import java.io.PrintWriter;
    import java.util.List;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.DynaActionForm;import com.hit.persistence.*;public final class ViewSortAction extends Action{  
    public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,  
    HttpServletResponse response) throws Exception {

    PrintWriter out = response.getWriter();
    PrintWriter w = new PrintWriter(out);//输出MAP信息 
    w.flush();

        DynaActionForm searchForm = (DynaActionForm) form;         
    String keyword = (String)searchForm.get("keyword");
    Integer pageId = (Integer)searchForm.get("pageId");
        HttpSession session = request.getSession(true);

    List sortList=new DBOperate().getMatchSorts(keyword);

    if (sortList.size()==0){           
    ActionErrors errors = new ActionErrors();
    errors.add(ActionErrors.GLOBAL_MESSAGE,
    new ActionError("errors.noMatch"));
    if (!errors.isEmpty()) {
    saveErrors(request, errors);

       return  mapping.findForward("toWrong");
       return null;
    }
    else{
    ViewList viewList=new ViewList();
    viewList.display (sortList,session,pageId,keyword) ;
    return (mapping.findForward("toListSort"));
    }
      }
    }大家看看是为什么报错,谢谢啦,呵呵
      

  6.   

    因为你已经往Response里输出过信息(虽然只是w.flush();),因此无法再forward
      

  7.   


    其实我就是想知道为什么加上
           PrintWriter out = response.getWriter();
            PrintWriter w = new PrintWriter(out);//输出MAP信息 
            w.flush();会报错
      

  8.   


    具体说说我是怎么向response里面输出的信息,有些不明白
      

  9.   

    HttpServletResponse里面有两个用于输出的一个是ServletOutputStream(字节输出),一个PrintWriter(字符输出),后者基于前者(需要参考response.get/setCharacterEncoding())。PrintWriter.flush的时候,即使没有输出内容,也会被认为往ServletOutputStream中输出过内容了。