2009-09-25 10 views
7

Próbuję wygenerować dokument PDF za pomocą FOP. Kod generujący pdf jest przechowywany w serwlecie, a plik xsl znajduje się w określonym folderze w folderze WebContent.Dostęp do pliku w folderze WebContent z serwletu

Jak uzyskać dostęp do tego pliku xsl, podając względną ścieżkę? Działa tylko wtedy, gdy podam pełną ścieżkę w obiekcie File.

Potrzebuję dynamicznie generować zawartość XML. Jak mogę podać ten dynamicznie generowany plik XML jako źródło zamiast obiektu File?

Proszę podać swoje sugestie.

Odpowiedz

16

Aby uzyskać ścieżkę można po prostu zrobić:

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

s jest klasa, która implementuje HTTPServlet Ty możesz także użyć this.getServletContext() jeśli jego klasie serwletu.

Następnie należy przekazać to jako parametr.

W przypadku korzystania z dynamicznie generowanego pliku XML, używana biblioteka powinna obsługiwać strumień wejściowy, zapisywać kod XML, konwertować go na tablicę bajtów, a następnie zawijać w pliku ByteArrayInputStream i używać go.

+4

Nie całkiem rozumiem. Nie wiem, co to jest "s"? – newbie

+2

@newbie 's' to obiekt implementujący [' ServletConfig'] (http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html). 'HttpServlet' rozszerza klasę implementującą' ServletConfig'. Oznacza to, że jeśli twoja klasa rozszerza 'HttpServlet', możesz zrobić' this.getServletContext() '. –

+0

to nie działa dla mnie. jeśli sprawdzam, czy plik istnieje z taką ścieżką, zwróci false. spójrz na moje pytanie: http://stackoverflow.com/questions/36598562/nable-to-access-file-in-web-inf-folder-from-servlet –

6

Do bezpośredniego i samodzielnego wdrożenia pojemnika, można uzyskać dostęp do resourcewith metoda następujące getResource() wewnątrz serwletu:

/początek aplet/

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

/koniec aplet/

+0

Niestety nie jestem w stanie załadować zasobu do strumień. uzyskać java.net.MalformedURLException wyjątku I wydrukowany ServletContext i jego pokazane jako [email protected] pomysłów? – jobinbasani

+1

Po użyciu servletContext.getRealPath (filePath); działa dobrze :) – jobinbasani

+0

Tutaj kod działa poprawnie. Używam Tomcat 6. *. Teraz widzę, że korzystasz z platformy IBM. Może, to jest różnica między wynikami. – apast

1

Użyłem następującej metody, aby przeczytać plik w treści WWW

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

Teraz cała zawartość pliku jest dostępna w obiekcie czytnika.

Powiązane problemy