问题
I am trying to generate a XML file and save it in /WEB-INF/pages/
.
Below is my code which uses a relative path:
File folder = new File(\"src/main/webapp/WEB-INF/pages/\");
StreamResult result = new StreamResult(new File(folder, fileName));
It\'s working fine when running as an application on my local machine (C:\\Users\\userName\\Desktop\\Source\\MyProject\\src\\main\\webapp\\WEB-INF\\pages\\myFile.xml).
But when deploying and running on server machine, it throws the below exception:
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
I tried getServletContext().getRealPath()
as well, but it\'s returning null
on my server. Can someone help?
回答1:
Never use relative local disk file system paths in a Java EE web application such as new File("filename.xml")
. For an in depth explanation, see also getResourceAsStream() vs FileInputStream.
Never use getRealPath()
with the purpose to obtain a location to write files. For an in depth explanation, see also What does servletcontext.getRealPath("/") mean and when should I use it.
Never write files to deploy folder anyway. For an in depth explanation, see also Recommended way to save uploaded files in a servlet application.
Always write them to an external folder on a predefined absolute path.
Either hardcoded:
File folder = new File("/absolute/path/to/web/files"); File result = new File(folder, "filename.xml"); // ...
Or configured in one of many ways:
File folder = new File(System.getProperty("xml.location")); File result = new File(folder, "filename.xml"); // ...
Or making use of container-managed temp folder:
File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR); File result = new File(folder, "filename.xml"); // ...
Or making use of OS-managed temp folder:
File result = File.createTempFile("filename-", ".xml"); // ...
The alternative is to use a (embedded) database.
See also:
- Recommended way to save uploaded files in a servlet application
- Where to place and how to read configuration resource files in servlet based application?
- Simple ways to keep data on redeployment of Java EE 7 web application
- Store PDF for a limited time on app server and make it available for download
- What does servletcontext.getRealPath("/") mean and when should I use it
- getResourceAsStream() vs FileInputStream
回答2:
just use
File relpath = new File(".\pages\");
as application cursor in default stay into web-inf folder.
来源:https://stackoverflow.com/questions/31255366/how-to-save-generated-file-temporarily-in-servlet-based-web-application