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

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?

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:

  • Forma recomendada para guardar archivos cargados en una aplicación servlet
  • ¿Dónde colocar y cómo leer los archivos de recursos de configuración en la aplicación basada en servlet?
  • Maneras sencillas de mantener los datos sobre la redistribución de la aplicación web Java EE 7
  • Almacene PDF por tiempo limitado en el servidor de la aplicación y déjelo disponible para su descarga
  • ¿Qué significa servletcontext.getRealPath (“/”) y cuándo debería usarlo?
  • getResourceAsStream () vs FileInputStream

Solo usa

File relpath = new File (“. \ Pages \”);

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

    Intereting Posts