2009-09-25 16 views
7

Sto provando a generare un documento PDF utilizzando FOP. Il codice di generazione del pdf è conservato in un servlet e il xsl si trova in una cartella specifica nella cartella WebContent.Accesso al file nella cartella WebContent da un servlet

Come posso accedere a questo file xsl dando un percorso relativo? Funziona solo se fornisco il percorso completo nell'oggetto File.

Devo generare il contenuto xml in modo dinamico. Come posso dare questo xml generato dinamicamente come sorgente invece di un oggetto File?

Si prega di fornire i vostri suggerimenti.

risposta

16

per ottenere il percorso si può solo fare:

String path = s.getServletContext().getRealPath("/WEB-INF/somedir/hdfeeh");   

s è la classe che implementa HTTPServlet .È possibile utilizzare anche this.getServletContext() se la classe servlet.

Quindi passare questo come parametro.

Per quanto riguarda l'utilizzo di XML generato dinamicamente, la libreria che si sta utilizzando dovrebbe supportare l'utilizzo di un flusso di input, scrivere il codice XML, convertirlo in un array di byte, quindi inserirlo in un ByteArrayInputStream e utilizzarlo.

+4

Non capisco. Non so cosa sia 's'? – newbie

+2

@newbie 's' è un oggetto che implementa [' ServletConfig'] (http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html). 'HttpServlet' estende una classe che implementa' ServletConfig'. Ciò significa che se la tua classe estende 'HttpServlet', puoi fare' this.getServletContext() '. –

+0

non funziona per me. se controllo il file esiste con tale percorso, restituirà false. dai un'occhiata alla mia domanda: http://stackoverflow.com/questions/36598562/unable-to-access-file-in-web-inf-folder-from-servlet –

6

Per un'implementazione diretta e indipendente contenitore, è possibile accedere al resourcewith metodo seguente getResource() all'interno del vostro servlet:

/inizio servlet/

public InputStream getResource(String resourcePath) { 
    ServletContext servletContext = getServletContext(); 
    InputStream openStream = servletContext.getResourceAsStream(resourcePath); 
    return openStream; 
} 

public void testConsume() { 
    String path = "WEB-INF/teste.log"; 
    InputStream openStream = getResource(path); 

    int c = -1; 
    byte[] bb = new byte[1024]; 
    while (-1 != (c = openStream.read(bb))) { 
    /* consume stream */ 
    } 
    openStream.close(); 
} 

/servlet fine/

+0

Purtroppo non sono in grado di caricare la risorsa in ruscello. Ho la java.net.MalformedURLException eccezione ho stampato ServletContext e le sue mostrati come [email protected] Tutte le idee? – jobinbasani

+1

Dopo aver usato servletContext.getRealPath (filePath); funziona bene :) – jobinbasani

+0

Qui, il codice funziona bene. Sto usando Tomcat 6. *. Ora vedo che stai usando la piattaforma IBM. Forse, questa è la differenza tra i risultati. – apast

1

Ho utilizzato il seguente metodo per leggere il file nel contenuto web

BufferedReader reader = new BufferedReader(new InputStreamReader(request.getSession().getServletContext().getResourceAsStream("/json/sampleJson.json"))); 

Ora tutto il contenuto del file è disponibile nell'oggetto di lettura.

Problemi correlati