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

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:

[code]<%@ page language=“java” contentType=“text/html; charset=utf-8”
pageEncoding=“utf-8”%>

upload Upload:
[/code]

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

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…

é 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”

[quote=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”[/quote]
Pois é…mas fazer isso para web é bem diferente…tem mais coisas envolvidas…segue umas dicas

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:

[code]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();
    }
    }
    } [/code]

e no web xml:

[code]<?xml version="1.0" encoding="UTF-8"?>

SIMCards

index.jsp

Servlet /Servlet Servlet /Servlet

[/code]

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…

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:

[code]<%@ page language=“java” contentType=“text/html; charset=utf-8”
pageEncoding=“utf-8”%>

upload Upload:
    </form>
</body>
[/code]

Servlet:

[code]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();
    }
    }
    }
    [/code]

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:

[code]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;     

}
}
[/code]

Ninguem pode me ajudar??