2009-09-25 17 views
7

Estoy intentando generar un documento PDF utilizando FOP. El código de generación de PDF se guarda en un servlet y el xsl está en una carpeta específica en la carpeta WebContent.Acceder al archivo en la carpeta WebContent desde un servlet

¿Cómo puedo acceder a este archivo xsl dando una ruta relativa? Funciona solo si doy la ruta completa en el objeto File.

Necesito generar dinámicamente el contenido xml. ¿Cómo puedo proporcionar este XML generado dinámicamente como fuente en lugar de un objeto File?

Por favor, envíe sus sugerencias.

Respuesta

16

para obtener la ruta puede simplemente hacer:

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

s es la clase que implementa HTTPServlet .También puede utilizar this.getServletContext() si su su clase servlet.

A continuación, pase esto como un parámetro.

En cuanto al uso de XML generado dinámicamente, la biblioteca que está utilizando debe admitir el uso de una secuencia de entrada, escribir su XML, convertirlo a una matriz de bytes, luego envolverlo en un ByteArrayInputStream y usarlo.

+4

No lo entiendo del todo. No sé lo que es 's'? – newbie

+2

@newbie 's' es un objeto que implementa [' ServletConfig'] (http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html). 'HttpServlet' extiende una clase que implementa' ServletConfig'. Esto significa que si su clase extiende 'HttpServlet', puede hacer' this.getServletContext() '. –

+0

no funciona para mí. si compruebo que el archivo existe con dicha ruta, devolverá falso. eche un vistazo a mi pregunta: http://stackoverflow.com/questions/36598562/unable-to-access-file-in-web-inf-folder-from-servlet –

6

Para una implementación directa e independiente contenedor, puede acceder al resourcewith la siguiente getResource método() dentro de un servlet:

/servlet inicio/

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

/final servlet/

+0

Desafortunadamente no puedo cargar el recurso en corriente. tengo la excepción java.net.MalformedURLException Imprimí ServletContext y sus mostradas como [email protected] ¿Alguna idea? – jobinbasani

+1

Después de usar servletContext.getRealPath (filePath); funciona bien :) – jobinbasani

+0

Aquí, el código funciona bien. Estoy usando Tomcat 6. *. Ahora veo que está utilizando la plataforma de IBM. Tal vez, esa es la diferencia entre los resultados. – apast

1

Utilicé el siguiente método para leer el archivo en el contenido web

Ahora todo el contenido del archivo está disponible en el objeto lector.

Cuestiones relacionadas