Tomcat 能够上传 jar 文件和相对路径的服务器

Tomcat Server with ability to upload jar-files and relative paths

我有一个 Tomcat 服务器 运行ning。并且可以在 Web 界面中上传 jar 文件。现在服务器能够调用上传的 jar 文件的方法。问题是,我的 jar 文件中有一些文件的相对路径。如果我在本地 运行 我的 jar 文件没问题,但在服务器上路径不再适合。

jar文件上传的地方是通过这个给出的:

arg0.getServletContext().getRealPath(File.separator) + "WEB-INF" + File.separatorChar + "lib" + File.separatorChar;

在我的 jar 文件中,我无法选择获取 Servlet 上下文,因为它是 jar 文件中的一个封闭环境。

知道如何访问这些文件吗?

坦克

您不应将 Java 应用程序存档(JAR、WAR、EAR、whatevAR)中的资源视为磁盘文件系统资源。您应该像对待类路径资源一样对待它们。

简而言之,这是错误的,因为它取决于 JVM 启动时的 "current working directory",而您无法从 Java 应用程序内部控制它:

InputStream resource = new FileInputStream("file.ext"); // Relative to CWD.

其中一个是正确的,这取决于您是否希望允许用户通过将另一个资源放在 JAR 之外具有更高类加载优先级的完全相同的 FQN 上来覆盖 JAR 捆绑资源:

InputStream resource = getClass().getResourceAsStream("file.ext"); // Relative to class' package.
InputStream resource = Thread.currentThread().getContextClassLoader().getResourceAsStream("file.ext"); // Relative to classpath root.

另请参阅:

  • getResourceAsStream() vs FileInputStream
  • Where to place and how to read configuration resource files in servlet based application?