提供された downloadServlet.java は、Efwフレームワークにおけるサーバー上のファイルをクライアントにダウンロードさせる専用のサーブレットです。

このサーブレットは、単一ファイルのダウンロードだけでなく、複数のファイルをまとめてZIP圧縮し、パスワード保護まで行う多機能なダウンロード処理を提供します。処理の連携は previewServlet と同様に、サーバーサイドJavaScript (efw.server.js) とセッションを介して行われます。


📦 downloadServlet.java の分析:ファイルダウンロード処理

1. 役割とメカニズム

2. 処理フロー (doGet)

A. ダウンロードオプションの取得とセッションクリア

  1. セッションから取得: ダウンロードに必要なすべてのオプション(ファイルパス、ZIPリスト、保存名、パスワード、ダウンロード後削除フラグなど)をセッションから取得します。
  2. 即時削除: 取得後、セキュリティを確保するため、すべての関連セッション属性を直ちに削除します。

B. ZIP圧縮処理 (条件付き)

if(attr_zip!=null&&!"".equals(attr_zip)){
    // ... 一時ZIPファイルを作成
    // ... FileManager.zip() を呼び出してZIPファイルを生成
    // ... attr_file を一時ZIPファイル名に設定
}

C. レスポンスヘッダーの設定

  1. デフォルトファイル名設定:
    • ZIPファイルの場合はデフォルトで "attachment.zip"
    • 単一ファイルの場合は、ファイルパスからファイル名を取得し、ダウンロードファイル名(attr_saveas)を設定します。
  2. MIMEタイプ: response.setContentType("application/octet-stream") を設定します。これは、ファイルタイプに関わらずブラウザにダウンロードダイアログを開かせる最も一般的なMIMEタイプです(previewServlettext/html と対照的)。
  3. Content-Disposition:
    • Content-Disposition: attachment; filename="..." ヘッダーを設定します。
    • ファイル名(attr_saveas)は、日本語などのマルチバイト文字に対応するため java.net.URLEncoder.encode でエンコードされます。
  4. Cookie設定: efw_Downloaded=OK というCookieを追加します。

D. ファイルの読み込みと送信

E. ダウンロード後のクリーンアップ

ダウンロードが完了した後、オプションに応じてリソースを削除します。

3. previewServletdownloadServlet の比較

項目 previewServlet.java downloadServlet.java
URL /previewServlet /downloadServlet
目的 ブラウザ内でのファイル内容のインライン表示 ファイルをクライアントのローカルへ保存させる。
MIMEタイプ ファイル固有のMIMEタイプを設定。 application/octet-stream を設定(強制ダウンロード)。
セキュリティ ファイルサイズ制限(10MB)。 パスワード付きZIP圧縮オプションを提供。
リソース管理 一時ファイル削除機能は特になし。 ダウンロード後のソースファイル削除 (deleteafterdownload) 機能と、一時ZIPファイルの確実な削除。

両サーブレットは、efw.server.js からセッションを介してファイルパスを受け取る共通のメカニズムを採用していますが、レスポンスヘッダーの設定とリソース管理のロジックが、それぞれの目的に応じて完全に異なっています。