(1) JSP/Servletでcsvをダウンロードする機能を作成する手順
(1-0) 実現方針
(1-1) STEP1:Servletの追記
(1-2) STEP2:JSPの追記
(1-3) サンプルプログラム
(1) JSP/Servletでcsvをダウンロードする機能を作成する手順
通常のJavaプログラムでcsvを生成し、書き込みを行う方法は「こちらの記事」でご紹介させて頂きましたが、今回はそれをJSP/ServletでWebサイトを通じてダウンロードする方法をご紹介します。
この記事の手順に沿って進めていくと、最終的に次のような画面からボタンを押してcsvを押下する処理が可能となります。
(動画111)
また、本記事の手順を実施するに当たって、以下の項目を前提条件とします。
【前提条件】
①Eclipseで動的Webプロジェクトを作成済み(⇒作成手順)
②Servletの雛形を作成済み(⇒Servlet雛形の作成手順)
③JSPの雛形を作成済み(⇒JSP雛形の作成手順)
(1-0) 実現方針
(1-1) STEP1:Servletの追記
Servletは「csvの出力機能そのもの」になります。HTTPレスポンスの値をセットする事で、csv出力が可能となります。
①「Content-Disposition」ヘッダーの設定
レスポンスヘッダーの「Content-Disposition」という項目の値を「attachment」にセットする必要があります。そしてfilename属性にデフォルトのファイル名を指定します。
Content-Disposition: attachment; filename="fname.ext"
response.setHeader("Content-Disposition", "attachment; filename=\""+filename+"\"");
②「Content-Type」ヘッダーの設定
Content-Type: text/csv;charset=UTF-8
response.setHeader("Content-Type", "text/csv; charset=UTF-8");
(1-2) STEP2:JSPの追記
JSPはダウンロードを行うための「画面(View)」の役割を果たします。画面に「ボタン」や「リンク」を設置し、そこから先程作ったServletを呼び出す事で、画面を通じてのcsvダウンロードが可能となります。
①「ボタン」からダウンロードする例
ボタンを設定するには<input>タグのtype=”button”を指定します。クリック時の挙動を指定する「onclick」属性で「”location.href='[サーブレット名]’」を指定する事でサーブレットを呼び出す事ができます。
<input type="button" value="csvダウンロード" onclick="location.href='GenerateCsv'"><br />
②「リンク」からダウンロードする例
リンクを設置するには<a>タグを使い、href属性にはサーブレットの名前を「href=”[サーブレット名]”」のように指定します。
<a href="GenerateCsv">[Download csv link]</b> screen</a>
(1-3) サンプルプログラム
(1-3-1) JSP
(サンプルプログラム)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Download csv sample</title> </head> <body> <p>Download csv screen</p> ■ボタン型<br /> <input type="button" value="csvダウンロード" onclick="location.href='GenerateCsv'"><br /> <br /> ■リンク型<br /> <a href="GenerateCsv">[Download csv link]</b> screen</a> </body> </html>
(図131)①JSPプログラム
(図131)②画面表示
(1-3-2) Servlet
(サンプルプログラム)
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/GenerateCsv") public class GenerateCsv extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename = "sample.csv"; response.setHeader("Content-Type", "text/csv; charset=UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=\""+filename+"\""); PrintWriter out = response.getWriter(); out.append("Served at: ").append(request.getContextPath()); } }
(図132)
(図133)実行結果
ボタンorリンクをクリックするとcsvがダウンロードされます。