servlet pattern examples ejemplo desde contenedor cero aplicacion servlets relative-path realpath

servlets - pattern - servlet java ejemplo



Cómo guardar el archivo generado temporalmente en una aplicación web basada en servlet (2)

Estoy intentando generar un archivo XML y guardarlo en /WEB-INF/pages/ .

Debajo está mi código que usa una ruta relativa:

File folder = new File("src/main/webapp/WEB-INF/pages/"); StreamResult result = new StreamResult(new File(folder, fileName));

Funciona bien cuando se ejecuta como una aplicación en mi equipo local (C:/Users/userName/Desktop/Source/MyProject/src/main/webapp/WEB-INF/pages/myFile.xml).

Pero cuando se implementa y se ejecuta en la máquina del servidor, arroja la siguiente excepción:

javax.xml.transform.TransformerException: java.io.FileNotFoundException C: / project / eclipse-jee-luna-R-win32-x86_64 / eclipse / src / main / webapp / WEB INF / pages / myFile.xml

Intenté getServletContext().getRealPath() también, pero está devolviendo null en mi servidor. ¿Alguien puede ayudar?


Solo usa

File relpath = new File (". / Pages /");

como cursor de la aplicación en el modo predeterminado quedarse en la carpeta web-inf.


Nunca utilice rutas del sistema de archivos del disco local relativo en una aplicación web Java EE, como el new File("filename.xml") . Para una explicación en profundidad, vea también getResourceAsStream () vs FileInputStream .

Nunca use getRealPath() con el propósito de obtener una ubicación para escribir archivos. Para una explicación más detallada, consulte también Qué significa servletcontext.getRealPath ("/") y cuándo debería usarlo .

Nunca escriba archivos para implementar la carpeta de todos modos. Para una explicación más detallada, consulte también la forma recomendada de guardar los archivos cargados en una aplicación de servlet .

Siempre escríbalos en una carpeta externa en una ruta absoluta predefinida.

  • O bien codificado:

    File folder = new File("/absolute/path/to/web/files"); File result = new File(folder, "filename.xml"); // ...

  • O configurado de una de muchas maneras :

    File folder = new File(System.getProperty("xml.location")); File result = new File(folder, "filename.xml"); // ...

  • O haciendo uso de la carpeta temporal manejada por contenedor :

    File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR); File result = new File(folder, "filename.xml"); // ...

  • O haciendo uso de la carpeta temporal gestionada por OS :

    File result = File.createTempFile("filename-", ".xml"); // ...

La alternativa es usar una base de datos (incrustada).

Ver también: