Fazer UPLOAD de arq excel com jsp e receber na classe para enviar ao BD

6 respostas
P

Olá pessoal.
Sou novo em java, e não sei como pegar o arquivo do JSP (fazendo o UPLOAD) e passando pelo servlet, enviar para a classe que recebe e le o arquivo, fazendo insert na base. para vocês testarem, em casa, só tirar os inserts, e tirar o comentário do TESTE do System.out.println.
o insert ta funcionando, só que não sei como pegar o arquivo e jogar no FILE para ser lido no workbook.

jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>upload</title>
    </head>
    <body>
        <form action="upload" method="post" name="form" enctype="multipart/form-data">
        Upload: <input type="file" name="arquivo" /><br />
        <input type="submit" name="enviar" value="Enviar" />
        </form>
    </body>
</html>
classe java:
import java.io.File;   
import java.sql.Connection;   
import java.sql.PreparedStatement;   
  
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
import jxl.Cell;   
import jxl.Sheet;   
import jxl.Workbook;   
  
import org.apache.catalina.util.RequestUtil;   
import org.apache.commons.fileupload.disk.DiskFileItemFactory;   
import org.apache.commons.fileupload.servlet.ServletFileUpload;   
import org.apache.poi.hssf.record.RecordFactoryInputStream;   
  
public class Upload {   
  
   private static Connection conn;   
   private static int i = 0;   
   private static String colunaA;   
   private static String colunaB;   
   private static String colunaC;   
   private static String colunaD;   
   private static String colunaE;   
   private static String colunaF;   
   private static String colunaG;   
   private static String colunaH;   
   private static String colunaI;   
   private static String colunaJ;   
   private static String colunaK;   
  
   public boolean anexos(HttpServletRequest request,   
         HttpServletResponse response) throws Exception {   
  
      // DÚVIDA AQUI... NÃO SEI FAZER PARA RECEBER O ARQUIVO DO UPLOAD, E CONVERTER PARA "FILE" DA API JEXCEL ABAIXO   
      if (ServletFileUpload.isMultipartContent(request)) {   
  
         ServletFileUpload servletFileUpload = new ServletFileUpload(   
               new DiskFileItemFactory());   
  
         /* AQUI NÃO CONSIGO RECEBER O ARQUIVO E CONVERTER PARA "FILE" PARA PODER FAZER OS INSERTS RECEBENDO NO WORKBOOK*/  
         File file = new File("Lista_TELECOM.xls");      
               
  
         if (AQUI VOU VALIDAR O NOME DO ARQUIVO) {   
  
            Workbook workbook = Workbook.getWorkbook(NÃO SEI COMO LER O ARQUIVO AQUI);   
  
            /* pega a primeira planilha dentro do arquivo XLS */  
            Sheet sheet = workbook.getSheet(0);   
  
            // Pega a quantidade de linhas da planilha   
            int linhas = sheet.getRows();   
  
            /* pega os valores das células como se numa matriz */  
            for (i = 1; i < linhas; i++) {   
               Cell celA = sheet.getCell(0, i);   
               Cell celB = sheet.getCell(1, i);   
               Cell celC = sheet.getCell(2, i);   
               Cell celD = sheet.getCell(3, i);   
               Cell celE = sheet.getCell(4, i);   
               Cell celF = sheet.getCell(5, i);   
               Cell celG = sheet.getCell(6, i);   
               Cell celH = sheet.getCell(7, i);   
               Cell celI = sheet.getCell(8, i);   
               Cell celJ = sheet.getCell(9, i);   
               Cell celK = sheet.getCell(10, i);   
  
               /* pega os conteúdos das células */  
               colunaA = celA.getContents();   
               colunaB = celB.getContents();   
               colunaC = celC.getContents();   
               colunaD = celD.getContents();   
               colunaE = celE.getContents();   
               colunaF = celF.getContents();   
               colunaG = celG.getContents();   
               colunaH = celH.getContents();   
               colunaI = celI.getContents();   
               colunaJ = celJ.getContents();   
               colunaK = celK.getContents();   
  
               /*  
                * // TESTE para Imprimir Valores  
                * System.out.println(colunaA); System.out.println(colunaB);  
                * System.out.println(colunaC); System.out.println(colunaD);  
                * System.out.println(colunaE); System.out.println(colunaF);  
                * System.out.println(colunaG); System.out.println(colunaH);  
                * System.out.println(colunaI); System.out.println(colunaJ);  
                * System.out.println(colunaK);  
                */  
  
               /*  
                * Executa o insert para inserir os dados no banco de testes  
                * Postgres  
                */  
               PreparedStatement ps = conn   
                     .prepareStatement("INSERT INTO Cad_Cards(car,linha,apn_utz,conta,operadora,plano,sts_simcard,data_atv,id,sts_linha,imsi)"  
                           + "VALUES(?,?,?,?,?,?,?,?,?,?,?)");   
               ps.setString(1, colunaA);   
               ps.setString(2, colunaB);   
               ps.setString(3, colunaC);   
               ps.setString(4, colunaD);   
               ps.setString(5, colunaE);   
               ps.setString(6, colunaF);   
               ps.setString(7, colunaG);   
               ps.setString(8, colunaH);   
               ps.setString(9, colunaI);   
               ps.setString(10, colunaJ);   
               ps.setString(11, colunaK);   
  
               ps.executeUpdate();   
               ps.close();   
  
            }   
            workbook.close();   
            conn.close();   
               
  
         } else {   
            System.out.println("Nome de arquivo inválido");   
            return false;   
         }   
      }   
      return true;   
   }   
}

