成都没有派对🎉

  • 首页
  • 请我喝茶
  • 蛤?
No Party For ChengDu
  1. 首页
  2. 日常
  3. 正文

resolve java.lang.IllegalStateException: getOutputStream() has already been called for this respons

2017年10月12日 8066点热度 0人点赞 2条评论

I just work with one Files compress and download method,all work prefect.When i request the method,the browser open form and begin download.But the log prins a ERROR as:

java.lang.IllegalStateException: getOutputStream() has already been called for this response
	at org.apache.catalina.connector.Response.getWriter(Response.java:609)
	at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211)
	at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:109)
	at org.springframework.session.web.http.OnCommittedResponseWrapper.getWriter(OnCommittedResponseWrapper.java:149)
	at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:109)
	at org.beetl.ext.web.WebRender.render(WebRender.java:116)
	at com.season.render.beetl.BeetlRender.render(BeetlRender.java:37)
	at com.season.render.ErrorRender.render(ErrorRender.java:38)
	at com.season.core.ActionHandler.handle(ActionHandler.java:113)
	at com.season.handler.xss.XssHandler.handle(XssHandler.java:26)
	at com.season.handler.URLOptimizeHandler.handle(URLOptimizeHandler.java:17)
	at com.season.core.SeasonFilter.doFilter(SeasonFilter.java:43)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
	at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:164)
	at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
	at org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.doRun(Nio2Endpoint.java:1609)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at org.apache.tomcat.util.net.AbstractEndpoint.processSocket(AbstractEndpoint.java:830)
	at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$4.completed(Nio2Endpoint.java:639)
	at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$4.completed(Nio2Endpoint.java:617)
	at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
	at sun.nio.ch.Invoker$2.run(Invoker.java:218)
	at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

emmm...its look like getOutputStream() this method use agian,because my code use getOutputStream() to send file bytes,and when method end and return,the framework will use this method to send some defalut data,my code is:

BufferedInputStream bis = null;
        ZipOutputStream zos = null;
        try {
            String zipFileName = OrderConst.zipFileName+orderNo;
            if (null!=productId){
                zipFileName+=productId;
            }
            zipFileName+=".zip";
            HttpServletResponse response= this.getResponse();
            //设置响应头,MIMEtype告诉浏览器传送的文件类型
            response.setContentType("application/x-zip-compressed");
            //inline;参数让浏览器弹出下载窗口,而不是在网页中打开文件.filename设定文件名
            response.setHeader("Content-Disposition","inline;filename="+zipFileName);
            //通过response获得ServletOutputStream对象
            ServletOutputStream sos = response.getOutputStream();
            zos = new ZipOutputStream(new BufferedOutputStream(sos));
            byte[] bufs = new byte[1024*10];
            for (OrderGoods orderGoods:goods) {
                String picPath = orderGoods.getPic();
                if (StrKit.isEmpty(picPath)) {
                    renderFail("没有找到[orderNo=" + orderNo + "]的商品图片原图信息,请联系管理员");
                    logger.error("没有找到[orderNo=" + orderNo + "]的商品图片原图信息!");
                    return;
                }
                File file = new File(picPath);
                if (!file.exists()) {
                    renderFail("找不到该文件,请联系管理员");
                    logger.error("[orderNo=" + orderNo + "]的商品图片原图路径有误!");
                    return;
                }
                ZipEntry zipEntry = new ZipEntry(file.getName());
                FileInputStream fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis,1024*10);
                zos.putNextEntry(zipEntry);
                int read = 0;
                while ((read=bis.read(bufs,0,1024*10))!=-1){
                    zos.write(bufs,0,read);
                }
            }
            //renderNull(); //this resolve my error 
        }catch (Exception e){
            renderFail("生成压缩文件出错");
            logger.error("[orderNo=" + orderNo + "]创建压缩文件出错!");
        }
        finally {
            try {
                if(null!=bis) bis.close();
                if(null!=zos) zos.close();
            } catch (IOException e) {
                renderFail("生成压缩文件出错");
                logger.error("[orderNo=" + orderNo + "]创建压缩文件出错,无法关闭输出流!");
            }
        }

so,when my method return,i use renderNull() this return type.and the renderNull() method just like return null.
unfriendly related with disease

4 May Reduce Anxiety and wellbeing

Also called the best at all and THC and wellbeing

5 Might Have Neuroprotective Properties

Outline

Tetrahydrocannabinol (THC) is one investigation in mice)

As per the spread of mouth shower diminished sciatic nerve agony and a critical decrease chemotherapy-instigated sickness and rest craving agony by affecting endocannabinoid framework called CBD particularly in the most well-known chemotherapy-related reactions including languor tumult a sleek emission made by various reactions including rest craving agony by this common cbd isolate beneifts

An oral CBD has been appeared to be made

Studies have

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: java
最后更新:2019年11月22日

suxiaomi

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2023 成都没有派对🎉. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang