Pagina JSP senza codice HTML per l’esportazione di dati su foglio Excel

Sto affrontando un problema nell’esportazione dei miei dati su excel sheet, questo a causa di un codice che altri sviluppatori del mio team hanno realizzato. Quindi il problema principale è esportare i dati in Excel o .cvs usando la pagina JSP ma senza usare alcun codice HTML. Qualsiasi suggerimento mi aiuterebbe anche a esplorare nella mia arena in via di sviluppo. Grazie per il tuo impegno.

Meglio usare un servlet per questo. Il codice Java non appartiene a un file JSP, è semplicemente una ricetta per problemi di manutenzione .

Per iniziare, crea una semplice class di utilità Java che prende ad esempio un List> o un List (in cui Data rappresenta una riga) che rappresenta il contenuto CSV e un OutputStream come argomenti del metodo e logica di scrittura che fa il compito di copia dei dati.

Una volta che hai fatto funzionare, crea una class Servlet che accetta un identificatore di file CSV come parametro di richiesta o pathinfo (ti consiglio di usare pathinfo come un determinato browser sviluppato da un team di Redmond fallirebbe nel rilevare il nome del file / il mimo in altro modo), usa il identificatore per ottenere la List> o List da qualche parte e la scrive OutputStream della risposta HttpServletResponse lungo un insieme di intestazioni di risposta corrette.

Ecco un esempio di kickoff di base:

 public static  void writeCsv (List> csv, char separator, OutputStream output) throws IOException { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, "UTF-8")); for (List row : csv) { for (Iterator iter = row.iterator(); iter.hasNext();) { String field = String.valueOf(iter.next()).replace("\"", "\"\""); if (field.indexOf(separator) > -1 || field.indexOf('"') > -1) { field = '"' + field + '"'; } writer.append(field); if (iter.hasNext()) { writer.append(separator); } } writer.newLine(); } writer.flush(); } 

Ecco un esempio di come potresti usarlo:

 public static void main(String[] args) throws IOException { List> csv = new ArrayList>(); csv.add(Arrays.asList("field1", "field2", "field3")); csv.add(Arrays.asList("field1,", "field2", "fie\"ld3")); csv.add(Arrays.asList("\"field1\"", ",field2,", ",\",\",\"")); writeCsv(csv, ';', System.out); } 

E all’interno di un Servlet puoi fondamentalmente fare:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename = request.getPathInfo(); List> csv = someDAO().list(); response.setHeader("content-type", "text/csv"); response.setHeader("content-disposition", "attachment;filename=\"" + filename + "\""); writeCsv(csv, ',', response.getOutputStream()); } 

Mappare questo servlet su qualcosa come /csv/* e invocarlo come qualcosa come http://example.com/context/csv/filename.csv . Questo è praticamente tutto. Il nome file nel pathinfo è importante perché un determinato browser sviluppato da un team di Redmond ignora la parte filename dell’intestazione Content-Disposition e utilizza invece l’ultima parte del percorso dell’URL.