【问题标题】:Where to place the text files required by Jars on a tomcat server?将 Jars 所需的文本文件放在 tomcat 服务器上的什么位置?
【发布时间】:2011-03-13 19:42:03
【问题描述】:

我有一个 servlet,在 WEB-INF/lib 目录中我有一个 jar 文件。这个罐子是由我正在做的一个项目制成的。项目中的代码执行良好,并在其主目录中使用 txt 文件。 Java代码调用这些文件不需要添加任何路径,即:new FileReader("file.txt")。

问题是当我调用 servlet 时,它不断抛出异常,它找不到 jar 所需的那些 txt 文件。到目前为止,我已将 txt 文件放在以下位置,但没有成功:

  • 主目录
  • 源文件夹
  • Servlet 包
  • 网页内容
  • WEB-INF
  • WEB-INF/库
  • 元信息

我想我已经用尽了 txt 文件可以去的所有可能的地方。 jar 文件到底在哪里寻找它们?

谢谢

【问题讨论】:

标签: tomcat servlets jar


【解决方案1】:

看看this post

当您将其作为项目执行时,它会起作用,因为该相对路径在文件系统上实际上是有效的。但是,一旦您将应用程序打包为 JAR,读取文件的常用方法将失败,因为您的文件 JAR 中,而对于文件系统而言,JAR 只是另一个文件。要读取 JAR 中打包的资源,您应该酌情使用Class#getResource()Class#getResourceAsStream()

您还可以查看 mindprod.com 上的 Java 词汇表对这些内容的看法:

【讨论】:

  • 这似乎没有任何效果:/
  • 那么它要么根本没有放在类路径中,要么你还在使用FileReader
【解决方案2】:

我想我已经用尽了 txt 文件可以去的所有可能的地方。 jar 文件到底在哪里寻找它们?

不,你没有。将文件放在 Tomcat 发行版内的 /bin 目录中。这个结构:

new FileReader("file.txt")

在进程当前目录中搜索文件。启动 Tomcat 后,它恰好是包含所有启动脚本的二进制目录(非常不幸的地方)。

也就是说,您应该考虑重写此文件以打开并使其路径可配置,因为在大多数环境中读取(当然也可以写入)/bin 目录应该被禁止,这是一种非常糟糕的做法。

【讨论】:

  • 我试过 bin 文件夹,但没有任何运气。我在 Eclipse 中运行它。这会有什么不同吗?
  • 是的,它与众不同。在尝试打开 file.txt 之前在某处运行 System.out.println(new File(".").getAbsolutePath()); (它可能会指向 Eclipse 中的某个目录或您的项目目录。这些斗争只建议您不应该依赖默认目录并将此文件的路径外部化。
  • 这行得通 - 谢谢 :) 我现在会尝试让它在不同的目录中查找(而不是在 eclipse 根目录中)。这样做的最佳方法是什么?
  • 很高兴听到这个消息,但请记住,将应用程序文件存储在 Tomcat/Eclipse 二进制目录中是个坏主意。无论如何,如果它解决了您的问题,请接受答案,谢谢!
【解决方案3】:

我认为答案取决于 Tomcat 的启动方式,但通常默认目录是 Tomcat 根目录。

在您的 servlet 中尝试以下操作:

ServletContext context = getServletConfig().getServletContext ();
String fullPath = context.getRealPath ("file.txt");

【讨论】:

  • 打印出来的路径是一个不起眼的临时文件夹。我试过把文件放在这个隐藏文件夹里,但还是不行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2012-01-08
  • 1970-01-01
  • 2015-10-08
  • 2013-03-08
  • 2014-08-11
  • 2013-12-24
相关资源
最近更新 更多