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:
- 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 aplicaciones y déjelo disponible para su descarga
- ¿Qué significa servletcontext.getRealPath ("/") y cuándo debería usarlo?
- getResourceAsStream () vs FileInputStream