如何在基于 servlet 的 Web 应用程序中临时保存生成的文件

2024-01-31

我正在尝试生成一个 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

I tried getServletContext().getRealPath()也一样,但它正在回归null在我的服务器上。有人可以帮忙吗?


Never在 Java EE Web 应用程序中使用相对本地磁盘文件系统路径,例如new File("filename.xml")。有关深入的解释,另请参阅getResourceAsStream() 与 FileInputStream https://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream.

Never use getRealPath()目的是获取写入文件的位置。有关深入的解释,另请参阅servletcontext.getRealPath("/") 是什么意思以及何时应该使用它 https://stackoverflow.com/questions/12160639/what-does-servletcontext-getrealpath-mean-and-when-should-i-use-it.

Never无论如何,将文件写入部署文件夹。有关深入的解释,另请参阅在 servlet 应用程序中保存上传文件的推荐方法 https://stackoverflow.com/questions/18664579/recommended-way-to-save-uploaded-files-in-a-servlet-application.

始终将它们写入预定义绝对路径上的外部文件夹。

  • 要么硬编码:

      File folder = new File("/absolute/path/to/web/files");
      File result = new File(folder, "filename.xml");
      // ...
    
  • 或者配置在多种方法之一 https://stackoverflow.com/a/18664715/157882:

      File folder = new File(System.getProperty("xml.location"));
      File result = new File(folder, "filename.xml");
      // ...
    
  • 或者利用容器管理的临时文件夹 http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html#TEMPDIR:

      File folder = (File) getServletContext().getAttribute(ServletContext.TEMPDIR);
      File result = new File(folder, "filename.xml");
      // ...
    
  • 或者利用操作系统管理的临时文件夹 https://docs.oracle.com/javase/8/docs/api/java/io/File.html#createTempFile-java.lang.String-java.lang.String-:

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

另一种方法是使用(嵌入式)数据库或 CDN 主机(例如 S3)。

也可以看看:

  • 在 servlet 应用程序中保存上传文件的推荐方法 https://stackoverflow.com/questions/18664579/recommended-way-to-save-uploaded-files-in-a-servlet-application
  • 在基于 servlet 的应用程序中,配置资源文件应该放在哪里以及如何读取? https://stackoverflow.com/questions/2161054/where-to-place-and-how-to-read-configuration-resource-files-in-servlet-based-app/
  • 在重新部署 Java EE 7 Web 应用程序时保留数据的简单方法 https://stackoverflow.com/questions/27804742/simple-ways-to-keep-data-on-redeployment-of-java-ee-7-web-application/
  • 在应用程序服务器上存储 PDF 一段有限的时间并可供下载 https://stackoverflow.com/questions/25430677/store-pdf-for-a-limited-time-on-app-server-and-make-it-available-for-download/
  • servletcontext.getRealPath("/") 是什么意思以及何时应该使用它 https://stackoverflow.com/questions/12160639/what-does-servletcontext-getrealpath-mean-and-when-should-i-use-it
  • getResourceAsStream() 与 FileInputStream https://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在基于 servlet 的 Web 应用程序中临时保存生成的文件 的相关文章

