サーバーのファイルをクライアントにダウンロードすることができます。 ダウンロードされたファイルは、ブラウザの機能によりファイルの保存ダイアログが開いたり、 ブラウザ内で表示されたりします。
例として、以下のような画面を作成します。
"ダウンロード"ボタンを押すと、クライアント側のファイル保存ダイアログが出力されます。指定したフォルダへファイルが保存されます。
以下の3つの定義が必要です。
定義場所 | 定義内容 |
---|---|
1. 入出力ページ(JSP) | リクエストの送信先の指定と、受信するボタンの追加 |
2. ビジネスロジック | サーバーから送信するファイルの準備 |
3. サーブレット | ブラウザからのリクエストを受信するためのサーブレットを追加 |
1. 入出力ページ(JSP)
ダウンロードを依頼するリクエストの送信先(サーブレット)の指定と、ダウンロードを開始するためのボタンを作成します。
以下の2つの定義を追加します。
1.1 リクエストの送信先の指定
uji:formタグのactionアトリビュート属性にリクエストの送信先となるサーブレットを指定します。この例では"download"というサーブレットを指定しています。
この指定は、“3.2 環境ファイルの編集”の<url-pattern>の指定と対応しています。
<uji:form method="post" name="mainForm" action="download" beanId="body" beanCls="upfile.BodyBean" verbs="dwload" >
....
</uji:form>
1.2 ダウンロードボタンの追加
ダウンロードを開始する送信ボタンをINPUTタグで作成します。 この例ではボタンを押すと"dwload"というコマンドを発行しています。コマンドは、INPUTタグのnameアトリビュートに指定しています。
<uji:form method="post" name="mainForm" action="download" beanId="body" beanCls="upfile.BodyBean" verbs="dwload" > .... <INPUT type="submit" name="dwload" value="ダウンロード">
最終的に作成されるJSPは以下のようになります。
<%@ page contentType="text/html; charset=shift_jis" %> <%@ taglib uri="uji-taglib" prefix="uji" %> <uji:useBean id="body" cls="upfile.BodyBean" request="true" /> <uji:form method="post" name="mainForm" action="download" beanId="body" beanCls="upfile.BodyBean" verbs="dwload" > <uji:controlState/> <INPUT type="submit" name="dwload" value="ダウンロード" > </uji:form>
2. ビジネスロジック
サーバーからクライアントへ送信するファイルを準備します。
ダウンロードを開始するコマンドを処理するメソッドは、Object型を返却する必要があります。
この例では、サーバーの "download.zip"ファイルをクライアントへ"download.zip"というファイル名で送信しています。
public Object dwload(DispatchContext context, upfile.BodyBean dataBean) { // 送信するサーバーのフォルダを求めます。 // ここでは、アプリケーションの配置と同じフォルダとします。 String name = "/"; if(context instanceof HttpDispatchContext) { ServletContext svc = ((HttpDispatchContext)context).getServletContext(); name = svc.getRealPath(name); } // 送信するサーバー上のファイル名を決定します。 // ここでは、"download.zip"とします。 File filename = new File(getRealFolder(context), "download.zip"); FileInputStream is=null; try { is = new FileInputStream(filename); } catch(Exception e) { e.printStackTrace(); } // サーバーから送信するファイルと、クライアントで受け取るファイル名を指定します。 com.fujitsu.uji.util.MimeSource mimesource=null; mimesource = new com.fujitsu.uji.util.MimeSource(is,"download.zip"); mimesource.setContentType("application/octet-stream"); return (mimesource); }
3. サーブレット
ブラウザからのリクエストを受信するためのサーブレットを追加します。
以下の2つの処理を追加します。
3.1 サーブレットの追加
サーブレットはcom.fujitsu.uji.http.UjiServletクラスを継承します。
コンストラクタ以外の処理は必要ありません。
この例では、サーブレットを"upfile.DownloadServlet"とします。
package upfile; public class DownloadServlet extends com.fujitsu.uji.http.UjiServlet { public DownloadServlet() { super(); } }
3.2 環境ファイルの編集
サーブレットを呼び出せるようにweb.xmlを編集し、サーブレットマッピングを定義します。
ここでは、「3.1 サーブレットの追加」で作成した upfile.DownloadServletクラスを、"download" のURLで呼び出せるようにします。
<web-app xmlns=http://java.sun.com/xml/ns/j2ee xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd version="2.4"> <servlet> <servlet-name>download</servlet-name> <servlet-class>upfile.DownloadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>download</servlet-name> <url-pattern>/download</url-pattern> </servlet-mapping> </web-app>
関連項目