title: export data to csv and download the file with Java and Struts2
body: <p>I'm trying to export data to a csv file from a mysql database and I don't get it. I have the next thing.</p>
  
  <p>In the jsp I have this:</p>
  
  <pre><code>&lt;s:url id="fileDownload" namespace="/" action="download" &gt;&lt;/s:url&gt;
  &lt;a href="%{fileDownload}"&gt;&lt;s:submit value="Exportar CSV" id="btn_exportar_csv" name="btn_exportar_csv" cssClass="botones" width="50px"&gt;&lt;/s:submit&gt;&lt;/a&gt;
  </code></pre>
  
  <p>In the struts file I have this:</p>
  
  <pre><code>&lt;action name="download" class="es.uniway.action.pedidos.ExportarFicherosAction"&gt;
  &lt;result name="success" type="stream"&gt;
    &lt;param name="contentType"&gt;application/octet-stream&lt;/param&gt;
    &lt;param name="inputName"&gt;fileInputStream&lt;/param&gt;
    &lt;param name="contentDisposition"&gt;attachment;filename="fileABC.txt"&lt;/param&gt;
    &lt;param name="bufferSize"&gt;1024&lt;/param&gt;
  &lt;/result&gt;
  </code></pre>
  
  <p></p>
  
  <p>And in the Action I have this:</p>
  
  <pre><code>package es.uniway.action.pedidos;
  
  import java.io.ByteArrayInputStream;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.io.InputStream;
  import java.text.DateFormat;
  import java.text.SimpleDateFormat;
  import java.util.Calendar;
  import java.util.Date;
  import java.util.List;
  import java.util.Map;
  
  import javax.servlet.ServletOutputStream;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.apache.axis.MessageContext;
  import org.apache.struts2.interceptor.ServletRequestAware;
  
  import Services.Web.CCIS.BasicHttpBinding_PublicApiServiceStub;
  import Services.Web.CCIS.PublicApiService_PortType;
  
  import com.opensymphony.xwork2.ActionContext;
  import com.opensymphony.xwork2.ActionSupport;
  
  import es.uniway.bean.TPedidosClientes;
  import es.uniway.bean.TRespuestaPedidosClientes;
  import es.uniway.bean.Tdatoscuentas;
  import es.uniway.wscloud.WscloudImplServiceLocator;
  import es.uniway.wscloud.WscloudImplSoapBindingStub;
  
  public class ExportarFicherosAction extends ActionSupport implements ServletRequestAware{
  
  
  Map session;
  Tdatoscuentas [] datoscuentas;
  private HttpServletRequest servletRequest;
  private HttpServletResponse response;
  TRespuestaPedidosClientes pedidosClientes;
  TPedidosClientes [] pedClientes;
  private List&lt;Date&gt; FechaAprobacion;
  public boolean submit=false;
  Date dateC=null;
  Date dateI=new Date();
  Date dateF=new Date();
  Date date1=new Date();
  Date date2= new Date();
  Date []fechas= null;
  Date []fechasI = null;
  Date []fechasF = null;
  private String cuentasID;
  public String nuevaBusqueda;
  
  @Override
  public void setServletRequest(HttpServletRequest request) {
      // TODO Auto-generated method stub
  
  }
  
  @Override
  public String execute() throws Exception {
      // TODO Auto-generated method stub
  
      response.setContentType("application/octet-stream");
      response.setHeader("Content-Disposition","attachment;filename=temp.csv");
  
  
      ServletOutputStream out = response.getOutputStream();
  
  
  
      java.net.URL portAddressCloud = new java.net.URL("http://localhost:8080/webServiceCloud2/services/WscloudImpl");
  
      WscloudImplServiceLocator wscloudServiceLocator = new WscloudImplServiceLocator();
        //WscloudImpl wscloud = wscloudServiceLocator.getWscloudImpl(portAddress);
  
        WscloudImplSoapBindingStub bsStubcloud=null;
        bsStubcloud=(WscloudImplSoapBindingStub) wscloudServiceLocator.getWscloudImpl(portAddressCloud);
  
      session = ActionContext.getContext().getSession();
      PublicApiService_PortType puerto=(PublicApiService_PortType) session.get("puerto");
      ((BasicHttpBinding_PublicApiServiceStub)puerto).setMaintainSession(true);
       MessageContext ctx=(MessageContext) session.get("contexto");
       session.put("date1", date1);
       session.put("date2", date2);
       String usuario=(String) session.get("usuario");
       System.out.println("Usuario es:"+usuario);
       String id_tipo_cuenta = (String) session.get("id_tipo_cuenta");
       String n_cuenta = (String) session.get("n_cuenta");
       System.out.println("El id_tipo_cuenta es:"+id_tipo_cuenta+" y el número de cuenta es:"+n_cuenta);
       Tdatoscuentas[] params=bsStubcloud.consultarCuentas(Integer.parseInt(id_tipo_cuenta),n_cuenta);
       System.out.println("Params es"+params.length);
       System.out.println("el id de params es:"+params[0].getId_cuenta());
       System.out.println("EL id de params de cuenta padre es:"+params[0].getId_cuenta_padre());
       session.put("params", params);
       int cliente=Integer.valueOf(servletRequest.getParameter("cuentasID").toString());
  
       if(cliente!=-1){
  
              String esquema=(String) session.get("Id_esquema_asociado_session");
              String proveedor=(String) session.get("Id_proveedor_cloud_session");
  
              System.out.println("El esquema es:"+esquema);
              System.out.println("El proveedor es:"+proveedor);
              System.out.println("La fecha es:"+servletRequest.getParameter("date1"));
              System.out.println("Esto es:"+servletRequest.getParameter("edt_pedido"));
              int nivel=Integer.valueOf(id_tipo_cuenta);
              int cuenta=Integer.valueOf(servletRequest.getParameter("cuentasID"));
              DateFormat formatter ; 
                Date date ; 
                 formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
                 date = (Date)formatter.parse(servletRequest.getParameter("date1")); 
                Calendar cal=Calendar.getInstance();
                cal.setTime(date);
                System.out.println("Today is " +date );
                System.out.println("Today dos:"+cal.getTime());
                Date f_inicioAux=cal.getTime();
                Date date2 = (Date)formatter.parse(servletRequest.getParameter("date2")); 
                Calendar calF=Calendar.getInstance();
                cal.setTime(date2);
                System.out.println("Today is " +date.toString());
  
  
  
  
               pedidosClientes=bsStubcloud.consultarPedidosClientes(params[0].getId_cuenta_padre(), nivel, cuenta, cal, calF, 0, servletRequest.getParameter("edt_pedido").toString(),date.toString(),date2.toString());
               pedClientes=pedidosClientes.getDatosPedidosClientes();
  
               fechas= new Date[pedidosClientes.getDatosPedidosClientes().length];
               fechasI = new Date[pedidosClientes.getDatosPedidosClientes().length];
               fechasF = new Date[pedidosClientes.getDatosPedidosClientes().length];
               for(int i=0;i&lt;pedidosClientes.getDatosPedidosClientes().length;i++){
                      System.out.println("iiiiiiiii"+pedidosClientes.getDatosPedidosClientes().length);
                      dateC=pedidosClientes.getDatosPedidosClientes()[i].getF_creacion().getTime();
                      dateI=pedidosClientes.getDatosPedidosClientes()[i].getF_inicio_contrato().getTime();
                      dateF=pedidosClientes.getDatosPedidosClientes()[i].getF_fin_contrato().getTime();
  
                      fechas[i]=dateC;
                      fechasI[i]=dateI;
                      fechasF[i]=dateF;
                      System.out.println(dateF);
  
                      //FechaAprobacion.add(dateC);
                   }
  
  
               setFechas(fechas);
               setFechasI(fechasI);
               setFechasF(fechasF);
  
               setPedClientes(pedClientes);
  
               System.out.println("Pedidos clientes ha devuelto:"+pedidosClientes.getDatosPedidosClientes().length);
  
               StringBuffer sb = exportar_CSV(pedClientes);
              //session.put("pedidos",pedidosClientes);
  
               InputStream in = 
                          new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
  
              byte[] outputByte = new byte[4096];
              //copy binary contect to output stream
              while(in.read(outputByte, 0, 4096) != -1)
              {
                  out.write(outputByte, 0, 4096);
              }
              in.close();
              out.flush();
              out.close();
  
            }
  
            return "SUCCESS";
       }
  
  
  
       public HttpServletRequest getServletRequest() {
              return servletRequest;
          }
  
          public Tdatoscuentas[] getDatoscuentas() {
              return datoscuentas;
          }
  
          public void setDatoscuentas(Tdatoscuentas[] datoscuentas) {
              this.datoscuentas = datoscuentas;
          }
  
          public boolean isSubmit() {
              return submit;
          }
  
          public void setSubmit(boolean submit) {
              this.submit = submit;
          }
  
          public TRespuestaPedidosClientes getPedidosClientes() {
              return pedidosClientes;
          }
  
          public void setPedidosClientes(TRespuestaPedidosClientes pedidosClientes) {
              this.pedidosClientes = pedidosClientes;
          }
  
          public TPedidosClientes[] getPedClientes() {
              return pedClientes;
          }
  
          public void setPedClientes(TPedidosClientes[] pedClientes) {
              this.pedClientes = pedClientes;
          }
  
  
  
          public Date[] getFechas() {
              return fechas;
          }
  
          public void setFechas(Date[] fechas) {
              this.fechas = fechas;
          }
  
          public Date[] getFechasI() {
              return fechasI;
          }
  
          public void setFechasI(Date[] fechasI) {
              this.fechasI = fechasI;
          }
  
          public Date[] getFechasF() {
              return fechasF;
          }
  
          public void setFechasF(Date[] fechasF) {
              this.fechasF = fechasF;
          }
  
          public String getCuentasID() {
              return cuentasID;
          }
  
          public void setCuentasID(String cuentasID) {
              this.cuentasID = cuentasID;
          }
  
          public HttpServletResponse getResponse() {
              return response;
          }
  
          public void setResponse(HttpServletResponse response) {
              this.response = response;
          }
  
          public Date getDateI() {
              return new Date();
          }
  
          public void setDateI(Date dateI) {
              this.dateI = dateI;
          }
  
          public Date getDateF() {
              return new Date();
          }
  
          public void setDateF(Date dateF) {
              this.dateF = dateF;
          }
  
          public Date getDate1() {
              return date1;
          }
  
          public void setDate1(Date date1) {
              this.date1 = date1;
          }
  
          public Date getDate2() {
              return date2;
          }
  
          public void setDate2(Date date2) {
              this.date2 = date2;
          }
  
          public String getNuevaBusqueda() {
              return nuevaBusqueda;
          }
  
          public void setNuevaBusqueda(String nuevaBusqueda) {
              this.nuevaBusqueda = nuevaBusqueda;
          }
  
  
  
          private static StringBuffer exportar_CSV(TPedidosClientes[] pedClientes2) throws IOException {
              // TODO Auto-generated method stub
  
  
  
              StringBuffer writer = new StringBuffer();
                  writer.append("NºPedido");
                  writer.append(',');
                  writer.append("Estado");
                  writer.append(',');
                  writer.append("Fecha_Pedido");
                  writer.append(',');
                  writer.append("Fecha_Inicio");
                  writer.append(',');
                  writer.append("Fecha_Final");
                  writer.append(',');
                  writer.append("PVP");
                  writer.append(',');
                  writer.append("Coste");
                  writer.append('\n');
  
                 for(int i=0;i&lt;pedClientes2.length;i++){
                     writer.append(pedClientes2[i].getN_pedido());
                     writer.append(',');
                     writer.append(pedClientes2[i].getEstado_pedido());
                     writer.append(',');
                     writer.append(pedClientes2[i].getF_creacion().getTime().toString());
                     writer.append(',');
                     writer.append(pedClientes2[i].getF_inicio_contrato().getTime().toString());
                     writer.append(',');
                     writer.append(pedClientes2[i].getF_fin_contrato().getTime().toString());
                     writer.append(',');
                     writer.append(pedClientes2[i].getPvp().toString());
                     writer.append(',');
                     writer.append(pedClientes2[i].getP_coste().toString());
  
  
  
                     writer.append('\n');
                 } 
  
  
                 return writer;
  
          }
  
  }
  </code></pre>
  
  <p>what I am doing bad?. Thanks so much</p>