ファイルのダウンロード


ボタンを押下するとファイルをダウンロードするサンプル



download.jsp

<html>

<script language='javascript'>
function fncDownLoad(){
    document.form1.submit();
}
</script>


<form name ="form1" action="/harada/DownLoad" method="post">
<body>

  ダウンロードはこちら↓<br>
  <input type='button' value='download' onclick='fncDownLoad()'/>

</body>
</form>
</html>


actionにはsubmitに送信されるサーブレットを指定する。
methodにはpostまたはgetを指定する。postの場合にはサーブレットのdoPostメソッド、getの場合はdoGetメソッドが呼び出される。




DownLoad.java

package harada;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class DownLoad extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {

        RequestDispatcher rd 
         = req.getRequestDispatcher("./jsp/download.jsp");
        rd.forward(req, res);

    }

    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {

        try{

            // ダウンロードするファイルを取得
            FileInputStream fi = new FileInputStream("c:\\test\\data.xml");
            byte[] b = new byte[fi.available()];
            for (int i = 0; i < b.length; i++)
            b[i] = (byte)fi.read();

            //ヘッダにattachmentを設定
            res.setContentType("application/octet-stream; charset=Shift_JIS");
            res.setHeader("Content-Disposition","attachment; filename=\"出力ファイル名\"");
            res.setContentLength(b.length);

            ServletOutputStream os = res.getOutputStream();
            os.write(b);
            os.close();

            fi.close();

        }catch(Exception e){
            e.printStackTrace();
        }

    }

}


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <servlet>
    <servlet-name>DownLoad</servlet-name>
    <servlet-class>harada.DownLoad</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DownLoad</servlet-name>
    <url-pattern>/DownLoad</url-pattern>
  </servlet-mapping>
</web-app>

アプリ起動のURL

http://localhost/harada/DownLoad