JSP/Servlet | サーブレット(Servlet) | サーブレットの基本コード

それではサーブレットの基本を見ていこう。サーブレットとは基本的にJavaクラスである。当然といえば当然だが、Javaクラスを書ければよいだけである。何か特別なものではない。

では、サーブレットクラスはどのように書かれるのかを見てみよう。基本コードは次のとおりである。

import javax.servlet.http.*;
 
@SuppressWarnings("serial")
public class クラス名 extends HttpServlet {
     
    public void doGet(HttpServletRequest request, 
            HttpServletResponse response)
            throws IOException {
 
        ...ここにGET処理を書く...
 
    }
 
    public void doPost(HttpServletRequest request, 
            HttpServletResponse response)
            throws IOException {
 
        ...ここにPOST処理を書く...
 
    }
}

これがサーブレットの基本コードの構造である。ではポイントを整理する。

  1. クラスはHttpServletを継承する。
    サーブレットの基本になるのは、javax.servlet.httpパッケージに用意されているHttpServletクラスである。サーブレットはこのクラスを継承して作成する。

  2. 基本はdoGetとdoPostメソッド。
    クラスにほぼ必須項目として用意されるのはdoGetとdoPostメソッドである。これらはそれぞれHTTPメソッドであるGET/POSTでアクセスしたときに実行される。このうち一方、または両方が必ず用意される。どちらのメソッドもIOExceptionが発生する可能性があるため、throws IOExceptionを付けておく。

  3. HttpServletRequestでリクエスト情報を管理する。
    これらのメソッドには、2つの重要なオブジェクトが引数として渡される。1つはHttpServletRequestである。これはリクエスト情報、つまりクライアントがサーブレットにアクセスしてきたときの情報を管理するオブジェクトである。リクエストに関するさまざまな情報は、このオブジェクトのメソッドを呼び出して取得できる。

  4. HttpServletResponseでレスポンスを管理する。
    もう一つのオブジェクトがHttpServletResponseである。これはレスポンス情報、つまりサーブレットからクライアントへ返す情報を管理するオブジェクトである。クライアントへの出力なども、このHttpServletResponseからPrintWriterを取り出して書き出す。

Servlet 3.0のアノテーション

このほか、Servlet 3.0を使用する場合は、このサーブレットの公開アドレスをアノテーションで指定できる。このクラスの宣言部分、@SuppressWarningsがある場所に記述する。

@WebServlet(公開アドレス)

このような形である。たとえばhttp://OO/sampleのようなアドレスで公開するなら、@WebServlet("/sample")と書いておけばよい。これでサーブレットは指定したアドレスで自動的に公開される。

2.5の場合、アノテーションは使用できない。別の設定ファイルを指定する必要がある。これについては続けて説明する。

web.xmlにサーブレット情報を登録する

Servlet 3.0を使用しているなら、これでサーブレット作成は終わりである。あとはデプロイするだけだ。しかし、GAEのようにまだ3.0をサポートしていない環境では、サーブレット本体のソースコードのほかに「サーブレット情報を記述した設定ファイル」を用意しなければならない。

それがweb.xmlというファイルである。一般的にはWebアプリケーションのWEB-INFフォルダー、外部からアクセスされない特殊なフォルダーに用意する。GAEプロジェクトでは基本的に自動生成されているはずである。

このweb.xmlには、Webアプリケーションに関するさまざまな設定情報が含まれる。サーブレットでは「サーブレットの名前」「使用するクラス」「公開アドレス」といった情報をここに記述しなければならない。

以下にサーブレット関連情報の基本形を整理しておく。

web.xmlの基本形

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
 
    <servlet>
        <servlet-name>サーブレット名</servlet-name>
        <servlet-class>サーブレットクラス</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>サーブレット名</servlet-name>
        <url-pattern>公開するアドレス</url-pattern>
    </servlet-mapping>
 
    ...その他のタグが続く...
 
</web-app>

web.xmlでは、<web-app>というルートタグの中に設定タグを記述する。サーブレット情報は次の2つのタグで提供される。

<servlet>タグ

サーブレットを登録するためのものである。この中には次の2つのタグが用意されている。サーブレットクラスは単にクラス名だけでなく、パッケージも含めて記述する。

  • <servlet-name> サーブレットの名前を登録する。
  • <servlet-class> 使用するサーブレットクラスを記述する。

<servlet-mapping>タグ

サーブレットURLマッピング、つまりどのアドレスで公開するかを設定するためのものである。この中には以下の2つのタグが用意されている。これでサーブレットを指定したアドレスで公開できる。

  • <servlet-name> サーブレット名を指定する。
  • <url-pattern> 公開するアドレスを記述する。

これらのタグにより、作成されたサーブレットクラスが指定されたアドレスで公開される。何度も説明したが、これはServlet 3.0以前の場合に必要である。3.0以上ではアノテーションで指定すれば不要な設定である。

ちなみに、web.xmlにはこのほかに<welcome-file-list>というタグもある。これはURLパス、つまりファイル名を指定せずにアクセスしたとき、ディレクトリ内のどのファイルを表示するかを指定するものである。これはなくても、別にWebアプリケーションへ影響を与えるものではない。