eu não sei fazer com que o arquivo enviado pelo jsp

6 Respostas

FernandoFranzini

Existem umas 100 formas diferentes de fazer isso. Vc ta bem perdido e as codigo que vc postou esta tudo sem sentido…
kkk a unica forma de te ajuda é fazendo por vc…

P

é to bem perdido mesmo…

mas o código em si está pegando um arquivo excel, lendo todas as linhas e colunas e gravando no BD…

e fiz uma verificação de nome de arquivo, que só poderá receber estes dois nomes…

só que eu não sei como receber este arquivo do jsp, para fazer a verificação, por isso deixei assim com o “caminho”

FernandoFranzini

Pacato:
é to bem perdido mesmo…

mas o código em si está pegando um arquivo excel, lendo todas as linhas e colunas e gravando no BD…

e fiz uma verificação de nome de arquivo, que só poderá receber estes dois nomes…

só que eu não sei como receber este arquivo do jsp, para fazer a verificação, por isso deixei assim com o “caminho”


Pois é…mas fazer isso para web é bem diferente…tem mais coisas envolvidas…segue umas dicas

P

Cara, eu já vi estes e outros mil exemplos, rsrs....

Só que todos fazem gravar em algum diretório... e o que eu queria era já receber este arquivo e jogar na classe...
fiz no servlet assim:

package br.com.simcard.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.simcard.Upload;
 
 
/**
 * Servlet implementation class ServletUpload
 */
public class Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
    /** 
     * @see HttpServlet#HttpServlet()
     */
    public Servlet() {
        super();
    }
 
    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
	PrintWriter out = response.getWriter();
 
	try {
		if (new Upload().anexos(request, response)) {
			out.print("Arquivo enviado!");
		} else {
			out.print("Arquivo não enviado!");
		}
	} catch (Exception e) {
		e.printStackTrace();
	}	
    }
}

e no web xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SIMCards</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>
  
  <servlet>
	<servlet-name>Servlet</servlet-name>
	<servlet-class>/Servlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>Servlet</servlet-name>
	<url-pattern>/Servlet</url-pattern>
  </servlet-mapping>

</web-app>

só que onde está o servlet chamando essa classe Upload, não sei como tirar o void main da minha classe, e deixar ele chamando a classe sem void main.. se é que isso é possível... como sidde quero algo interno, que faz as coisas tudo interno...

P

Bom... consegui fazer se comunicarem, rsrs...

Mas ainda não sei como "pegar" o arquivo do upload, e fazer ele ser inserido pela API JEXCEL

JSP:
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>upload</title>
    </head>
    <body>
        <form method="post" name="form" enctype="multipart/form-data" >
        Upload: <input type="file" name="arquivo"/><br />
        <input type="submit" name="enviar" value="Enviar" />
        
        </form>
    </body>
</html>
Servlet:
package servlet.br.com.simcard;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.simcard.Upload;
 

/**
 * Servlet implementation class ServletUpload
 */
@WebServlet("/ServletUpload")
public class ServletUpload extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletUpload() {
        super();
    }
 
    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	
	}
    
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
	PrintWriter out = response.getWriter();
 
	try {
		if (new Upload().anexos(request, response)) {
			out.print("Arquivo enviado!");
		} else {
			out.print("Arquivo não enviado!");
		}
	} catch (Exception e) {
		e.printStackTrace();
	}	
    }
}
web xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SIMCards</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>ServletUpload</servlet-name>
    <servlet-class>/ServletUpload</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletUpload</servlet-name>
    <url-pattern>/ServletUpload</url-pattern>
  </servlet-mapping>
</web-app>
e a Classe:
import java.io.File;     
import java.sql.Connection;     
import java.sql.PreparedStatement;     
     
import javax.servlet.http.HttpServletRequest;     
import javax.servlet.http.HttpServletResponse;     
     
import jxl.Cell;     
import jxl.Sheet;     
import jxl.Workbook;     
     
