機能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ネッ♪