1

I have written a java Servlet web application, using NetBeans 7.2.1. The program have some jar file libraries that I have attached to the project. The application runs fine using NetBeans and Apache Tomcat 7.0.27.

My problem is that some of the jar file libraries that I am using in the project, need to access to some folders and files. I put these folder and files on the same directory as the whole NetBeans project is. but I got this exception:

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

So I used these codes to find out where should I put them:

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

So I figured out that the current working directory is:

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

My question is that how can I set different directory address for each web application? I have many web applications and some of them use the same resource file names. I can't just put all of them in one directory.

Please note that I don't have access to the source code of jar files to change the. I just need a way to set the absolute path that the jar files use.

I have the same problem when I put the WAR file on the unix server. The extracted WAR file is in this location on the server:

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

But I figure I should put the resource folders and files in this path (moosavi3 is my username!):

/home/moosavi3

How can I change the path?

4

2 に答える 2

1

作業ディレクトリは、java.[exe,bin] が起動されるディレクトリです。bin ディレクトリは tomcat 起動スクリプトがある場所だと思いますか? jar がすべてこの作業ディレクトリを使用している場合、異なる Web アプリに異なる作業ディレクトリを持たせる方法はないと思います。それらはすべて、同じ作業ディレクトリから同じ jvm (java.exe) にロードされます。

作業ディレクトリは、バイナリが開始されるディレクトリであり、変更できる任意の値ではありません。

私は、これらの jar ファイルがスタンドアロン アプリケーションとして実行されることを意図しており、アクセスしようとしているファイル システム リソースがそれ自体と同じ場所にあることを期待していると考えています。

jar から正しいファイル パス解決が得られるように、すべてのファイル システム リソースを java.exe の場所に移動する必要があります。

于 2013-10-29T21:12:20.277 に答える
0

標準サーブレット プロジェクトでは、プロジェクト ルートの下の「WEB-INF/lib」ディレクトリに外部ライブラリを配置する必要があります。Google で「サーブレット ディレクトリ構造」を検索し、詳細について独自の調査を行うことができます。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 に答える