如何在基于servlet的Web应用程序中暂时保存生成的文件
我正在尝试生成一个XML文件并将其保存在/WEB-INF/pages/
。
下面是我使用相对path的代码:
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).
上运行时,它工作正常(C:\Users\userName\Desktop\Source\MyProject\src\main\webapp\WEB-INF\pages\myFile.xml).
但在服务器机器上部署和运行时,会抛出以下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
我也尝试了getServletContext().getRealPath()
,但它在我的服务器上返回null
。 有人可以帮忙吗?
切勿在Java EE Web应用程序(如new File("filename.xml")
使用相对本地磁盘文件系统path。 有关深入的解释,另请参阅getResourceAsStream()与FileInputStream 。
切勿使用getRealPath()
来获取写入文件的位置。 有关深入的解释,另请参阅servletcontext.getRealPath(“/”)是什么意思,什么时候应该使用它 。
永远不要写文件来部署文件夹。 有关深入的解释,另请参阅将上载的文件保存在servlet应用程序中的build议方法 。
始终将它们写入到预定义绝对path的外部文件夹中。
-
要么硬编码:
File folder = new File("/absolute/path/to/web/files"); File result = new File(folder, "filename.xml"); // ...
-
或以多种方式之一进行configuration:
File folder = new File(System.getProperty("xml.location")); File result = new File(folder, "filename.xml"); // ...
-
或者利用容器pipe理的临时文件夹 :
File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR); File result = new File(folder, "filename.xml"); // ...
-
或者使用操作系统pipe理的临时文件夹 :
File result = File.createTempFile("filename-", ".xml"); // ...
另一种方法是使用(embedded式)数据库。
也可以看看:
- 将上传的文件保存在servlet应用程序中的推荐方法
- 在何处放置以及如何读取基于servlet的应用程序中的configuration资源文件?
- 保持数据重新部署Java EE 7 Web应用程序的简单方法
- 在有限的时间内将PDF文件存储在应用服务器上,并使其可供下载
- servletcontext.getRealPath(“/”)是什么意思,什么时候应该使用它
- getResourceAsStream()与FileInputStream
只是使用
文件relpath =新build文件(“。\ pages \”);
作为默认的应用程序光标停留在web-inf文件夹中。