Leggere un file pdf da pagina jsp

di il
4 risposte

Leggere un file pdf da pagina jsp

Salve,
ho una WebApplication dove una JSP scrive un file pdf e vorrei che un'altra pagina JSP lo visualizzasse.
Purtroppo tutti i miei tentativi falliscono .
Il file viene scritto senza indicare un path specifico, ma indicando solo il nome:

quando l'applicazione gira in ambiente di sviluppo (netbeans con glassfish), il file viene scritto in:
/usr/local/glassfish-4.1.1/glassfish/domains/domain1/config
;

mentre quando l'applicazione gira sul server tomcat, il file viene scritto in:
/var/lib/tomcat8/rosso__t.pdf
Questo è il source del JSP che cerca di visualizzare il pdf:
<%@ page language="java" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@page import="java.io.File" %>
<%@page import="java.io.FileOutputStream" %>
<%@page import="java.io.IOException" %>


<!DOCTYPE html>
<% 
String filename = request.getParameter( "nomefile" ); 
String nomefam = request.getParameter( "nomefam" ); 
//filename = "File:///"+filename;
%> 
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>

        <link rel="stylesheet" type="text/css" 
                  href="style2.css">
    </head>
    
    <body> 
      <!--%=filename%-->
<iframe src=”<%=filename%>” width="800"; height="300"></iframe>
 
<!--a href='<%=filename%>'> premere x stampare <%=nomefam%></a-->



        
    
</body>
</html>
questo è il source della stessa pagina generata:
<!DOCTYPE html>
 
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>

        <link rel="stylesheet" type="text/css" 
                  href="style2.css">
    </head>
    
    <body> 
      <!--%=filename%-->
<iframe src=”rosso__t.pdf” width="800"; height="300"></iframe>
 
<!--a href='rosso__t.pdf'> premere x stampare ROSSO_t.pdf</a-->
        
   
    
</body>
</html>
questo è l'output della pagina:
HTTP Status 404 - /WebGenealogia/%E2%80%9DFile:///rosso__t.pdf%E2%80%9D

type Status report

message /WebGenealogia/%E2%80%9DFile:///rosso__t.pdf%E2%80%9D

description The requested resource is not available.

Apache Tomcat/8.0.32 (Ubuntu)

Ho provato anche a passare al jsp il path completo del file, ma senza risultato, anche aggiungendo il " FILE:///"......

Qualcuno sa suggerirmi la soluzione?

grazie
danilo

4 Risposte

  • Re: Leggere un file pdf da pagina jsp

    danyred ha scritto:


    Il file viene scritto senza indicare un path specifico, ma indicando solo il nome:

    quando l'applicazione gira in ambiente di sviluppo (netbeans con glassfish), il file viene scritto in:
    /usr/local/glassfish-4.1.1/glassfish/domains/domain1/config
    ;

    mentre quando l'applicazione gira sul server tomcat, il file viene scritto in:
    /var/lib/tomcat8/rosso__t.pdf
    Questo perché hai usato solo un nome, senza alcun path. E quindi è relativo alla directory "corrente". Di per sé non sarebbe nulla di strano. Il punto però è che nelle webapp, che girano in un application server/servlet container, la directory "corrente" è qualcosa di abbastanza "vago", perché dipende da diversi fattori: quale S.O., quale application server/servlet container, dove è installato, come è configurato e magari altro.
    Insomma, nelle webapp Java la directory corrente NON è "usabile"/utile.

    danyred ha scritto:


    String filename = request.getParameter( "nomefile" );


    <iframe src=”<%=filename%>” width="800"; height="300"></iframe>
    Il punto qui è che se il parametro nomefile contiene es. "pippo.pdf", nel src del iframe c'è appunto src="pippo.pdf". Questo è RELATIVO a questa pagina che stai visualizzando.

    Quindi se questa pagina di visualizzazione fosse accessibile da es.

    http://nomehost:porta/nomeapp/visualizza.jsp

    allora IL CLIENT (browser) cercherebbe di accedere a

    http://nomehost:porta/nomeapp/pippo.pdf

    Ora: in qualunque modo sia messa la directory "corrente", sicuramente (e posso dirlo per praticamente certo) NON corrisponde alla directory che va a "servire" la context-root della applicazione.

    Quindi così non ti funzionerà mai.
  • Re: Leggere un file pdf da pagina jsp

    Grazie per la risposta e le spiegazioni superrapide.
    volutamente non ho messo il path, pensando di facilitare le cose, in quanto in precedenza il pdf lo facevo scrivere in una cartella di mia scelta,
    ma anche fornendo il path completo non sono riuscito a visualizzare il pdf
    Forse dovrei riuscire a scrivere il file nella cartella della applicazione , dove c'è la pagina jsp, o forse meglio, dove viene generata la pagina (se possibile)
  • Re: Leggere un file pdf da pagina jsp

    danyred ha scritto:


    volutamente non ho messo il path, pensando di facilitare le cose, in quanto in precedenza il pdf lo facevo scrivere in una cartella di mia scelta,
    ma anche fornendo il path completo non sono riuscito a visualizzare il pdf
    Questi accrocchi comunque non vanno granché bene, detto in generale.

    danyred ha scritto:


    Forse dovrei riuscire a scrivere il file nella cartella della applicazione , dove c'è la pagina jsp
    Questo sì, tecnicamente è possibile. Il path fisico che "serve" la context-root è facilmente rintracciabile con

    servletContext.getRealPath("/")

    a patto che la webapp sia spacchettata, cioè non servita direttamente dentro un .war (nel qual caso ovviamente getRealPath non può dare nulla di utile).

    danyred ha scritto:


    o forse meglio, dove viene generata la pagina (se possibile)
    No, questo non ha senso. Una JSP viene convertita in un sorgente di una Servlet, che poi viene compilata. Ma tutto questo non c'entra niente con DOVE (a quale url) è accessibile la pagina JSP.


    P.S. l'ideale sarebbe:
    1) decidere un path, anche fuori dalla applicazione e pure dal application server e magari renderlo configurabile nella applicazione.
    2) scrivere il file in quel percorso.
    3) realizzare una Servlet che risponda ad un url (relativo alla context-root) del tipo es. /file-servlet/nome.ext e che estrapoli nome.ext, vada a cercarlo in quel percorso e lo invii in response pari pari.
  • Re: Leggere un file pdf da pagina jsp

    Grazie, adesso vedo se riesco a risolvere con JSP, poi eventualmente proverò con le Servlet . Questo perchè non ho nessuna esperienza di Servlet ,
    mentre con le jsp me la cavo un po' meglio.
Devi accedere o registrarti per scrivere nel forum
4 risposte