Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [JAVA-JSP] Problema link al file

    Salve a tutti,

    da qualche giorno a questa parte mi sono imbattuto in un problema alquanto strano, vi spiego il contesto nel quale mi trovo:

    ho sviluppato un listato (tabella html) che visualizza dei dati ricavati da un interrogazione al database, l'utente finale puo selezionare dei filtri in modo da ottenere i dati a suo piacimento, fatto ciò, il tutto viene memorizzato in un file excel (.xls) in modo automatico. L'utente deve avere la possibilità di scaricare quel file excel in modo da avere sul client il listato desiderato.

    Il problema si presenta quando cerco di scaricare quel file, ovvero:

    - le prime volte, per salvare i record nel file excel, usavo lo stesso file e sovrascrivevo ogni volta i dati, ma ogni volta che andavo ad aggiornare i filtri mi restituiva in download sempre lo stesso ed identico file senza aggiornamenti. Se andavo a vedere il file sul server, però, i dati erano stati aggiornati. In poche parole, aggiorno i filtri, clicco scarica, e il file restituito è uguale a prima dell'aggiornamento, e rimane tale per un pò di tempo. mentre sul server il file risulta aggiornato.

    - allora per ovviare a questo problema ho deciso di creare un nuovo file excel (con nome diverso) ogni votla che veniva aggiornato il listato, in modo così da evitare il problema di caching.
    Cosa succede però?? che il link del file excel appena creato, non funziona (risorsa non raggiungibile, non esiste!! - ma se l'ho appena creato??!!? ), e solo dopo un certo periodo di tempo, il file risulta accessibile (quindi non è un problema di link ).

    Premetto che sto lavorando su una workstation personale con NetBeans (appl.server: Apache Tomcat) e non ho ancora la possibilità di testarlo sull'application server (Apache Tomcat) aziendale, vi dico questo perchè ho provato a guardare i file di configurazione del server e risultano diversi, per esempio sulla mia workstation non trovo il file httpd.conf mentre sul server si.

    Attendo un vostro gentile responso,
    grazie.
    Michele

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Faccio un ipotesi: crei il link prima che effettivamente il file sia creato sul server. Questo può avvenire se ad esempio, scrivendo il file stesso con un FileWriter, si omette il flush() alla fine del processo di scrittura.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Caro Andrea, l'ipotesi è corretta ma il file (purtroppo) è presente e perfettamente funzionante al termine del caricamento della pagina.
    E' alquanto strano il problema..... ma come al solito sarà una stronzata

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Una soluzione potrebbe essere quella di creare al volo il file e forzarne il download tramite header.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Spiegati meglio, in che senso forzare il download tramite header?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Hai presente quando su qualche sito, nonostante un browser di norma mostri le immagini o abbia installato il plug-in per vedere i file pdf online, ci viene direttamente proposto il download ("Salva con nome...") di tali file? Quella è la situazione classica di download "forzato". Qui c'è un esempio di codice

    http://www.planet-source-code.com/vb...=2183&lngWId=2
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    sisi, adesso ho capito cosa intendi.
    Ho provato anche in questo modo, e giustamente il risultato è sempre o stesso perchè viene aggiunto semplicemente un passaggio in piu.

    A questo punto direi:
    lasciamo da parte il secondo caso, ovvero creare un file nuovo ogni volta, e torniamo al primo caso (cioè sovrascrivo il file ogni volta).

    Conosci un modo per azzerare la cache a livello server in modo da visualizzare i dati aggiornati ogni volta?

    Grazie,
    Michele

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    vediamo un po' di codice intanto
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Non so quanto possa esser utile il codice dato che l'applicazione funziona.
    E' un problema a livello server.... comunque ti posto le funzioni che più interessano l'applicazione.



    questo è il pulsante che linka al file situato in una cartella chiamata excel.

    <input type="button" value="Excel report" onclick="location.href='excel\rep.xls'" />




    questa invece è la parte java che mi crea il file (tralascio tutte le funzioni di creazione foglio excel, celle, stili, ecc..)

    <%
    try{


    FileOutputStream excel = new FileOutputStream("excel\\rep.xls");

    HSSFWorkbook wb = new HSSFWorkbook( );
    HSSFSheet ws = wb.createSheet( );

    ...

    [...] \\creo le celle, interrogo il db, inserisco i dati, ecc...

    ...

    wb.write(excel); \\inserisce il foglio excel nel file creato
    excel.close(); \\chiudo il dialogo con il file creato
    }
    catch(Exception e){
    excel.close(); \\ nel caso venissero catturate delle eccezioni chiudo comunque il dialogo con il file.
    }

    %>

    Questo è in sostanza quello che avviene.

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ho creato in fretta un paio di JSP per vedere come funziona con il force-download

    codice:
    formpage.jsp
    <%-- 
        Document   : formpage
        Created on : 7-mag-2009, 14.59.38
        Author     : Andrea
    --%>
    
    <%@page contentType="text/html" 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>Creiamo un file e forziamone il download</title>
        </head>
        <body>
            <iframe name="hiddenframe" style="display:none;"></iframe>
            <h1>Dati del file</h1>
            <form name="creafile" method="post" action="forcedownload.jsp" target="hiddenframe">
                Nome: <input type="text" name="nome" />
    
                Cognome: <input type="text" name="cognome" />
    
                Telefono: <input type="text" name="telefono" />
    
                <input type="submit" name="submit" value="Submit" />
            </form>
        </body>
    </html>
    codice:
    forcedownload.jsp
    <%-- 
        Document   : forcedowload
        Created on : 7-mag-2009, 15.07.24
        Author     : Andrea
    --%>
    
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@page import="java.io.*"%>
    
    <%
      response.setContentType("text/plain");
      response.setHeader ("Content-Disposition", "attachment; filename=\"testfile.txt\"");
      ServletOutputStream outs = response.getOutputStream();
    
      outs.write(("Nome: "+request.getParameter("nome")+"\n").getBytes("utf-8"));
      outs.write(("Cognome: "+request.getParameter("cognome")+"\n").getBytes("utf-8"));
      outs.write(("Telefono: "+request.getParameter("telefono")).getBytes("utf-8"));
    
      outs.flush();
      outs.close();
    %>
    e come vedi non passo dalla creazione su server del file, ma lo sparo direttamente in output. Penso che dal secondo download in poi il tuo file sia scaricato correttamente, ovvero non contestualmente alla prima richiesta. Credo che sia proprio quello il problema, come accennavo nel post precedente. In altre parole, invece di affidarti al link diretto al file, crea una JSP o servlet che si occupi della creazione del file (non serve salvarlo da nessuna parte, il server se lo può anche tenere in memoria) e del suo inoltro al client...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.