機能SAMPLE.7 「EzServlet/ダウンロードする方法」


今回は、ダウンロードの方法について説明します。
記述の仕方は、いたって単純!!! ダウンロードしたい内容(ファイル)を、OutputStreamにwrite系メソッドでを利用して出力すればOK!!!
OutputStreamは、EzRqsponseのgetOutputStreamメソッドで取得します、


POINT!
通常の「HttpServletResponse」のgetOutputSreamとの大きな違いは、OutputSreamを取得した後(getOutputSreamを呼び出した後)でも、OutputSreamが利用されない限りは、
画面(HTML)を出力する事が可能な点にあります。


以下のHTMLを例に説明します。ファイル名は「Hoge.html」です。


<html>
<head>&/head>
<body>
<form method="POST">
<input type="button" name="download" value="ダウンロード">
<br>&br>
<tg:out name="error">&/tg>
</form>
</body>
</html>


DTOは以下の様になります。

public class Hoge implements Serializable {

   /** Hogeに対応するコントロラークラスを保持する属性です */
   public static final Class CONTROLLER_CLASS = HogeController.class;

   /** ダウンロードするデータが存在しなかった場合のエラーメッセージ */
   public String error;

}


CONTROLLERクラスは以下の様になります。

public class HogeController {

   /** レスポンス */
   public EzResponse response;

   /** 「ダウンロード」ボタンが押された時に呼び出されるメソッドです。*/
   public void download(Hoge hoge) {
      // レスポンスより、OutputStreamを取得します。
      OutputStream out this.response.getOutputStream();
      // BLにOutputStreamを受け渡し、戻り値としてresul(ダウンロードデータの有:true,無:false)
      // を取得します。
      … ここに、ダウンロードするロジックを記述します。
      if(result) {
         return;
      }
      // エラーメッセージをセットします。
      hoge.error = "データが存在しません";
      // 表示するHtmlのDTOをセットします。
      response.setPage(hoge);
   }
}

POINT!!!でも、記述しましたが、Controllerを見ていただければ、その意味が分かると思います。
Controllerの最初で、ダウンロードするデータの有無に関係なく、OutputStreamを取得しています。


ダウンロードの機能は、その後のロジック(サービスクラス等)に任せ、Controllerは、ダウンロードデータが無かった場合の画面遷移のロジックのみ記述されています。
地味ですが、意外と便利な機能かも…(^^)


つまり、ロジック(サービスクラス等)で、ダウンロード・ファイルをjava.util.Fileで作成する必要がなくなりますね。


超かーんたーん(o^∀^)oネッ♪