サーブレットJSPを学ぼう!!#4

サーブレットはJavaを使ってサーバサイドプログラムを作るための技術になります。

私たちはサーブレットの文法に従い、サーブレットクラスを開発することで、アプリケーションサーバ上でそれらを実行できるようになります。

サーブレットクラスはリクエストで実行され、その実行結果をHTMLで出力します。

出力されたHTMLは、アプリケーションサーバによってブラウザにレスポンスされます。

1. サーブレットクラスの作成ルール


サーブレットクラスは、通常のクラス同様にクラス定義をして作成します。

ただし、サーブレットクラスを定義するには、いくつか守らなければいけないルールがあります。

どのようにクラスを定義するか、基本的なサーブレットクラスの例として、下記のコードをご覧ください。

サーブレットクラスの基本形

1 import java.io.IOException;
2 import javax.servlet.ServlertException;
3 import javax.servlet.http.HttpServlet;
4 import javax.servlet.http.HttpServletRequest;
5 import javax.servlet.http.HttpServletResponse;
6
7 public class HelloServlet extends HttpServlet {
8   protected void doGet (httpServletRequest request,
       HttpServletResponse response)
       throw ServletException, IOException {
9     }
10 }

サーブレットでは3つのルールにしたがって定義をします。

これらは「お約束」なので難しく考えず、割り切って覚えてください。

しかも、Eclipseではこれらの「お約束」があらかじめ記述されてますので、細かく覚える必要はありません。

1-1. ①サーブレット関係のクラスをインポートする

サーブレット関係のクラスは、主に「javax.servlet」と「javax.servlet.http」の両パッケージに入っています。

上記のコードでインポートしているクラスはサーブレットクラスを作成するために最低限必要なクラスになります。

1-2. ②javax.servlet.http.HttpServletクラスを継承する

HttpServletクラスはサーブレットクラスの「もと」となるクラスです。

このクラスを継承することで、サーブらっと暗るという特別なクラスを一から作成する必要が無くなります。

1-3. ③doGetメソッドをオーバーライドする

doGet()は、サーブレットクラスがリクエストされたときに実行されるメソッドです。

いわば、サーブレットクラスのmainメソッドと解釈すれば良いです。

このメソッドはスーパークラスであるHttpServletクラスのメソッドをオーバーライドして作成するので、宣言部分が非常に長くなりますが、基本的には上記の通り記載する必要があります。

2. HttpServletRequestとHttpServletResponse

ブラウザからリクエストが届くと、アプリケーションサーバはサーブレットクラスdoGetを呼び出します。

このとき引数として渡されるHttpServletRequestはブラウザから届いた「リクエスト」、HttpServletResponceはサーバから送り出す「レスポンス」に関係する情報と機能を持つインスタンスです。


サーブレットクラスでは、基本的にHttpServletRequestインスタンスにされているリクエストの詳細情報を取り出して様々な処理を行い、結果画面のHTML情報をHttpServletResponseインスタンスを用いてブラウザに送り返します。

Webアプリケーション特有の処理のほとんどは、この2つのインスタンスを用いて実現できます。

いわば、Webアプリケーション開発の2大ツールと言えます。

3. HTMLを出力

doGet内にはリクエストによって実行する処理を記述します。

どのような処理を行うかはアプリケーションにより異なりますが、HTMLを出力する処理は必須になります。

HTMLの出力はHttpServletResponseインスタンスを使用して下記のコードのように記述します。

protected void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
response.setContentType(“text/html; charset=UTF-8”);   ①


printWriter out = response.getWriter();
out.println(“”);
out.println(“…”);
out.println(“”); ②
}

3-1. content-typeヘッダの設定

HttpSevletResponseのsetContentTypeメソッドを使用して、レスポンスのcontent-typeヘッダを指定します。

指定する内容はサーブレットクラスが出力するデータのsy類に合わせる必要があります。

HTMLを出力する場合は「”text/html;charset=HTMLの文字コード”」とします。

上記のコードは文字コードがHTMLを出力した結果です。

3-2. HTMLの出力

実行結果のHTMLを出力する処理です。

この処理を行うのはcontent-typeヘッダの設定後で泣かなければなりません。


httpServletResponseのgetWriter() で所得出来る、java.io.PrintWriterインスタンスのprintln() で行います。


これはJavaを知っている人にはおなじみの System.out.println() と同じように使用されます。

HTMLは、処理①のsetContentType()で設定した文字コードで出力されます。

なおHTMLを出力する文字コードは、サーブレットクラスファイル自体の文字コードには左右されません。



以上の処理をまとめたものが上記のコードになります。

HTMLの主力方法は「お約束の集まりです構文として頑張って覚えましょう」

4. サーブレットクラスのコンパイルとインスタンス化


作成したサーブレットクラスを実行するには、通常クラスと同様にコンパイルとインスタンス化が必要になります。

コンパイルはEclipseを使用している場合「上書き保存する」すると自動で行われます。

また、サーブレットクラスをリクエストするとアプリケーションサーバが自動的にインスタンス化するのでいずれも開発者が手動で行う必要はありません。


サーブレットクラスを実行したとき実際に動くのは、アプリケーションサーバが生成したサーブレットクラスのインスタンスです。


今回はサーブレットの基本と作成方法について、勉強していきました。

次回は、サーブレットクラスの実行方法について、学んで行きたいと思いますので、一緒に頑張っていきましょう。