Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181

    [Java] Dubbi su questa porzione di codice...

    ho trovato questo codice su internet e sono riuscito ad inglobarlo nella mia pagina jsp.

    codice:
                                       OutputStream outStream = response.getOutputStream();
    		    		    File f=new File("C:/CERTIFICATI/FOGLI/"+nomeFile);
    		    			response.setContentType ("application/octet-stream");
    		    	        response.setContentLength((int)f.length());
    		    	        response.setHeader("Content-Disposition","attachment; filename=\"Foglio.pdf\"");
    		    	        response.setHeader("Cache-Control", "no-cache");
    		    	        byte[] buf = new byte[8192];
    		    	        FileInputStream inStream = new FileInputStream(f);
    		    	        int sizeRead = 0;
    		    	        while ((sizeRead = inStream.read(buf, 0, buf.length)) > 0) {
    		    	            outStream.write(buf, 0, sizeRead);
    		    	        }
    		    	        inStream.close();
    		    	        outStream.close();
    in pratica, come forse avrete capito, questo codice permette di far apparire la finestrella che da la possibilità di salvare o aprire un file pdf.

    Non ho chiaro il codice. IN pratica, con la prima riga, si crea un stream di byte ma non ho capito come, qual è la sorgente insomma. Il mio metodo ritorna un booleano e non un oggetto OutputStream...

    La seconda riga carica il file dal disco.

    Le response, più o meno ho capito cosa fanno: una setta il tipo di contenuto (poteva essere anche xls, rtf..), una setta la lunghezza del file, una imposta il nome che avrà il file, e l'ultima, credo, disabilita la cache del file..

    il resto del codice non l'ho proprio capito

    però funziona

    sapreste aiutarmi a decifrarlo?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] Dubbi su questa porzione di codice...

    Originariamente inviato da user0
    Non ho chiaro il codice. IN pratica, con la prima riga, si crea un stream di byte ma non ho capito come, qual è la sorgente insomma.
    Una JSP alla fin fine diventa una servlet e in Java EE le servlet per ogni "request" dal client gestiscono principalmente 2 cose: un (Http)ServletRequest e un (Http)ServletResponse.
    E l'output stream della response lo si ottiene dal (Http)ServletResponse proprio con quel getOutputStream(). È il "servlet container" che ti fornisce tutti questi oggetti.

    Originariamente inviato da user0
    La seconda riga carica il file dal disco.
    No, la seconda crea solo un oggetto java.io.File che rappresenta una astrazione di un pathname.

    Originariamente inviato da user0
    Le response, più o meno ho capito cosa fanno: una setta il tipo di contenuto (poteva essere anche xls, rtf..), una setta la lunghezza del file, una imposta il nome che avrà il file, e l'ultima, credo, disabilita la cache del file..
    Sì sono gli "header" della response.

    Originariamente inviato da user0
    il resto del codice non l'ho proprio capito
    Il resto è un ciclo per leggere dal file a "blocchi di byte" e scrivere ogni blocco sulla response.


    P.S. Non è per infierire (ci mancherebbe) ma se lavori con JSP (/Servlet) dovresti conoscere un pochino queste cose.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    Grazie per la risposta

    Qualcosa su jsp e servlet la so, alla fine visto che la servlet è una jsp compilata (anche se, volendo può essere scritta direttamente la servlet..) non mi sono soffermato molto su questo aspetto, ancnhe perchè alla fine, si lavora sulle jsp e non sulle servlet, no?

    Purtroppo ho iniziato da qualche mese e sto lavorando su moltissimi aspetti di un sistema informativo (non solo java ma anche sql, html, css,..) non ho tempo per soffermarmi su ogni aspetto

    tornando sull'argomento, io avevo capito che l'OutputStream era un blocco di byte grezzo proveniente dalla lettura di un quasiasi file (pdf, jpg ecc..), da definire con le response.

    Nel mio caso la jsp richiama un metodo che va a modificare un file pdf. Se la modifica è avvenuta con successo ritorna true, altrimenti false. Poi c'è quel blocco di codice che ho postato prima che serve a visualizzare il file pdf modificato.

    Ora, se ho ben capito, tu mi stai dicendo che OutputStream contiene l'output della servlet??

    Quindi con le response non setto i parametri del file pdf ma setto i parametri della response, giusto?

    provo a commentare questo codice:

    byte[] buf = new byte[8192]; ////Crea un vettore di byte
    FileInputStream inStream = new FileInputStream(f);// creauno stream di input (come paramentro di ingresso ha un oggetto di tipo File)
    int sizeRead = 0;// inStream.read legge il lo stream di input, quindi il file PDF (non mi è chiaro il while..)
    while ((sizeRead = inStream.read(buf, 0, buf.length)) > 0) {
    outStream.write(buf, 0, sizeRead); //scrive sull'ouputstream...
    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da user0
    Grazie per la risposta

    Qualcosa su jsp e servlet la so, alla fine visto che la servlet è una jsp compilata (anche se, volendo può essere scritta direttamente la servlet..) non mi sono soffermato molto su questo aspetto, ancnhe perchè alla fine, si lavora sulle jsp e non sulle servlet, no?
    Direi proprio di no.
    Innanzitutto è la JSP che, quando viene compilata, diventa una Servlet, non il contrario: una Servlet, in generale, non ha niente a che vedere con una JSP.

    In secondo luogo, le JSP sono solo l'ultimo passo della costruzione di una WebApplication: esse servono solo a "presentare" i dati elaborati da tutte le altre servlet che vengono prima (è l'ultimo passo di una catena: la presentation). Quindi, no... prima è bene capire esattamente cos'è una Servlet e cos'è una JSP, ma prima di tutto questo è bene imparare a programmare in Java (parlo di SE, le basi del linguaggio), dato che JEE è un framework di estensione molto più ampio e complesso di JSE.

    tornando sull'argomento, io avevo capito che l'OutputStream era un blocco di byte grezzo proveniente dalla lettura di un quasiasi file (pdf, jpg ecc..), da definire con le response.
    No: un OutputStream è un canale verso cui si può scrivere. Ci si può scrivere di tutto a seconda del tipo di OutputStream che si ha per le mani.

    Un FileOutputStream è uno stream di output che scrive su File.
    Una ServletOutputStream è uno stream di output che "scrive verso il client".

    (e sono solo due degli innumerevoli esempi di OutputStream)

    Ora, se ho ben capito, tu mi stai dicendo che OutputStream contiene l'output della servlet??
    Non esattamente. L'OutputStream rappresenta il canale di comunicazione con il client.

    Quindi con le response non setto i parametri del file pdf ma setto i parametri della response, giusto?
    Intorcolato, ma sì, ovvio.

    provo a commentare questo codice:
    Non ti è chiaro il while: il metodo read() del InputStream legge "buf.length" (ovvero 8192) byte dal file. Chiaro che non tutti i file sono così piccoli. Serve un while per leggere finchè l'InputStream è arrivato alla fine, ovvero finchè non sono stati letti tutti i byte del file.

    Dopo ciascuna lettura, viene scritto sul OutputStream ciò che è stato letto dal file...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2025 vBulletin Solutions, Inc. All rights reserved.