我使用NetBeans 7.2.1编写了一个 java Servlet Web应用程序。该程序有一些我已附加到项目的jar文件库。使用 NetBeans 和 Apache 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是我的用户名!):
/家庭/ moosavi3
如何更改路径?
答案 0 :(得分:1)
工作目录是启动java。[exe,bin]的目录。我假设bin目录是tomcat启动脚本的位置?如果jar都使用这个工作目录,我不相信有办法让不同的web-apps有不同的工作目录,它们都是从同一个工作目录加载到同一个jvm(java.exe)上的。
工作目录是启动二进制文件的目录,它不是您可以更改的任意值。
我怀疑这些jar文件意味着作为独立应用程序运行,并期望他们尝试访问的文件系统资源与他们自己位于同一位置。
任何文件系统资源都必须移动到java.exe的位置,以便从您的jar中获得正确的文件路径解析。
答案 1 :(得分:0)
标准Servlet项目要求将外部库放在项目根目录下的“WEB-INF / lib”目录中。您可以搜索谷歌的“servlet目录结构”并进行自己的研究以获取更多信息。 Web应用程序之间的共享库可以放在tomcat root下的'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