报错信息如下:
严重: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response  
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.creatway.Cnfilter.EncodingFilter.doFilter(EncodingFilter.java:33)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
JSP页面如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'sendgoods.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  <script type="text/javascript">
   function shuliang(){
  
   var one =document.getElementById("a").value;
   var two = document.getElementById("b").value;
   var san = parseInt(one/two);
   document.getElementById("c").value=san;
   setTimeout("shuliang()",1);
   }
  
   function del(){
   if(!confirm("确认填写信息准确并打印?"))
   {
event.returnValue = false;
   }
}
  
  </script>
  
  <body onload="shuliang()">
   
     <form action="printqrcode.action">
     您的包装数量为<input type="text" id="b" name="sendgoodsnum"/> <input type="submit" value="打印二维码" onclick="del()"/><br/>
      您实际发的货物数量为<input type="text" id="a" /><br/>
    您此次需要打印条码张数为:<input type="text" id="c" onfocus="this.blur()" style="border:0px"/><br/>

     
     </form>
   
  </body>
</html>
Action文件:
package com.creatway.action;import java.io.File;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Random;import com.creatway.creatIcon.ChartGraphics;
import com.creatway.creatQrcode.QRCodeEncoderTest;
import com.creatway.dao.SqlserviceJdbcConnection;
import com.creatway.entity.Goods;
import com.creatway.getdate.Getdate;
import com.creatway.getdate.PrintDate;
import com.lowagie.text.pdf.hyphenation.TernaryTree.Iterator;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class PrintQrcodeAction extends ActionSupport {
private String sendgoodsnum;
private String date=null;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
Map<String, Object> session=ActionContext.getContext().getSession();
/*
 * 
 */
PrintDate getdate=new PrintDate();//获取生成本地时间
Random random=new Random();//产生随机数,用于随即产生二维码图片名称
int i=random.nextInt();
String Filename=null;
/*
 * 二维条码规则:存货编码(8位)+批号(8位,格式为“YYMMDD”+2位预留位置,
 * 其中批号为当天打印日期)+供应商编码(预留10位)+采购订单号+数量(预留6位),
 * 每项内容中间用英文半角点号分隔“.”。
 */
date=getdate.getDate()+"01";
Goods goods=(Goods) session.get("printqrcodegoods"+session.get("num"));
String data=goods.getCinvcode()+"."+date+"."+goods.getCvencode()+"."+goods.getCpoid()+"."+sendgoodsnum;
QRCodeEncoderTest qrt=new QRCodeEncoderTest("D://qrcode"+i+".png", data);
Thread.sleep(1000);//缓冲一下,可以不要!
/*
 * ChartGraphics 主要完成对图片文字的输入以及图片的合成
 */
ChartGraphics cg=new ChartGraphics(goods.getCinvcode(),goods.getCinvstd(),goods.getCvencode(),goods.getCpoid(),sendgoodsnum,date,"D://qrcode"+i+".png");
session.put("file", "D:/union.jpg");
File f1=new File("D:\\qrcode"+i+".png");//删掉生成的二维码图片
f1.delete();
return SUCCESS;
}
public String getSendgoodsnum() {
return sendgoodsnum;
}
public void setSendgoodsnum(String sendgoodsnum) {
this.sendgoodsnum = sendgoodsnum;
}

}
Java异常HTMLString图片

解决方案 »

  1.   

    struts2的配置文件 检查 下 !printqrcode
    web.xml中struts配置的后缀是否是.action
      

  2.   

    是.action啊.我估计是下载时出现的问题
    <%@ page import="java.io.*,java.util.*;"  pageEncoding="UTF-8"%>
    <!-- 实现下载某个目录下文件的功能 -->
    <%
        String downloadFile = (String)session.getAttribute("file");
        BufferedInputStream inputstream = new BufferedInputStream(new
            FileInputStream(downloadFile));
        response.setContentType("application/octet-stream");
        response.addHeader("Content-Disposition","attachment; filename="+downloadFile.substring(downloadFile.length()-8,downloadFile.length()));
        response.setHeader("Accept-ranges", "bytes");
        byte[] b = new byte[100];
        int len;
      OutputStream outp=response.getOutputStream();
    try{
        while ( (len = inputstream.read(b)) > 0) {
        outp.write(b, 0, len);
        }
        inputstream.close();
    outp.close();}
    catch(Exception e){
      e.printStackTrace();
    outp.close();
    }
    %>求人帮我看看到底是啥原因啊
      

  3.   

    找到原因了.
    在使用完输出流以后调用以下两行代码即可:
    out.clear();
    out  =  pageContext.pushBody();