- オプション 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 と互換性があるはずです。