How to save generated file temporarily in servlet based web application

柔情痞子 提交于 2019-11-26 01:23:46

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!