可能是重复提交
在某个地方有submit等的信息吗?甚至有时可以用类似out.clear()的语句来关闭某些流

解决方案 »

  1.   

    out.close();你的out关闭了后,看还有没有对out进行操作...
      

  2.   

    下载什么文件??不用加
    response.setContentType("application/octet-stream");//设置文件类型
    吗??文件类型参考
    http://download.csdn.net/download/q6332139/3666496
      

  3.   

    我的理解是,你的response已经返回,你又获取到,导致再相应客户端后操作response出现的不合法的状态异常!
    由于你download.do的代码没有提供所以不好精确判断
      

  4.   

    导致在响应客户端后继续操作response出现的不合法状态异常,上面写错了
      

  5.   

    2012-08-14 14:48:17.708:WARN::Committed before 500 STREAM
    2012-08-14 14:48:17.709:WARN::/software/download.do
    java.lang.IllegalStateException: Committed你的service做完后,action还做了什么吗??
      

  6.   

    action层的代码就这么点
    public String softwareDownload() {
    this.service.softwareDownload(software);
    return ActionRSEnum.SUCCESS.getRS();
    }service层的代码如下:
    @Override
    public void softwareDownload(Software software) {
    HttpServletResponse response = ServletActionContext.getResponse();
    try {
    SoftwareBean softwareBean = new SoftwareBean();
    SoftwareBaseBean softwareBaseBean = new SoftwareBaseBean();
    softwareBean.setSoftwareid(software.getSoftwareid().toString());
    softwareBaseBean = softwareInfo(softwareBean);
    String downloadPath = softwareBaseBean.getDownloadPath ;
    String fileName = softwareBaseBean.getFileName ;
    File file = new File(downloadPath);
    FileInputStream in = new FileInputStream(file);
    response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
    OutputStream out = response.getOutputStream();
    int len = 0;
    byte buffer[] = new byte[1024];
    while ((len = in.read(buffer)) > 0) {
    out.write(buffer, 0, len);
    }
    out.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }我不用加
    response.setContentType("application/octet-stream");
    也可以下载jar,png等文件类型的文件
    out.close之后我也没做什么操作啊
    我是通过传进去一个id,根据id获取路径信息,利用绝对路径下载的
    可以实现下载功能,但就是抛异常,不解啊
      

  7.   

    jsp页面:
    <a class="buttonnormal" href="javascript:void(0);" onclick="window.location='${pageContext.request.contextPath }/software/download.do?software.softwareid=${softwareid}'">下载</a></td>
    action层:
    public String softwareDownload() {
    this.service.softwareDownload(software);
    return ActionRSEnum.SUCCESS.getRS();
    }
    service层:
    @Override
    public void softwareDownload(Software software) {
    HttpServletResponse response = ServletActionContext.getResponse();
    try {
    SoftwareBean softwareBean = new SoftwareBean();
    SoftwareBaseBean softwareBaseBean = new SoftwareBaseBean();
    softwareBean.setSoftwareid(software.getSoftwareid().toString());
    softwareBaseBean = softwareInfo(softwareBean);
    String downloadPath = EnumSystemFolder.STAFSERVERSERVICEFOLDER.getValue().getPath() + "\\" + softwareBaseBean.getSoftwarename() + "\\" + softwareBaseBean.getSoftwarename() + "." + softwareBaseBean.getSoftwareversion() + "." + softwareBaseBean.getSoftwaretype().toLowerCase();
    String fileName = softwareBaseBean.getSoftwarename() + "." + softwareBaseBean.getSoftwareversion() + "." + softwareBaseBean.getSoftwaretype().toLowerCase();
    File file = new File(downloadPath);
    FileInputStream in = new FileInputStream(file);
    response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
    OutputStream out = response.getOutputStream();
    int len = 0;
    byte buffer[] = new byte[1024];
    while ((len = in.read(buffer)) > 0) {
    out.write(buffer, 0, len);
    }
    out.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    action.xml配置:
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    <package name="software" extends="struts-default" namespace="/software">
    <action name="download" class="webui.action.SoftwareAction" method="softwareDownload">
    <result name="success">
    /Jsp/software/software_list.jsp
    </result>
    <result name="error">/Jsp/error/error.jsp</result>
    </action>
    </package>
    </struts>
    这里不需要用DAO层
    我是通过前台传进去id,根据ID获得绝对路径进行下载功能的,能够实现下载功能,可就是抛出异常:2012-08-14 16:25:33.246:WARN::Committed before 500 STREAM
    2012-08-14 16:25:33.246:WARN::/software/download.do
    java.lang.IllegalStateException: Committed
    at org.mortbay.jetty.Response.resetBuffer(Response.java:1024)
    at org.mortbay.jetty.Response.sendError(Response.java:240)
    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:852)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:534)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:432)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at webui.filter.FilterIsLogin.doFilter(FilterIsLogin.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)


    out.close之后我也没做什么啊我不用加
    response.setContentType("application/octet-stream");//设置文件类型
    也可以下载jar,png等格式的文件类型啊还有,我也并没有用到submit提交表单的,是通过访问连接实现的
    我没找到flb7751415451所说的out.clear()方法啊,这个怎么用的?
      

  8.   

    action层:
    public String softwareDownload() {
    this.service.softwareDownload(software);
    return ActionRSEnum.SUCCESS.getRS();
    }return这里使用null试试