Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java JSP/Servlet

JSP/Servletでcsvをダウンロードする機能を作成する手順

投稿日:2021年3月15日 更新日:

<目次>

(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) 実現方針

方針として、JSPServletの画面からのダウンロードを可能にするには、通常のcsv出力ではなく、「HTTPレスポンス」に対してデータ書き込みをする必要があります。
 
具体的にはHTTPレスポンスの情報をつかさどる「HttpServletResponse」クラスの「getWriter()」メソッドを使用して書き込みを行います。
 

(1-1) STEP1:Servletの追記

Servletは「csvの出力機能そのもの」になります。HTTPレスポンスの値をセットする事で、csv出力が可能となります。

①「Content-Disposition」ヘッダーの設定

レスポンスヘッダーの「Content-Disposition」という項目の値を「attachment」にセットする必要があります。そしてfilename属性にデフォルトのファイル名を指定します。

(例)HTTPレスポンスでの見え方
Content-Disposition: attachment; filename="fname.ext"

 

(例)Servlet上の記述
response.setHeader("Content-Disposition", "attachment; filename=\""+filename+"\"");

 

(図112)①HTTPリクエストヘッダーのContent-Disposition

②「Content-Type」ヘッダーの設定

レスポンスヘッダーの「Content-Type」という項目の値を「text/csv」にセットする必要があります。これにより、ブラウザに対して「これは何の種類のファイルで、何のアプリで開く必要がある」という指示を出す事ができます。Windowsの場合は通常Excelが割り当てられています。

 

(例)HTTPレスポンスでの見え方
Content-Type: text/csv;charset=UTF-8

 

(例)Servlet上の記述
response.setHeader("Content-Type", "text/csv; charset=UTF-8");

 

(図112)②HTTPリクエストヘッダーのContent-Type

目次にもどる

(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がダウンロードされます。

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

JavaでJSON配列から値を抽出する方法+郵便番号検索APIのサンプルプログラムも紹介

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) JSON配列から値抽出する方法  (2-1) JSON配列のデータの構造例  (2-2) JSON配列のデータ …

GitHubのWebAPIをコールしてユーザー情報を取得するサンプルプログラムの解説+エラー対応も2例紹介

(0)目次&概説 (1) 目的  (1-1) 記事の目的 (2) APIの概要  (2-1) APIとは?  (2-2) Web APIとは?  (2-3) Web APIの様々な呼び方   (2-3 …

セッションIDとは?JSPでsessionを保存&取得するサンプルプログラムと代表的なメソッド紹介

(0)目次&概説 (1) セッションとは  (1-1) 概要  (1-2) サンプルプログラム   (1-2-1) 概要&画面遷移   (1-2-2) HelloSession.jsp   (1-2- …

TwitterAPIのJavaでの使い方をご紹介~【入門編】Twitter4j導入~ハッシュタグでツイート検索するまで~

<目次> (1) TwitterAPIのJavaでの使い方をご紹介  (1-1) STEP0:前提条件  (1-2) STEP1:ライブラリ(jar)のダウンロード  (1-3) STEP2:アプリケ …

JSP/Servletで必須入力チェックを実装する方法+サンプルプログラムや操作動画も紹介

<目次> (1) JSP/Servletで必須入力チェックを実装する方法  (1-1) 必須入力チェックの概要   (1-1-1) 全体の処理フロー   (1-1-2) 必須入力チェック部分の処理フロ …

  • English (United States)
  • 日本語
Top