1

.jksTomcat サーバーでデプロイされた残りの Web アプリケーションからファイルを読み取るにはどうすればよいですか? FileInputStreamファイルの読み取りに使用しています。現在、Web アプリケーションでファイルを読み取るために使用される相対パスの処理に問題があります。ファイルが下にあることはわかっていますWEB-INF/classes。を使用してファイルを読み取る最良の方法は何でしょうFileInputStream。私は使用を知ってclassLoaderいます。しかし、それはを返しますInputStream

4

3 に答える 3

2

FileInputStreamアプリケーションにバンドルされているリソースを読み取るために、ファイルへの直接アクセス ( ) を使用することはお勧めできません。その理由は、まさにあなたが経験しているような問題につながるからです。管理されたランタイム環境では、開発者は、リソースが実際に配置されているパスをほとんど制御できません。

サーブレットベースのアプリケーション (Tomcat を使用していると述べたように、使用しているアプリケーション) の場合、最善の方法はコンテキスト クラスローダーを使用することです。

Thread.currentThread().getContextClassLoader()

そこからリソースをロードし、InputStream. 言い換えれば、あなたは現時点で正しくやっているということです。使用しないでくださいFileInputStream。そうする絶対的な正当な理由がない限り、その場合、私は非常に驚くでしょう.

于 2013-02-20T02:25:36.023 に答える
1

EAR / WAR にバンドルされていないファイルにアクセスする最善の方法は、java.util.Properties を使用することです。jks ファイルのようなファイルは EAR にバンドルされることはなく、サーバーのドメイン フォルダーまたはサーバー ディレクトリ ( weblogic 、 websphere .) にあると確信しています。プロパティ ファイルは、サーバーがインストールされたディレクトリとは独立したファイルの場所に配置する必要があります。

これが私が考えることができる解決策です:

1. Initialize a Servlet with init-param in web.xml
2. The init-param can be the absolute file location  
   <param-name>porperies-file</param-name>
   <param-value>/usr/properties/abc.jks</param-value>
3. In the static block of the Servlet , load the properties file / jks 
   file and store it    in parameter

これは複雑に見えますが、多くのフレームワークでは、ResourceBundle ファイルなどのファイルを絶対パスで検索するオプションが提供されています。Spring の FileSystemResourceLoader のドキュメントを確認してください。

このようなプロセスの利点は、「jks」ファイルが変更された場合にサーバーを起動するだけでよいことです。プロパティ ファイルが EAR にある場合は、アプリケーションをデプロイしてからサーバーを再起動する必要があります。これも考慮してください。ファイルの鮮度をチェックするロジックを持つことができます。この場合、システムを再起動する必要はまったくありませんが、同期のロジックを少し追加する必要があります。

于 2013-02-20T03:43:59.903 に答える