1

これは、Glassfish を使用すると非常に簡単です。

unix での絶対パスを考えてみましょう/apps/static_content/。Glassfish を使用して、単純に代替ドキュメント ルートを次のように定義します。

<property name="alternatedocroot_1"
  value="from=/static/* dir=/apps/static_content/"/>

画像やその他のデータ ファイルをアップロードすると、それらを/apps/static_contentディレクトリに保存でき、JSF ページ内で静的コンテンツを通常どおり次のように表示できます。

<p:graphicsimage value="/static/external_web_app.png"/>

JBoss AS7で同じ機能を実現する必要があります

これどうやってするの?

4

3 に答える 3

0
  • オプション 1:別の展開された .war ファイルをデプロイして、それを静的コンテンツに使用することができます

あなたの場合: ..../jboss-7/standalone/deployments/が存在する必要がありますstatic.war/

したがって、アップロードはこのディレクトリに入り、コンテンツは通常の方法で返されます。

詳細については、JBoss AS 7 で展開された war ファイル (解凍された war) をデプロイすることは可能ですかを参照してください。

BalusC が指摘したように: データがアップロードされたらすぐに、このディレクトリを再デプロイ/削除しないでください。このディレクトリの定期的なバックアップが必要です。

私の知る限り、これは構成/セットアップのみで行う唯一の可能性です。


  • オプション 2: name で別の webapp を作成しますstatic.war静的コンテンツをストリーミングするサーブレットを追加する

この方法では、以下のファイル システムにファイルをアップロード/保存する必要はありませ../deployments/ん。任意のディレクトリにすることができますが、追加のサーブレットが必要になるため、プログラムで解決できます。

単純なストリーミング サーブレットは次のようになります (ストリーミングのみ - 認証なしなど)。

public class DownloadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

        final File dir = new File("/var/cms/storage/");
        final String start = "/static/";
        final String relativePath = request.getRequestURI().substring(
                request.getRequestURI().indexOf(start) + start.length());
        final File file = new File(dir, relativePath);
        final String ct = URLConnection.guessContentTypeFromName(file.getName());
        response.setContentType(ct);

        final InputStream is = 
            new BufferedInputStream(new FileInputStream(file));
        try {
            final boolean closeOs = true;
            org.apache.commons.fileupload.util.Streams.copy
                    (is, response.getOutputStream(), closeOs);
        } finally {
            is.close();
        }
    }

すべての URL をこのサーブレットにマップします。

<servlet-mapping>
    <servlet-name>DownloadServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

名前static.war/static/Web コンテキストを提供するため、コード内の URL と互換性があるはずです。

于 2013-08-07T07:16:19.420 に答える