ファイルをダウンロードする場合には、JSPと出力ストリームが競合するため、JSPは使用できません。そのため、サーブレットを作成して、サーブレットからダウンロードするようにします。
サーブレットは、UjiServletを継承して作成します。メソッドを作成する必要はありませんが、クラスローダがアプリケーションのJavaクラスをロード可能にするために、アプリケーションの中にサーブレットクラスを持つ必要があります。
package updown;
public class DownloadServlet extends com.fujitsu.uji.http.UjiServlet {
public DownloadServlet() {
}
}ダウンロードのための入力フォームでは、action="download"を追加します。ここで指定したdownloadはサーブレットの識別名で、任意に指定可能です。例ではダウンロードファイル名を固定にして隠し項目で作成しています。データBean updown.DownloadParamの作成については、一般的なWebcoordinatorアプリケーションと同じなので省略します。
<FORM action="download">
<INPUT name="uji.verbs" type="hidden" value="download">
<INPUT name="uji.bean" type="hidden" value="updown.DownloadParam">
<INPUT name="file" type="hidden" value="downloadfilename">
<INPUT name="download" type="submit" value="ダウンロード">
</FORM>ビジネスクラスでは、復帰値をvoidに代えてObjectとします。ダウンロードするファイルをMimeSource、File、InputStreamで返します。復帰値がMimeSource、File、InputStreamの場合は、ファイルとみなしてダウンロードを開始します。復帰値がStringの場合は、エラー等を表示するための画面のJSPファイル名とみなします。ビジネスクラスでsetResponseBean等の処理をしてuji:includeなどを記述した(uji:dispatchは書けません)JSPファイルを返すと、Webcoordinatorのアプリケーションに戻すことができます。
....
//
public Object download(DispatchContext context, DownloadParam dataBean)
throws FileNotFoundException {
String name = dataBean.getFile();
File file = new File("c:\\downloadarea", name);
InputStream is = new BufferedInputStream(new FileInputStream(file));
MimeSource ms = new MimeSource(is, name);
return ms;
}コマンドマップは一般的なWebcoordinatorアプリケーションと共用になります。
updown.DownloadParam;download=updown.UploadHandler.download
サーバに配置する場合はweb.xmlを編集し、サーブレットマッピングを定義します。web.xmlの詳細については、“Webアプリケーション環境定義ファイル(web.xml)”で説明します。以下はdownloadというサーブレットを定義するため、servlet、servlet-mappingを追加しています。
<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>updown.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>download</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
</web-app>