Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615

    [Java] Semplicissimo quesito path applicazione

    Solo grazie alla vostra disponibilità ho capito che un problema intricatissimo di un report era in realtà riconducibile al problema seguente, in merito al quale vi chiedo lumi.

    Nel percorso WebContent/images ho collocato il file image.jpg. Bene, la seguente stringa:

    codice:
    ServletContext context = this.getServletContext();        		
    String mio_percorso = context.getRealPath("/images/image.jpg");
    se la mia web app è eseguita dall'ambiente Eclipse mi restituisce il percorso (e fin qui tutto bene):

    codice:
    C:\Users\Admin\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\my_app\images\image.jpg
    se la mia web app è eseguita dal server Tomcat locale mi restituisce il percorso (e fin qui tutto bene):

    codice:
    C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\my_app\images\image.jpg
    ma se la mia web app è deploiata in rete, sul server remoto (identico a quello locale!), la stringa che dovrebbe mostrarmi a schermo il percorso è vuota, ovvero il suo valore è null!
    Come mai? Come fare per ottenere il percorso della mia web app, che sia valido anche in rete?

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

    Re: [Java] Semplicissimo quesito path applicazione

    Originariamente inviato da Shadow976
    ma se la mia web app è deploiata in rete, sul server remoto (identico a quello locale!), la stringa che dovrebbe mostrarmi a schermo il percorso è vuota, ovvero il suo valore è null!
    Come mai?
    Ti avevo anche riportato la nota della documentazione:

    This method returns null if the servlet container cannot translate the virtual path to a real path for any reason (such as when the content is being made available from a .war archive).

    È forse quello il tuo caso?
    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
    May 2005
    Messaggi
    615
    Grazie tantissimo.

    Sì, avevi ragione, era proprio come avevi detto tu: il valore passato era null. In locale non me ne rendevo conto, perché tutto funzionava.

    Poi, in remoto (deploiando appunto un war, proprio come nella nota!), il path non si vede ed il valore passato è null.

    Come mi consiglieresti di procedere, per permettere alla mia servlet di acquisire il percorso di un file (in modo da passarlo poi alla riga che apre il report) che sia valido anche quando la mia applicazione è deploiata in rete?

    Grazie ancora.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Shadow976
    Come mi consiglieresti di procedere, per permettere alla mia servlet di acquisire il percorso di un file (in modo da passarlo poi alla riga che apre il report) che sia valido anche quando la mia applicazione è deploiata in rete?
    Ritorna null appunto perché essendo dentro un war non c'è una specifica di path che permetta di "entrarci" dentro. Ti è chiaro?

    Se quel framework per il report accetta un InputStream (e quindi non deve modificare il file), potresti usare getResourceAsStream() di ServletContext.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Si, ora finalmente quello che vuoi dire mi è del tutto chiaro.

    Se ho ben devo scrivere qualcosa tipo:

    codice:
    jp = JasperFillManager.fillReport(context.getResourceAsStream(rptFolder + rptFileName + ".jasper"), parameters, Conn);
    Questa riga funziona perfettamente in locale da Eclipse, funziona perfettamente anche sul server locale Tomcat... E da quanto mi hai detto sinora mi aspetto che funzioni anche in rete, visto che la nota da te postata non riguardava controindicazioni su questo metodo. Giusto?

    Grazie tantissimo

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Andbin,
    all'epoca sei stato l'unico ad aver risolto il problema del quale ti avevo parlato e dopo giorni di tentativi sono riuscito a far funzionare il mio jasper report in modo corretto anche in remoto usando la riga di codice da te proposta, alla quale mai sarei arrivato in modo autonomo.

    Adesso ho un problema quasi identico, e vorrei avvalermi della tua competenza per risolverlo. Il mio jasper report stavolta include un subreport. Come prima, se apro il report principale in locale, sia da Eclipse che tramite il mio tomcat locale, vedo il report padre ed all'interno il report figlio in modo perfetto. Ed, esattamente come prima, se carico tutto in remoto, vedo il report padre ma nella zona dove dovrebbe esserci il report figlio non vedo nulla, ovvero uno spazio bianco. Non posso che desumere che si sia riprodotto lo stesso problema di prima, solo stavolta tale problema ha interessato il subreport. E non posso che desumere che, come prima, la soluzione del problema sia la riga che passa al report padre il percorso del report figlio sotto forma di parametro. E siccome modificando tale riga riproducendo quanto da te indicato vedo un errore, deduco che nel caso del percorso di un sottoreport passato come parametro devo apportare qualche variazione.

    Quindi ti chiedo, se questa è la riga che in locale funziona ma che in remoto non mi permette di vedere il report figlio:

    codice:
    parameters.put("SUBREPORT_DIR", context.getRealPath(rptFolder + "//" + subpath + "//" + "rptFatCan_subreport0.jasper"));
    e considerato che usare qui il getResourceAtStrem dà un errore, come potrei fare? Ti ringrazio, sono fiducioso in una soluzione perché se all'epoca sei stato l'unico a risolvere quel problema, ora che il problema dà gli identici sintomi potrei avere davvero qualche speranza!

    Archimede

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    SCUSATE SE INVIO UN ALTRO POST MA NON RIESCO A EDITARE

    Andbin, sperando di agevolare il tuo compito ti dico di aver inquadrato una parte del problema: non posso usare GetResourceAtStream perché quel parametro accetta una stringa e non un oggetto. Credo, nella mia ignoranza, che sia così. Bisognerebbe adattare quel comando getResourceAtStream rendendolo compatibile con un parametro passato ad un report.

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.