サーバ側の準備

広告

では今度はサーバ側で動作するプログラムをの方を作成していきます。

FileUploadの仕組みを使う前に、サーバ側ではサーブレットを使ってプログラムを記述していきますので、ベースとなる部分を先に作成して動作確認をしておきます。

※サーブレットについては『サーブレット入門』を参照して下さい。

まず今回のWebアプリケーション全体のパスを「upload」とし、ファイルの置き場所を「d:¥servlet-sample¥upload」以下に置くようにします。そしてこのディレクトリの中に「WEB-INF」ディレクトリを作成し、さらに「WEB-INF」ディレクトリの中に「classes」ディレクトリを作成します。

ディレクトリ構成

次にコンテキストファイルを作成します。Webアプリケーションのパスが「upload」ですのでコンテキストファイル名は「upload.xml」とします。中身は下記のようになります。

upload.xml

<Context path="/upload"
docBase="d:/servlet-sample/upload"/>

作成したコンテキストファイルは「d:¥tomcat¥Tomcat 5.5¥conf¥Catalina¥localhost¥」に設置します(ご自分の環境に合わせて変更して下さい)。

コンテキストファイルの設置

次に「web.xml」を作成します。今回は呼び出し方を記述するだけの簡単なものです。

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<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>uploadtest</servlet-name>
        <servlet-class>UploadTest</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>uploadtest</servlet-name>
        <url-pattern>/ultest</url-pattern>
    </servlet-mapping>

</web-app>

今回作成するサーブレットのクラス名を「UploadTest」とし、このサーブレットを呼び出す場合のURLパターンは「ultest」としました。もしサーブレットを単独で呼び出す場合には「http://localhost:8080/upload/ultest」で呼び出せることになります。(今回はGETではなくPOSTに対応したプログラムですので、実際にはブラウザから直接呼出しはできません)。

作成した「web.xml」ファイルを「d:¥servlet-sample¥upload¥WEB-INF¥」ディレクトリに配置します。

web.xmlの設置

次にサーブレットのプログラムです。取りあえず動作テストだけですので、「FileUpload Test」とだけ表示されるものを作っておきます。

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

public class UploadTest extends HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();

    request.setCharacterEncoding("Shift-JIS");

    out.println("<html>");
    out.println("<head>");
    out.println("<title>Upload Test!</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h1>FileUpload Test</h1>");
    out.println("</body>");
    out.println("</html>");
  }
}

上記のファイルを適当なディレクトリに「UploadTest.java」として保存しコンパイルを行います。この段階ではまだJakarta Commons FileUploadを使っていませんので、通常のサーブレットと同じく「servlet-api.jar」にだけクラスパスが通っていれば大丈夫です。

コンパイル

コンパイルが終わりましたら作成されたクラスファイルを「d:¥servlet-sample¥upload¥WEB-INF¥classes¥」ディレクトリに配置します。

クラスファイルの設置

ではクライアントから呼び出してみます。まず『クライアント側の準備』で作成したHTMLファイルを「uploadtest.html」として用意します。

uploadtest.html

<html>
<head>
<meta http-equiv="Description" content="HTMLページの作成方法です" />
<title>FileUpload</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="/upload/ultest">
ファイル:
<input type="file" name="filename" size="30" />
<input type="submit" value="アップロード" />
</form>
</body>
</html>

まだサーバ側では何も処理は行いませんが、フォームの送信先として先ほど作成したサーブレットを呼び出すようにしていますので、「アップロード」ボタンを押すと画面に「FileUpload Test」と表示されるはずです。

作成したHTMLファイルを「d:¥servlet-sample¥upload¥」に配置します。

HTMLファイルの設置

ではブラウザから「http://localhost:8080/upload/uploadtest.html」と呼び出して下さい。

HTMLファイルの表示

そして「アップロード」ボタンをクリックします。

サーブレットの呼び出し

上記のように表示されれば無事事前テストは終了です。

では次のページから、クライアントから送られてくるファイルの処理をサーブレットに追加していきましょう。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)