当前位置: 代码迷 >> J2EE >> getOutputStream() has already been called for this response解决方案
  详细解决方案

getOutputStream() has already been called for this response解决方案

热度:349   发布时间:2016-04-22 02:47:26.0
getOutputStream() has already been called for this response
我做一个Struts的Demo , 首页面需要输入宠物ID , 密码 和 验证码 , 全部验证通过后 , 显示宠物的详细信息页面 . 这个功能我是完成了的 ,但是在完成后看到 Myeclipse的 console 中有一个错误信息 是这样的
Java code
严重: Servlet.service() for servlet jsp threw exceptionjava.lang.IllegalStateException: getOutputStream() has already been called for this response    at org.apache.catalina.connector.Response.getWriter(Response.java:610)    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:186)    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)    at org.apache.jsp.vcode_jsp._jspService(vcode_jsp.java:149)

错误信息中的最后一行指向的我的一个生成验证码的jsp 文件 , 出现上面错误最有可能是在Action 中 ,下面列出action代码
Java code
public ActionForward doLogin(ActionMapping mapping, ActionForm form,            HttpServletRequest request, HttpServletResponse response) {        // TODO Auto-generated method stub        HttpSession session = request.getSession(true);                DynaActionForm dynaAction = (DynaActionForm)form ;        int petId = ((Integer)dynaAction.get("petId")).intValue();        String password = dynaAction.getString("petPassword");        String vCode2 = dynaAction.getString("valiCode");        String vCode1 = (String)session.getAttribute("vcode");        PetInfo pet = biz.login(petId, password);                if(pet != null && vCode1.equals(vCode1)){            session.setAttribute("current_pet", pet);            try {                response.sendRedirect("ShowBaby.do?id="+petId);            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            return null ;        }        ActionMessages errors = new ActionMessages();        if(!vCode1.equals(vCode2)){            errors.add("login_valiCode", new ActionMessage("errors.login.valiCode"));            super.addErrors(request, errors);            return mapping.findForward("fail");        }                errors.add("login_fail", new ActionMessage("errors.login.fail"));        super.saveErrors(request, errors);        return mapping.findForward("fail");


------解决方案--------------------
跟你验证码页面有关系

 这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和response.getOutputStream()相冲突的!所以会出现以上这个异常。

解决的办法:
在使用完输出流以后调用以下两行代码即可:
out.clear();
out = pageContext.pushBody();
------解决方案--------------------
http://www.blogjava.net/pengpenglin/archive/2008/08/19/176532.html
  相关解决方案