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?
我有一个 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?