4

Jboss7.1を使用してJavaコードから画像などのリソースをロードするにはどうすればよいですか?

これは、Jboss4で機能するために使用されました。

this.getClass().getClassLoader().getResourceAsStream("/myapp/includes/images/image1.png");

これでnullが返されます。

Jboss7を使用してJavaコードにリソースをロードするためのベストプラクティスは何ですか?

私はいくつかのテストを行いました:

URL url = this.getClass().getResource("");
System.out.println(url);
url = this.getClass().getResource("../../../");
System.out.println(url);
url = this.getClass().getResource("../../../../");
System.out.println(url);
url = this.getClass().getResource("../../../../../");
System.out.println(url);
url = this.getClass().getResource("includes");
System.out.println(url);

13:33:49,143 INFO  [stdout] (http--127.0.0.1-8080-1) vfs:/C:/Eclipse/apps/jboss-as-7.1.1.Final/standalone/deployments/my-ea.ear/my-web.war/WEB-INF/classes/com/xxx/yyy/beans/jsf/
13:33:49,144 INFO  [stdout] (http--127.0.0.1-8080-1) vfs:/C:/Eclipse/apps/jboss-as-7.1.1.Final/standalone/deployments/my-ea.ear/my-web.war/WEB-INF/classes/com/xxx/
13:33:49,150 INFO  [stdout] (http--127.0.0.1-8080-1) jar:file:/C:/Eclipse/apps/jboss-as-7.1.1.Final/modules/javax/activation/api/main/activation-1.1.1.jar!/com/
13:33:49,151 INFO  [stdout] (http--127.0.0.1-8080-1) file:/C:/Eclipse/apps/jboss-as-7.1.1.Final/modules/sun/jdk/main/service-loader-resources/
13:33:49,152 INFO  [stdout] (http--127.0.0.1-8080-1) null
4

3 に答える 3

2

メソッドは、クラスパスのルートからのパスthis.getClass().getClassLoader().getResourceAsStream("path")を処理しています。WAR では、これは通常andです。WEB-INF/classesWEB-INF/lib

パスWebContent/includes/images/は、WAR ファイルのルート内にあるようです (これはクラスパスではありません)。だからあなたはできる

  • WAR ファイルのルートへのパスを処理する(こちらgetResourceAsStreamを参照)の使用。ServletContext
  • すべてのイメージを追加の JAR (例: my-app.resources.jar) にパッケージ化し、使用します。ClassLoader.getResourceAsStream()
  • 画像をクラスパスに移動します (上記を参照)。
于 2012-06-01T10:33:32.883 に答える
1

JBossコミュニティウィキに記載されているように(jboss-deployment-structure.xmlファイルを使用せずに):

  1. 構成ファイルのモジュールを作成します(jboss-as-7/modules/com/yourcompany/configuration/main/module.xml):
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mycompany.configuration">
    <resources>
        <resource-root path="."/>
    </resources>
</module>
  1. モジュールにプロパティを追加します。
jboss-as-7/
   modules/
      com/
         yourcompany/
            configuration/
               main/
                 module.xml
                 settings.properties
                 other-settings.xm
  1. エントリCLASSPATHを使用してモジュールを追加します。MANIFEST.MF
Manifest-Version: 1.0
Dependencies: com.mycompany.configuration
  1. CLASSPATHからプロパティファイルをロードします。
InputStream settingsStream = 
  getClass().getClassLoader().getResourceAsStream("settings.properties");

というモジュールフォルダを作成しcom/mycompany/main、そこにすべての画像を追加する必要がありました。したがって、これは少なくともWARの範囲内ではありますが、WARの範囲外にありますJBOSS_HOME。次に、次を使用して画像を読み込むことができます。

URL imgUrl = this.getClass().getClassLoader().getResource("myimage.jpg");
于 2012-11-02T12:01:06.790 に答える
0

JBOSS 7 でのクラスのロードは、JBOSS モジュール プロジェクトに基づいています。以前のバージョンのロードはすべて階層的に行われます。

以前のバージョンの JBOSS では、run.sh/run.bat を変更することで、すべてのアプリ プロパティを含む外部フォルダーを classpath 属性に配置/指定できました。

ただし、JBOSS 7 ではロードが JBOSS モジュール プロジェクトに基づいているため、外部プロパティの構成が異なります。

以下の 2 つの方法で、JBOSS 7 のプロパティ ファイルの設定/読み込みを試すことができます。

  1. アプリに必要なすべてのプロパティ ファイルを含む jar を準備します。あなたの戦争/耳でこの瓶を使用してください。

    次に、以下のコードを使用して、この jar の任意のプロパティ ファイルをロードできます。

    InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName) ;

  2. JBOSS 7 で外部プロパティ ファイルを指定するために必要な変更は、コミュニティ リンクhttps://community.jboss.org/wiki/HowToPutAnExternalFileInTheClasspathで入手できます。このリンクに従って変更を行うと、デプロイが機能します。JBOSS 7 で設定した後、以下のコードを使用してプロパティをロードする必要があることを確認してください。

    InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("xyz.properties");

于 2013-07-26T04:47:44.890 に答える