如何在基于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文件夹中。

Interesting Posts