当前位置: 首页 > 面试题库 >

在运行时在Java Web项目的WebContent内保存文件

赵星华
2023-03-14
问题内容

我正在尝试生成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\main\webapp\WEB-INF\pages\myFile.xml).

但是在服务器计算机上部署和运行时,它会引发以下异常:

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")

切勿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”);
    // …

  • 或利用容器管理的temp文件夹:

    File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR);
    

    File result = new File(folder, “filename.xml”);
    // …

  • 或利用OS管理的临时文件夹:

    File result = File.createTempFile("filename-", ".xml");
    

    // …

替代方法是使用(嵌入式)数据库。



 类似资料:
  • 每当我尝试运行一个Javaweb项目时,我都会得到一个反复弹出的登录Tomcat Manager应用程序。 根据服务器属性(管理器脚本)角色输入用户名/密码不起作用,延迟的服务器会再次弹出,需要进行身份验证。 服务器是Tomcat 8.0.27和Netbeans 8.1?

  • 我在tomcat上使用intellij运行项目,但是当运行tomcat时,错误会抛出 08,2015年4:00:37 org.apache.Catalina.core.containerbase startInternal:子容器在启动java.util.concurrent.executionexception:org.apache.Catalina.lifecycleexception:未能在

  • 6.5.2.保存文件:同时构建项目 对文件做过更改,不管是Java文件还是XML文件,都得记着保存它们。在点击File->Save或按下Ctrl-S时,Eclipse都会自动重新构建项目。因此在保存一个文件并确保无误之前,最好不要修改其它文件,以免引入别的错误。若项目构建失败,代码中会出现红色的x标志,可以凭此判断这个文件中是否有错误存在。Java与XML相互依赖,修改起来若不顾顺序,同时修改又同

  • 我想在运行时加载一些scala类,该类在我的scala项目中呈现。更准确地说,在我项目的根文件夹中,我有tmpcaseclass.scala: 我想编译它,并在运行时使用工具箱,如下所示: 但我遇到了follwing错误:

  • 问题内容: 每次在Linux中保存文件时如何运行脚本? 问题答案: Linux有一个子系统调用inotify,它可以使文件系统向应用程序报告文件系统中的更改。 您的linux系统可能有一个名为的软件包,使使用变得非常容易。(或在可用的软件包中搜索描述中包含“ inotify”一词的任何软件包)。 设置非常类似于setup ,除了在指定的时间和日期执行脚本,每当指定的文件或目录更改时执行脚本。 PS

  • 问题内容: 当我上传新文件时,即使我指定了别的,它也会保存到应用程序的根文件夹中。为什么配置不起作用? : 问题答案: 是Flask可以识别的配置选项。相对于当前工作目录(通常是开发过程中的项目根目录)工作。 将安全的文件名加入上载文件夹,然后保存到该路径。 最好将本地数据存储在实例文件夹中,而不是项目根目录中。Flask已经知道那在哪里。只要确保你instance首先创建目录即可。 无论你决定将

  • 我已通过composer安装了laravel创建项目laravel/laravel–-首选区 之后运行php artisan service命令到laravel项目目录并得到这个结果。 Laravel开发服务器启动:http://127.0.0.1:8000 但是当我去http://127.0.0.1:8000 浏览器中laravel项目未运行并给出错误信息 无法访问此站点127.0.0.1拒绝连

  • 我有一个基于Maven Spring的应用程序。这是一个使用java的Javaweb应用程序。 这是pom。我正在使用的xml: 当我进行清理、生成资源和安装时,会出现此错误,并且不会开始工作 我正在使用IntelliJ,但在使用Eclipse时出现了相同的错误。应用程序正在脱机工作。 对这个解决方案有什么想法吗?