記事の紹介

この記事ではサーブレットの作成方法と基礎に対して扱います。

サーブレットとは

サーブレットJavaを使ってサーバサイドプログラムを作るための技術です。私たちはサーブレットの文法に従い、サーブレットクラスというくらすを開発し、アプリケーションサーバ上で実行することが出来るようになります。サーブレットクラスはブラウザからのリクエストによって実行され、その実行結果をHTMLで出力できます。出力されたHTMLは、アプリケーションサーバによってブラウザにレスポンスされます 。
サーブレットクラスは、通常のクラスと同様にクラス定義を行って作成します。

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

  • まず、「ファイル」-「新規」-「サーブレット」を選択します。
  • サーブレットクラスの名前を決めて完了を押せば自動的にサーブレットが生成されます。
  • 最後にStudy/srcにサーブレットが生成されたことが確認できます。

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

まず、サーブレットクラスを定義ために、守るべきのルールを説明します。

サーブレットクラスは、通常のクラスと同様にクラス定義を行って作成します。ただし、サーブレットクラスを定義するには、いくつか守らなければならないルールがあります。どのようにクラス定義をするか、基本的なサーブレットクラスの例をみせながら説明しましょ。

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

}

サーブレットえは以下の三つのルールに従ってクラスを定義します。ちなみに、Eclipseを使えば、これらの「ルール」はEclipseから「自動的」に書いてくれますので、細かく覚える必要はありません

  • ルール①(7行目) javax.servlet.http.HttpServletクラスを継承する
    • HttpServletクラスはサーブレットクラスの「もと」となるクラスです。このクラスを継承することで、サーブレットクラスという特別なクラスを簡単に作ることができます。
  • ルール②(9~12行目)doGet()メソッドをオーバーライドする。
    • doGet()メソッドは、サーブレットクラスがリクエストされると実行されるメソッドです。いわば、サーブレッドクラスのメインメソッドといえるものです。
  • ルール③(1~5行目)サーブレット関係のクラスをインポートする
    • サーブレット関係のクラスは、主に「javax.servlet」と「javax.servlet.http」の両パッケージに入ってます。上記のコードでインポートしているクラスは、サーブレットクラスを作成するために最低限インポートする必要があります。

HttpServletRequestとHttpServletResponse

ブラウザからリクエストが届くと、アプリケーションサーバはサーブレットクラスのdoGet()を呼び出します。このとき引数として渡されるHttpServletRequestはブラウザから届いた「リクエスト」、HttpServletResponseはサーバから送り出す「レスポンス」に関係する情報と機能を持つインスタンスです。

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

Webアプリケーション特有の処理のほとんどは、 HttpServletRequestHttpServletResponse でじつげんされます。

アプリケーションサーバ

HttpServletResponseとHttpServletRequestインスタンス

アプリケーションサーバ

HTMLを出力

doGet()メソッド内には、HttpServletRequestによる処理を記述します。どのような処理を要求されるかはアプリケーションそれぞれですが、常に必要となるのが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("<html>");
	out.println("<iframe style="width:100%;height:600px" src="www.dripcoke.com"></iframe>");
	out.println("</html>");
}

Content-Typeヘッダの設定(3行目)

HttpServletResponseのsetContentType()メソッドを使用して、レスポンスのContent-Typeヘッダ(リクエストとレスポンス参照)を指定します。指定する内容はサーブレットクラスの出力によって違いますが、今回はHTMLを出力しますので「”text/html; charset=HTMLの文字コード”」とします上記のソースの場合の文字コードはUTF-8となります。

HTMLの出力(5~8行目)

実行結果のHTMLを出力する処理です。この処理はContent-Typeヘッダの設定後に行わなければなりませんレスポンスされたgetWriter()メソッドで取得できるjava.io.PrintWriterインスタンのprintln()メソッドを行います

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

作成したサーブレットクラスを実行するには、通常のクラスみたいにコンパイルとインスタンス化が必要です。

コンパイルは、Eclipseを使用している場合「上書き保存」時に自動的にほぞんされます。

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

入門JSP – サーブレットの基礎