Servlets 如何在基于servlet的web应用程序中临时保存生成的文件
我正在尝试生成一个XML文件并将其保存在Servlets 如何在基于servlet的web应用程序中临时保存生成的文件,servlets,relative-path,realpath,Servlets,Relative Path,Realpath,我正在尝试生成一个XML文件并将其保存在/WEB-INF/pages/中 下面是我使用相对路径的代码: File folder = new File("src/main/webapp/WEB-INF/pages/"); StreamResult result = new StreamResult(new File(folder, fileName)); 在我的本地计算机上作为应用程序运行时,它工作正常(C:\Users\userName\Desktop\Source\MyProject\src
/WEB-INF/pages/
中
下面是我使用相对路径的代码:
File folder = new File("src/main/webapp/WEB-INF/pages/");
StreamResult result = new StreamResult(new File(folder, fileName));
在我的本地计算机上作为应用程序运行时,它工作正常(C:\Users\userName\Desktop\Source\MyProject\src\main\webapp\WEB-INF\pages\myFile.xml)。
但在服务器计算机上部署和运行时,会引发以下异常:
javax.xml.transform.TransformerException:
java.io.FileNotFoundException
C:\project\eclipse-jee-luna-R-win32-x86\u 64\eclipse\src\main\webapp\WEB INF\pages\myFile.xml
我也尝试了getServletContext().getRealPath()
,但它在我的服务器上返回了null
。有人能帮忙吗?只要用
文件relpath=新文件(“.\pages\”)
默认情况下,应用程序光标停留在web inf文件夹中。切勿在Java EE web应用程序中使用相对本地磁盘文件系统路径,例如
新文件(“filename.xml”)
。有关详细说明,请参见
永远不要使用
getRealPath()
来获取写入文件的位置。有关详细说明,请参见
无论如何都不要将文件写入部署文件夹。有关详细说明,请参见
始终将它们写入预定义绝对路径上的外部文件夹
- 硬编码:
File folder = new File("/absolute/path/to/web/files"); File result = new File(folder, "filename.xml"); // ...
- 或配置在:
- 或利用:
- 或利用:
File folder = new File(System.getProperty("xml.location"));
File result = new File(folder, "filename.xml");
// ...
File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR);
File result = new File(folder, "filename.xml");
// ...
File result = File.createTempFile("filename-", ".xml");
// ...