1

我使用 NetBeans 7.2.1编写了一个java Servlet Web 应用程序。该程序有一些我附加到项目中的 jar 文件库。该应用程序使用NetBeansApache Tomcat 7.0.27 运行良好。

我的问题是我在项目中使用的一些jar文件库,需要访问一些文件夹和文件。我将这些文件夹和文件放在与整个 NetBeans 项目相同的目录中。但我得到了这个例外:

Exception: java.lang.RuntimeException: java.io.FileNotFoundException

所以我用这些代码来找出我应该把它们放在哪里:

out.println("current directory: " + new File(".").getAbsolutePath());
out.println("current directory: " + System.getProperty("user.dir"));
out.println("current directory: " + getServletContext().getRealPath(("/")));

所以我发现当前的工作目录是:

C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.27\bin

我的问题是如何为每个 Web 应用程序设置不同的目录地址?我有许多 Web 应用程序,其中一些使用相同的资源文件名。我不能将它们全部放在一个目录中。

请注意,我无权访问 jar 文件的源代码来更改。我只需要一种方法来设置 jar 文件使用的绝对路径。

当我将WAR文件放在 unix 服务器上时,我遇到了同样的问题。提取的 WAR 文件位于服务器上的以下位置:

/data02/tools/Apache/Tomcat/apache-tomcat-6.0.37/webapps/BANNEROnline

但我想我应该把资源文件夹和文件放在这个路径中(moosavi3 是我的用户名!):

/home/moosavi3

如何更改路径?

4

2 回答 2

1

工作目录是 java.[exe,bin] 的启动目录。我假设 bin 目录是 tomcat 启动脚本所在的位置?如果罐子都使用这个工作目录,我不相信有办法让不同的网络应用程序有不同的工作目录,它们都从同一个工作目录加载到同一个 jvm (java.exe) 上。

工作目录是启动二进制文件的目录,它不是您可以更改的任意值。

我怀疑这些 jar 文件应该作为独立应用程序运行,并期望它们尝试访问的文件系统资源与它们自己位于同一位置。

任何文件系统资源都必须移动到您的 java.exe 的位置,以便您的 jar 可以产生正确的文件路径解析。

于 2013-10-29T21:12:20.277 回答
0

标准 Servlet 项目需要将外部库放在项目根目录下的 'WEB-INF/lib' 目录中。您可以在 google 上搜索“servlet 目录结构”并自行研究以获取更多信息。web应用程序之间的共享库可以放在tomcat根目录下的'lib'目录下,它们应该被tomcat jvm拾取。我的建议是保持依赖项项目的特定性,因为将来您可能需要在不同的项目中使用不同的版本。

更新:阅读 tomcat 文档的这个页面,它将准确解释项目的结构,以及如何添加将在所有 Web 应用程序之间共享的库:

http://tomcat.apache.org/tomcat-7.0-doc/appdev/deployment.html

更新 2:以下 Stackoverflow 链接解释了如何将静态文件添加到 Web 应用程序的几个选项,这些选项将在运行时可用。

https://stackoverflow.com/a/2161583/940754

更新 3:使用项目的清单添加到类路径的路径:

http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

于 2013-10-30T15:36:25.073 回答