2011-07-04 27 views
1

私はweb.xml内の場所のみをハードコードしていますが、配備中に毎回web.xmlを変更する必要があります。サーブレットにファイルの場所を伝える適切な方法は何ですか?

プロジェクト内にフォルダを作成し、その下にあるフォルダとファイルを検索するようにサーブレットに指示できますか?あなたがFileオブジェクトを必要としない場合

<context-param> 
     <param-name>ipTable</param-name> 
     <param-value>E:\Workspace\Eclipse_Workspace\BpsPdfBill\WebContent\WEB-INF\ipTable.txt</param-value> 
</context-param> 
+1

Javaリソースを代わりに使用することはできません(テキストファイルをクラスの横に配置するか、クラスの横にあるサブディレクトリに配置することはできません)。それはあなたのWebContentフォルダ内のファイルよりも理にかなっています... –

+0

あなたはそれを詳しく説明できますか?私はjavaのためにちょうど新しいです。ありがとう。 – lamwaiman1988

+0

関連:http://stackoverflow.com/questions/6097814/how-to-know-the-path-of-the-webcontainer-using-java – BalusC

答えて

2

、あなたはServletContext.getResource(String path)を使用することができます。 path引数は '/'で始まり、コンテキストルートからの相対パスでなければなりません。このメソッドはURLを返します。これを開いてファイルの内容を読み取ることができます。

Fileオブジェクトへのポインタを取得する標準的な方法はないと思います。あなたは常にシステムプロパティを使うことができますが、それはおそらくweb.xmlに入れるよりも良いことではありません。

UPDATE

あなた本当には、ファイルの内容だけFileオブジェクトが必要とされていない場合、あなたが行うことができます物事のカップルがあります。ファイルの場所がどのように変化するかによって異なります。

展開先のサーバーに基づいてファイルの場所が変更されても、各サーバーに同じ場所が残っている場合は、Webコンテナの起動スクリプトにシステムプロパティを追加するだけです。もちろん、どのようにこれを行うのかはコンテナによって異なりますが、ドキュメンテーションの中でどのように見つかるかを知ることができます。

別のプロパティファイル、たとえばfile.propertiesにファイルの場所を置き、このファイルを生成または更新し、WEB-INFディレクトリに配置する展開プロセスを変更することもできます。次に、このプロパティファイルをServletContext.getResourceAsStream()と読み、パスを取得し、Fileをインスタンス化することができます。

+0

私は実際にファイルオブジェクトが必要です。 – lamwaiman1988

+0

なぜ 'ファイル'が必要ですか?何のためにそれが必要ですか?それの 'InputStream'を取得するには?それから、代わりに 'ServletContext#getResourceAsStream()'メソッドを使用してください。 – BalusC

0

Try getServletContext().getResourceAsStream(filename)

0

私のサーブレットからファイルのOSパスが必要な理由は2つあります。あなたの目標が私のものと一致すれば、これが答えかもしれません。

  1. サーバーの外部にある他のプロセスは、そのファイルをWebアプリケーションと共有するために読み書きする必要があり、そのファイルはサーバーのURLでアクセスできません。
  2. サーバーのURLからアクセスできる一時的な場所にグラフを動的に生成する必要があります。

これを実現するには、既知のURLの下にあるディレクトリにファイルを置きます。 URLが/data/asdf.txtであるとします。これをweb.xmlのパラメータとして保存することもできます。それから私は、OSのパスを取得するために

にServletContext.getRealPath(/data/asdf.txt)

を使用しています。 web.xmlでparamをハードコーディングしても、ファイルのパスはデプロイメントとともに移動します。

URLアクセスからフォルダを非表示にするには、Tomcatにフォルダの先頭に「〜」を付けます。私はキャラクターが "〜"だと思いますが、思い出すことはできません。あなたはそれを試してみる必要があります。その文字をプレフィックスとして使用すると、サーバーはそのURLでコンテンツを提供することができませんでした。プレフィックスを見つけるために私の過去のコードを掘るとき、私は答えを更新するために戻ってくるかもしれません。

もちろん、フォルダを非表示にするもう1つの方法は、WEB-INFに配置することです。

関連する問題