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

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

  1. 头像 nn说道:
    Unknown Unknown Unknown Unknown

    :evil:

  2. 头像 zbzw说道:
    Google Chrome 63 Google Chrome 63 Windows 7 Windows 7

    you English very good

发表评论

邮箱地址不会被公开。 必填项已用*标注