1

Java 1.5(1.5以降と互換性があります)でコンパイルされたアプレットアプリケーションを開発しています。これには、Javaパッケージと並行して配置されている同じjarにバンドルされているいくつかのリソースプロパティファイルが含まれています。

アプレットを介してそのリソースファイルにアクセスするたびに、アプレットがダウンロードされた場所からサーバーに要求が行われます。その後、jarからファイルを読み取り、以前と同じように機能しますが、サーバーがそれらのファイルを要求することは望ましくありません。

これが私のJavaコードがリソースファイルにアクセスする方法です。

ResourceBundle messages = ResourceBundle.getBundle("resources/properties/Messages", locale);

私は両方の方法でアクセスを試みました:

ResourceBundle messages = ResourceBundle.getBundle("resources.properties.Messages", locale);

どちらも同じ動作でした。

注:これらのリソースは、私のWebアプリではルーズリソースとして利用できません。

4

2 に答える 2

5

これらの詳細はサーバーログから取得しました。サーバーログで404と500の応答を分析していました。

プラグインがキャッシュされたリソースが最新であるかどうかをチェックしようとしているため、404(見つからない)および500(サーバーエラー)メッセージが予想さますそのためには、サーバーバージョンのリソースで最後に更新された時刻を確認する必要があります。

archive複雑な要因は、リソースがアプレットの属性で言及されているJarにあると予想されるcodebase、指定されたものと同じパス上の「緩いファイル」である可能性があることです。したがって、リソースがJarの次のパスにある場合:

/resources/properties/Messages_en_US.properties 

JVMもチェックします

${codebase}/resources/properties/Messages_en_US.properties 

だけでなく、各瓶。

それらを修正するには、codebase_lookupパラメーターを参照してください。このユースケースには次のものが必要です。

<param name='codebase_lookup' value='false' >

これは、クラスパスにルーズファイルとして保存されているリソースがなく、Jarのみが検索されることをJVMに通知します。404/メッセージが頻繁に報告されるのを停止する必要があり500ます(そのパラメーターを理解する新しいJREの場合)。

于 2012-12-07T03:56:19.367 に答える
0

Javaプラグインによるアプレットのキャッシュの内部の詳細についてはよくわかりませんが、アプレットが.jnlp記述子を使用している場合はdownload="eager"、記述子の<jar>要素に追加してみます。

ResourceBundleを.propertiesファイルではなくクラスとして定義してみることもできます。例えば:

package resources.properties;

import java.util.ListResourceBundle;

public class Messages
extends ListResourceBundle  {
    protected Object[][] getContents() {
        return new Object[][] {
            {"entry1", "Some message text"},
            {"entry2", "A different message"},
            // etc.
        };
    }
}

プロパティファイルと同様に、必要な数のロケールに対してプロパティファイルを定義できます。

package resources.properties;

import java.util.ListResourceBundle;

public class Messages_es
extends ListResourceBundle  {
    protected Object[][] getContents() {
        return new Object[][] {
            {"entry1", "Some message text in Spanish"},
            {"entry2", "A different message in Spanish"},
            // etc.
        };
    }
}

ResourceBundleサブクラスを定義する場合は、対応する.propertiesファイルを削除することをお勧めします。

于 2012-12-05T12:32:18.697 に答える