2009-09-25 8 views
7

Ich versuche, ein PDF-Dokument mit FOP zu erstellen. Der PDF-Generierungscode wird in einem Servlet gespeichert und die XSL befindet sich in einem bestimmten Ordner im WebContent-Ordner.Zugriff auf die Datei im WebContent-Ordner über ein Servlet

Wie kann ich auf diese xsl-Datei zugreifen, indem Sie einen relativen Pfad angeben? Es funktioniert nur, wenn ich den vollständigen Pfad im File-Objekt gebe.

Ich muss den XML-Inhalt dynamisch generieren. Wie kann ich diese dynamisch generierte XML-Datei als Quelle anstelle eines Dateiobjekts angeben?

Bitte geben Sie Ihre Vorschläge.

Antwort

16

Um den Pfad erhalten Sie gerade tun:

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

s ist die Klasse, HTTPServlet implementiert .Sie auch this.getServletContext() wenn seine Ihre Servlet-Klasse verwenden können.

Dann übergeben Sie dies als Parameter. Wenn Sie dynamisch generiertes XML verwenden, sollte die von Ihnen verwendete Bibliothek einen Eingabestream unterstützen, Ihr XML schreiben, es in ein Byte-Array konvertieren und dann in eine ByteArrayInputStream umbrechen und diese verwenden.

+4

Nicht ganz verstanden. Ich weiß nicht, was ist 's'? – newbie

+2

@newbie 's' ist ein Objekt, das [' ServletConfig'] implementiert (http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html). 'HttpServlet' erweitert eine Klasse, die' ServletConfig' implementiert. Das heißt, wenn Ihre Klasse 'HttpServlet' erweitert, können Sie' this.getServletContext() 'ausführen. –

+0

es funktioniert nicht für mich. Wenn ich überprüfe, ob die Datei mit diesem Pfad existiert, wird false zurückgegeben. Schauen Sie sich meine Frage an: http://stackoverflow.com/questions/36598562/unable-to-access-file-in-web-inf-folder-from-servlet –

6

Für eine direkte und unabhängige Container Implementierung Sie die resourcewith die folgende Methode getResource() in Ihrem Servlet zugreifen:

/Start 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(); 
} 

/Ende Servlet/

+0

Leider kann ich die Ressource nicht laden Strom. Ich bekomme die Ausnahme java.net.MalformedURLException I ServletContext und seine gezeigt als [email protected] Irgendwelche Ideen gedruckt? – jobinbasani

+1

Nach der Verwendung von servletContext.getRealPath (filePath); es funktioniert gut :) – jobinbasani

+0

Hier funktioniert der Code gut. Ich benutze Tomcat 6. *. Jetzt sehe ich, dass Sie IBM Plattform verwenden. Vielleicht ist das der Unterschied zwischen den Ergebnissen. – apast

1

Ich habe die folgende Methode verwendet, um die Datei unter Web-Inhalt

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

Nun ist der gesamte Dateiinhalt im Reader-Objekt verfügbar.