56

Web アプリケーション (WAR) を作成し、Tomcat にデプロイします。webappには、管理者が構成データを入力できるフォームのあるページがあります。このデータを DBMS に保存するのではなく、ファイル システム上の XML ファイルに保存したいと考えています。どこに置く?

アプリケーション自体がデプロイされているディレクトリ ツリーのどこかにファイルを配置したいと考えています。構成ファイルはWEB-INFディレクトリにある必要がありますか? それとも別の場所に置く?

また、ディレクトリの絶対パスを見つけるためにサーブレットで使用する Java コードは何ですか? それとも相対パスでアクセスできますか?

4

6 に答える 6

49

私たちがしているのは、サーバー上の別のディレクトリに配置することです (/config、/opt/config、/root/config、/home/username/config、または必要なものを使用できます)。サーブレットが起動すると、XML ファイルが読み取られ、そこからいくつかの情報 (最も重要なのは DB 接続情報) が取得されます。

なぜこれを一度やったのかと尋ねました。

すべてを DB に格納できればよいのですが、当然、DB 接続情報を DB に格納することはできません。

コードにハードコーディングすることもできますが、それは多くの理由で醜いです。情報を変更する必要がある場合は、コードを再構築して再デプロイする必要があります。誰かがあなたのコードまたは WAR ファイルのコピーを取得すると、その情報を取得します。

WAR ファイルに何かを入れるのはいいことのように思えますが、大幅に変更したい場合は、悪い考えになる可能性があります。問題は、情報を変更する必要がある場合、次に再デプロイするときにファイルが上書きされるため、WAR に組み込まれるバージョンで変更することを覚えていなかったものがすべて忘れられることです。

ファイルシステムの特別な場所にあるファイルは、私たちにとって非常にうまく機能します。大きな欠点はありません。別々に保存されているため、複数のマシンに異なる構成値が必要な場合に簡単にデプロイできます (WAR の一部ではないため)。

私が考えることができる他の唯一の解決策は、DBログイン情報を除くすべてをDBに保持することです。これは、JVM を介して取得される Java システム プロパティから取得されます。これは、上記の Hans Doggen によって言及された Preferences API のことです。私たちのアプリケーションが最初に開発されたときではなかったと思います。

構成ファイルにアクセスするためのパスは、ファイルシステム上の単なるファイルです。Web パスについて心配する必要はありません。したがって、サーブレットが起動すると、「/config/myapp/config.xml」(またはその他) のファイルを開くだけで、適切なものが見つかります。このパスをハードコーディングするだけでも、私には無害に思えます。

于 2008-09-18T20:15:24.000 に答える
16

WEB-INFは、構成ファイルを配置するのに適した場所です。サーブレットからディレクトリの絶対パスを取得するためのコードを次に示します。

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")
于 2008-09-18T20:19:45.050 に答える
9

WEB-INFに入れると、URL を介して直接アクセスしようとするユーザーから XML ファイルが隠されますWEB-INF

于 2008-09-18T20:29:48.660 に答える
6

アプリケーションの新しい展開で構成が上書きされるため、アプリケーションフォルダーには保存しません。

Preferences API を確認するか、users フォルダー (Tomcat を実行しているユーザー) に何かを書き込むことをお勧めします。

于 2008-09-18T19:57:34.977 に答える
3

これに対する答えは、その構成ファイルをどのように読み書きするかによって異なります。

たとえば、Spring フレームワークでは、XML 構成ファイル(または Java プロパティ ファイル) を使用できます。これらは、クラスパス (WEB-INF ディレクトリなど)、ファイルシステムの他の場所、またはメモリに保存できます。これに Spring を使用する場合、構成ファイルを保存する最も簡単な場所は WEB-INF ディレクトリにあり、Spring のClassPathXmlApplicationContextクラスを使用して構成ファイルにアクセスします。

繰り返しますが、すべてはそのファイルへのアクセス方法に依存します。

于 2008-09-18T19:57:38.597 に答える
1

カスタム構成の場合は、WEB-INF が適しています。ただし、一部のライブラリでは、構成を WEB-INF/classes に配置する必要がある場合があります。

于 2008-09-18T19:58:21.840 に答える