import org.apache.catalina.util.RequestUtil;     
import org.apache.commons.fileupload.disk.DiskFileItemFactory;     
import org.apache.commons.fileupload.servlet.ServletFileUpload;     
import org.apache.poi.hssf.record.RecordFactoryInputStream;     
     
public class Upload {     
     
   private static Connection conn;     
   private static int i = 0;     
   private static String colunaA;     
   private static String colunaB;     
   private static String colunaC;     
   private static String colunaD;     
   private static String colunaE;     
   private static String colunaF;     
   private static String colunaG;     
   private static String colunaH;     
   private static String colunaI;     
   private static String colunaJ;     
   private static String colunaK;     
     
   public boolean anexos(HttpServletRequest request,     
         HttpServletResponse response) throws Exception {     
     
      // DÚVIDA AQUI... NÃO SEI FAZER PARA RECEBER O ARQUIVO DO UPLOAD, E CONVERTER PARA "FILE" DA API JEXCEL ABAIXO     
      if (ServletFileUpload.isMultipartContent(request)) {     
     
         ServletFileUpload servletFileUpload = new ServletFileUpload(     
               new DiskFileItemFactory());     
     
         /* AQUI NÃO CONSIGO RECEBER O ARQUIVO E CONVERTER PARA "FILE" PARA PODER FAZER OS INSERTS RECEBENDO NO WORKBOOK*/     
         File file = new File("Lista_TELECOM.xls");         
                 
     
         if (AQUI VOU VALIDAR O NOME DO ARQUIVO) {     
     
            Workbook workbook = Workbook.getWorkbook(NÃO SEI COMO LER O ARQUIVO AQUI);     
     
            /* pega a primeira planilha dentro do arquivo XLS */     
            Sheet sheet = workbook.getSheet(0);     
     
            // Pega a quantidade de linhas da planilha     
            int linhas = sheet.getRows();     
     
            /* pega os valores das células como se numa matriz */     
            for (i = 1; i < linhas; i++) {     
               Cell celA = sheet.getCell(0, i);     
               Cell celB = sheet.getCell(1, i);     
               Cell celC = sheet.getCell(2, i);     
               Cell celD = sheet.getCell(3, i);     
               Cell celE = sheet.getCell(4, i);     
               Cell celF = sheet.getCell(5, i);     
               Cell celG = sheet.getCell(6, i);     
               Cell celH = sheet.getCell(7, i);     
               Cell celI = sheet.getCell(8, i);     
               Cell celJ = sheet.getCell(9, i);     
               Cell celK = sheet.getCell(10, i);     
     
               /* pega os conteúdos das células */     
               colunaA = celA.getContents();     
               colunaB = celB.getContents();     
               colunaC = celC.getContents();     
               colunaD = celD.getContents();     
               colunaE = celE.getContents();     
               colunaF = celF.getContents();     
               colunaG = celG.getContents();     
               colunaH = celH.getContents();     
               colunaI = celI.getContents();     
               colunaJ = celJ.getContents();     
               colunaK = celK.getContents();     
     
               /*    
                * // TESTE para Imprimir Valores    
                * System.out.println(colunaA); System.out.println(colunaB);    
                * System.out.println(colunaC); System.out.println(colunaD);    
                * System.out.println(colunaE); System.out.println(colunaF);    
                * System.out.println(colunaG); System.out.println(colunaH);    
                * System.out.println(colunaI); System.out.println(colunaJ);    
                * System.out.println(colunaK);    
                */     
     
               /*    
                * Executa o insert para inserir os dados no banco de testes    
                * Postgres    
                */     
               PreparedStatement ps = conn     
                     .prepareStatement("INSERT INTO Cad_Cards(car,linha,apn_utz,conta,operadora,plano,sts_simcard,data_atv,id,sts_linha,imsi)"     
                           + "VALUES(?,?,?,?,?,?,?,?,?,?,?)");     
               ps.setString(1, colunaA);     
               ps.setString(2, colunaB);     
               ps.setString(3, colunaC);     
               ps.setString(4, colunaD);     
               ps.setString(5, colunaE);     
               ps.setString(6, colunaF);     
               ps.setString(7, colunaG);     
               ps.setString(8, colunaH);     
               ps.setString(9, colunaI);     
               ps.setString(10, colunaJ);     
               ps.setString(11, colunaK);     
     
               ps.executeUpdate();     
               ps.close();     
     
            }     
            workbook.close();     
            conn.close();     
                 
     
         } else {     
            System.out.println("Nome de arquivo inválido");     
            return false;     
         }     
      }     
      return true;     
   }     
}
P

Ninguem pode me ajudar??

Criado 13 de setembro de 2012
Ultima resposta 14 de set. de 2012
Respostas 6
Participantes 2