Java getOutputStream()引发错误

Java getOutputStream()引发错误,java,apache-poi,resultset,Java,Apache Poi,Resultset,我正在尝试将结果集导出到Excel for MT。这是密码 public void createExcel1(){ Statement stmt = null; Connection conn = null; try { conn = (new CreateConnection()).getConnection(); stmt = conn.createSt

我正在尝试将结果集导出到Excel for MT。这是密码

public void createExcel1(){

            Statement stmt = null;
            Connection conn = null;

            try {
                conn = (new CreateConnection()).getConnection();
                stmt = conn.createStatement();

                ResultSet rs = stmt.executeQuery("Select * form customer;");


                FacesContext facesContext = FacesContext.getCurrentInstance();
                ExternalContext externalContext = facesContext
                        .getExternalContext();


                HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
                response.reset();
                response.setContentType("application/vnd.ms-excel");
                response.setHeader("Content-Disposition", "attachment; filename=Customer.xls");
                HSSFWorkbook workbook = new HSSFWorkbook();
                HSSFSheet sheet = workbook.createSheet("Cust");


                HSSFRow rowhead = sheet.createRow((short) 0);
                rowhead.createCell(0).setCellValue("ID");
                rowhead.createCell(1).setCellValue("Name");


                int i = 1;
                while (rs.next()){
                    HSSFRow row = sheet.createRow((short) i);
                    row.createCell(0).setCellValue(rs.getString("ID"));
                    row.createCell(1).setCellValue(rs.getString("Name"));

                    i++;
                }


                workbook.write(response.getOutputStream());

                response.flushBuffer();
                response.getOutputStream().flush();
                response.getOutputStream().close();



                } catch (SQLException e1) {
                    e1.printStackTrace();
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }           

        }
这是堆栈 `

我已经浏览了网上的所有答案,但仍然无法纠正这个错误。我也尝试重定向响应,但这也引发了一些错误。
请帮忙

这个问题的解决办法是我必须补充

facesContext.responseComplete()


响应之后。getOutputStream().flush()并且我必须删除*response.getOutputStream().close()**

胡乱猜测-您在代码中调用了两次
getOutputStream
,一次是在刷新时,另一次是在关闭它。错误似乎是不言自明的:“此响应已经调用了getOutputStream()。这意味着您不允许多次调用
response.getOutputStream()
。事实是您手动关闭了流,但您的JSF仍在尝试使用它。由于您使用JSF呈现页面,请尝试删除“response.getOutputStream().close();”行,然后让JSF为您关闭流。我尝试删除“response.getOutputStream().close();”,但它也会抛出相同的错误。
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/Test1] threw exception [getOutputStream() has already been called for this response] with root cause
java.lang.IllegalStateException: getOutputStream() has already been called for this response
    at org.apache.catalina.connector.Response.getWriter(Response.java:636)
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:213)
    at com.sun.faces.context.ExternalContextImpl.getResponseOutputWriter(ExternalContextImpl.java:834)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.createResponseWriter(FaceletViewHandlingStrategy.java:1177)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:398)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
    at org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.renderView(ResourceViewHandlerWrapper.java:169)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at com.walmart.cdctraffic.utilities.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:30)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:610)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1720)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1679)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)