MyEclipse,使用SSH框架,Action功能是从页面读入查询条件,在action中拼hql,将查询结果写入excel弹出下载查询与Excel弹出下载均无问题错误如下:严重: Exception initializing page context
java.lang.IllegalStateException: Cannot create a session after the response has been committed
at org.apache.catalina.connector.Request.doGetSession(Request.java:2301)
at org.apache.catalina.connector.Request.getSession(Request.java:2075)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:833)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:494)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:224)
at org.apache.jasper.runtime.PageContextImpl._initialize(PageContextImpl.java:144)
at org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:122)
at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:107)
at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:63)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:55)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:156)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
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:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)

解决方案 »

  1.   

    Action代码: public String execute() throws Exception{
    OutputStream outputstream=new FileOutputStream("MakeCard");
    String sql=null;
    InAc01 inac01=new InAc01();
    List<Label> titleList = null;
    boolean flag=false;
    // sql="select AAB001, AAC001, AAC202, AAC002, AAC003, AAC004, AAC005 from INTERFACE.IN_AC01 where ";
    sql="from InAc01 as inac01 where inac01.";

    if (firstletter.length()>0 && cardno.length()==0){
    sql=sql+"inac01.aac202 like "+"'"+firstletter+"%"+"'"+" ";
    flag=true;
    }
    if (cardno.length()>0){
    if (flag==true){
    sql=sql+"AND inac01.";
    }
    inac01.setAac202(cardno);
    sql=sql+"aac202="+"'"+cardno+"'"+" ";
    flag=true;
    }
    /* if (area.length()>0){
    if (flag==true){
    sql=sql+"AND ";
    }
    sql=sql+"AAB301="+area+" ";
    flag=true;
    }*/
    if (companyno.length()>0){
    if (flag==true){
    sql=sql+"AND inac01.";
    }
    sql=sql+"aab001="+"'"+companyno+"'"+" ";
    inac01.setAab001(companyno);
    flag=true;
    }
    if (userno.length()>0){
    if (flag==true){
    sql=sql+"AND inac01.";
    }
    sql=sql+"aac001="+"'"+userno+"'"+" ";
    inac01.setAac001(userno);
    flag=true;
    }
    if (userid.length()>0){
    if (flag==true){
    sql=sql+"AND inac01.";
    }
    sql=sql+"aac202="+"'"+userid+"'"+" ";
    inac01.setAac202(userid);
    flag=true;
    }
    if (username.length()>0){
    if (flag==true){
    sql=sql+"AND inac01.";
    }
    sql=sql+"aac003="+"'"+username+"'";
    inac01.setAac003(username);
    flag=true;
    }
    if (sex.length()>0){
    if (flag==true){
    sql=sql+"AND inac01.";
    }
    sql=sql+"aac004="+"'"+sex+"'"+" ";
    inac01.setAac004(sex);
    flag=true;
    }
    if (nation.length()>0){
    if (flag==true){
    sql=sql+"AND inac01.";
    }
    sql=sql+"aac005="+"'"+nation+"'"+" ";
    inac01.setAac005(nation);
    flag=true;
    }
    if (flag==true){
    try{
    outputstream=ServletActionContext.getResponse().getOutputStream();
    ServletActionContext.getResponse().setContentType("application/vnd.ms-excel");
    ServletActionContext.getResponse().setHeader("Location", "MadeCardInfo");
    } catch (IOException ioe){
    ioe.printStackTrace();
    }

    System.out.println(sql);
    // List<InAc01> rs=individualinfo.quertAll();
    List<InAc01> rs=individualinfo.queryIndividualInfo(sql);

    WritableWorkbook wwb = null;
    wwb = Workbook.createWorkbook(outputstream);   
      
                jxl.write.WritableSheet ws = wwb.createSheet("Sheet1", 0); 
                
                try{
                Label title = new Label(0, 0, "单位编号",getNormolCell());
                ws.addCell(title);
                title = new Label(1, 0, "个人编号",getNormolCell());
                ws.addCell(title);
                title = new Label(2, 0, "IC卡号",getNormolCell());
                ws.addCell(title);
                title = new Label(3, 0, "公民身份证号",getNormolCell());
                ws.addCell(title);
                title = new Label(4, 0, "姓名",getNormolCell());
                ws.addCell(title);
                title = new Label(5, 0, "性别",getNormolCell());
                ws.addCell(title);
                title = new Label(6, 0, "民族",getNormolCell());
                ws.addCell(title);
                
                int rssize=rs.size();
                for(int j=0;j<rssize;j++) {                
                    //设置列宽度   
                    for(int i=0;i<10;i++){   
                        ws.setColumnView(i, 20);   
                    }          
                    //填充    
                        String callStr = rs.get(j).getAab001();   
                        Label label = new Label(0, j+1, callStr,getNormolCell());   
                        ws.addCell(label); 
                        callStr = rs.get(j).getAac001();   
                        label = new Label(1, j+1, callStr,getNormolCell());   
                        ws.addCell(label);
                        callStr = rs.get(j).getAac202();   
                        label = new Label(2, j+1, callStr,getNormolCell());   
                        ws.addCell(label);
                        callStr = rs.get(j).getAac002();   
                        label = new Label(3, j+1, callStr,getNormolCell());   
                        ws.addCell(label);
                        callStr = rs.get(j).getAac003();   
                        label = new Label(4, j+1, callStr,getNormolCell());   
                        ws.addCell(label);
                        callStr = rs.get(j).getAac004();   
                        label = new Label(5, j+1, callStr,getNormolCell());   
                        ws.addCell(label);
                        callStr = rs.get(j).getAac005();   
                        label = new Label(6, j+1, callStr,getNormolCell());   
                        ws.addCell(label);           
                }
                } catch (WriteException e){
                 e.printStackTrace();
                }
                
                if (wwb != null) {   
                    try {   
                        wwb.write();
                        wwb.close();
                    } catch (Exception e) {   
                        e.printStackTrace();   
                    }   
                }   
                try{
                 outputstream.flush();
                } catch (IOException ioe){
                 ioe.printStackTrace();
                }
    return "Download";
    }
    else
    return "UncompleteInput";
    }
      

  2.   

    加了之后报:严重: Servlet.service() for servlet jsp threw exception
    java.lang.IllegalStateException: getOutputStream() has already been called for this response
      

  3.   

    wwb = Workbook.createWorkbook(outputstream) 做了什么
      

  4.   

    详细代码  outputstream 最好不要使用两次 我之前也一直报这个错
      

  5.   

    看了 http://stf-wlh.blog.hexun.com/8798148_d.html 后
    将 return "Download"; 改为 return null; 后问题消失but 如果想跳转的话怎么办呢
      

  6.   

    我这边也是。奇怪的是我action里面都没有用到session。如果我想页面跳转怎么办呢?有解决的吗?