随机推荐

  • Java - Spring Ws - 在 XSD 文件中加载相对包含 (Tomcat 8)

    我创建了一个 Spring Web 服务 它使用以下代码从 XSD 文件集合创建动态 WSDL Resource schema new ClassPathResource schema service XCPD SupportMateria
  • Typescript 中的泛型类型返回

    我有一个 Interface find 其中包含方法 cal 类a1和a2实现了该接口 a1 返回数字 a2 返回字符串 我如何定义一个接口来解决我的问题 下面是所提到内容的片段 interface Ifind cal string cla
  • 用于 Docker 的部署 Rails 应用

    阅读了很多资源 但从部署的角度仍然对 Docker 感到困惑 尝试找出 Docker 环境下 Rails 应用程序的最佳实践 特别感兴趣如何解决以下问题 1 从先前部署的容器访问日志 可以停止 销毁该容器 Rsyslog 系统日志 2 回滚
  • 如何在多项选择的表单服务中分配Go_To_Page?

    刚刚开始在 Google Apps 脚本中使用表单服务 需要根据给出的答案引导表单将用户带到特定页面 这是我当前的代码 form addMultipleChoiceItem setTitle What would you like to d
  • JQuery - 获取调用元素 id

    Problem 在自动完成的源函数中 我想获取选择器的 ID 有没有办法可以遍历调用堆栈并得到这个 做JQuery有这个抽象级别吗 Why 我将在页面上有多个自动完成功能 并且每个自动完成功能将在服务器端以不同的方式处理 我必须使用另一个函
  • 仪器中没有出现泄漏,即使我确信它们存在

    我正在检查仪器是否有泄漏 并且我已设置每秒检查一次 但没有出现泄漏 我确信我的应用程序中一定有一些 有什么可以阻止这些出现吗 有没有一种好方法可以创建泄漏 以便我可以测试仪器中是否出现泄漏 Thanks 创建泄漏很容易 id someObj
  • C++17 中的 std::make_shared() 更改

    In cppref http en cppreference com w cpp memory shared ptr make shared 以下情况直到 C 17 才成立 代码如f std shared ptr
  • 有没有类似 CSS 源映射的东西?

    我使用 jQuery 动态地将 CSS 标签添加到页面中 text css appendTo document head 在 Chrome 开发者工具中查看时 所有 CSS 都显示为 localhost 这并不总是有帮助 有没有类似 CSS
  • DataGrid ScrollIntoView - 如何滚动到未显示的第一行?

    我正在尝试向下滚动带有代码的 WPF DataGrid 我用 int itemNum 0 private void Down Click object sender RoutedEventArgs e if itemNum 1 gt dat
  • C++1y 没有从 std::bind 到 std::function 的可行转换

    我正在尝试将转发函数存储到std function 如果我使用std bind 我收到错误消息 例如no viable conversion from 如果我使用 lambda 它编译没问题 这是示例代码 include
  • 输入文本框后台的 jQuery 自动完成

    我有一个 jQuery 文本框自动完成脚本 它使用 PHP 脚本来查询 MySQL 数据库 目前 结果显示在文本框下方 但我希望它看起来就像在文本框中淡出一样 我怎样才能做这样的事情 Google Instant 搜索框就是一个例子 我当前
  • Memcached – GET 和 SET 操作是原子的吗?

    场景如下 一个查询 memcached 缓存的简单网站 批处理作业每 10 15 分钟更新一次相同的缓存 使用该模式是否会出现任何问题 例如缓存未命中 我担心所有可能发生的比赛状况 例如 如果网站对 memcached 中缓存的对象执行 G
  • 以 Scaffold 作为子项的 InheritedWidget 似乎不起作用

    我希望在 Flutter 应用程序的根级别使用 InheritedWidget 以确保经过身份验证的用户的详细信息可供所有子小部件使用 本质上使 Scaffold 成为 IW 的子级 如下所示 override Widget build B
  • WebView 不接受某些 cookie

    我正在 Webview 中加载一个网站 该网站使用一些 cookie 来存储会话 我写了以下几行来接受cookie CookieSyncManager createInstance this CookieSyncManager getIns
  • DOM4J:检索按属性值过滤的节点值

    我有一个给定的 xml 结构如下
  • iOS 17 中的 SwiftUI View 泄漏

    似乎 View 及其成员在演示后不会取消分配 main struct ExampleApp SwiftUI App State var show false var body some Scene WindowGroup VStack Bu
  • 如何使用openlayers在浏览器中显示高分辨率图像

    我正在尝试使用 openlayers 5 在浏览器中显示高分辨率图像 我找到了一个有关如何使用 Zoomify 创建图像图块并使用 openlayers 地图渲染它的示例 但我无法将它用于我自己的形象 我对此完全陌生 我问的问题可能很琐碎
  • 单击按钮时旋转 Font Awesome 图标并触发手风琴过渡

    我是解决方案的一部分 但我坚持在单击实际的 披露 按钮时让 FA 图标旋转 我似乎也不知道该把它放在哪里transition属性 以便让披露内容框顺利打开 类似于手风琴 例如这个 https www w3schools com howto
  • 任意数量集合的笛卡尔积

    您是否知道一些简洁的 Java 库可以让您生成两个 或更多 集合的笛卡尔积 例如 我有三套 第一个是 Person 类的对象 第二个是 Gift 类的对象 第三个是 GiftExtension 类的对象 我想生成一组包含所有可能的三元组 P
  • 如何在基于 servlet 的 Web 应用程序中临时保存生成的文件

    我正在尝试生成一个 XML 文件并将其保存在 WEB INF pages 下面是我的代码 它使用相对路径 File folder new File src main webapp WEB INF pages StreamResult res