使用JFreeChart向页面输出图时,response.getOutputStream()报错

使用JFreeChart向页面输出图时,response.getOutputStream()报错

一.错误:

使用JFreeChart向页面输出图时,使用response.getOutputStream()会有这样的异常错误提示信息:java.lang.IllegalStateException: getOutputStream() has already been called for this response;

struts Action中的代码如下:

Code:
  1. package com.fck.struts.action;   
  2.   
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.io.OutputStream;   
  6.   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9. import org.apache.struts.action.ActionForm;   
  10. import org.apache.struts.action.ActionForward;   
  11. import org.apache.struts.action.ActionMapping;   
  12. import org.apache.struts.actions.DispatchAction;   
  13. import org.jfree.chart.ChartUtilities;   
  14. import org.jfree.chart.JFreeChart;   
  15.   
  16. import service.GradeService;   
  17.   
  18. import com.fck.struts.form.ChartForm;   
  19.   
  20. public class ChartAction extends DispatchAction {   
  21.     //注入   
  22.     GradeService chartService;   
  23.        
  24.     public void setChartService(GradeService chartService) {   
  25.         this.chartService = chartService;   
  26.     }   
  27.        
  28.     public ActionForward showChart(ActionMapping mapping, ActionForm form,   
  29.             HttpServletRequest request, HttpServletResponse response) {   
  30.         ChartForm chartForm = (ChartForm) form;   
  31.            
  32.         JFreeChart chart = chartService.getChart();   
  33.         try {   
  34.             ChartUtilities.writeChartAsJPEG(response.getOutputStream(), chart, 600400);   
  35.                
  36.         } catch (IOException e) {   
  37.             e.printStackTrace();   
  38.         }   
  39.            
  40.         return  mapping.findForward("succ");   
  41.     }   
  42. }  

二.原因:

代码中的第34行,调用了response.getOutputStream(),与JSP页面的out对象(注:out对象为response.getWriter类在JSP中的内置对象)产生了冲突。

为什么会产生冲突图呢?这个是因为Servlet规范说明,不能既调用response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出IllegalStateException。

三.解决办法

在目标页面加上2行代码,就OK了。

只需要在jsp页面的最后加上两条语句: out.clear();out=pageContext.pushBody();即可(其中out,pageContext均为jsp内置对象!)

Code:
  1. <body>  
  2.  <%    
  3.  out.clear();   
  4.  out=pageContext.pushBody();   
  5.  %>  
  6.  </body>  

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值