サーブレットとはJavaでWebアプリケーションを作るときの仕様(仕組み)だ。そのサーブレットを実際に作成してみよう。
サーブレットの処理の流れ
サーブレットを作成するために、まずその処理の流れを理解しておこう。最初に、クライアントからのリクエストがWebコンテナに届く。リクエストを受け取るとWebコンテナはリクエストの処理を行うためのサーブレットを選択しなければならない。その選択は、Webコンテナがリクエストの中に含まれるURLパスをサーブレットにマッピングする(紐付けする)ことにより行われる。
URLパスはコンテキストルートとURLパターン(url-pattern)を含んでいる。
これがURLパスの形式である。
http://host:port/context-root[/url-pattern]
Webコンテナは、このふたつの情報からサーブレットを選択する。Webコンテナにより選択されたサーブレットはレスポンスをクライアントに返す。
URLパターンの宣言
サーブレットのソースファイルの中で、@WebServletアノテーションを使うことによってサーブレットのためのURLパターンを宣言する。
書き方の基本は簡単だ。
@WebServlet("/url-pattern")
例えば、次のようなURLにサーブレットを割り当てることを考えてみよう。
http://localhost:8080/Servlet/HelloWorld
このような時は、@WebServletアノテーションを使って次のようにURLにサーブレットを割り当てることができる。(この場合、context-rootはServletとする。)@WebServletにURLパターン:/HelloWorldを宣言する。これによってURLパターンとサーブレットがマッピングされる。
1 2 3 4 |
@WebServlet("/HelloWorld") public class HelloWorldServlet extends HttpServlet { ... } |
この関係をまとめてみると次の図のようになる。Webコンテナがリクエストの中のURLパスに含まれるコンテキストルートServletとアノテーション/HelloWorldからサーブレットを選択する。
これで、サーブレットが選ばれることになるのだが、サーブレットの処理の流れはまだ続く。次は、サーブレットにクライアントからのリクエストが渡された後の処理である。いよいよサーブレットの中に入って行く。
サーブレットクラス
クライアントからのリクエストはWebコンテナによってマッピングされたサーブレットに渡され、そのサーブレットがリクエストの中にあるメソッドに対応した処理を行う。メソッドには、次の図が示すようにメソッドGET、POSTなどいくつかの種類がある。
サーブレットクラスはHttpServletクラスを継承して作成される。このサーブレットクラスで、リクエストのメソッドGETに対応したdoGet()、POSTに対応したdoPost()などの親クラスHttpServletのメソッドをオーバーライドして要求にあった処理を記述する。
この例では、サービスメソッドのdoGet()をオーバーライドしている。このdoGet()メソッドの中に、レスポンスとしてクライアントに返すデータの処理や表示する画面をHTMLで記述することになる。
1 2 3 4 5 6 7 |
@WebServlet("/HelloWorld") public class HelloWorldServlet extends HttpServlet { protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { …. } } |
では、実際のサーブレットの作成をサンプルプログラムで見てみよう。
シンプルなサンプルプログラム
このサンプルプログラムでは、先に説明したようにリクエストのGETメソッドの処理をdoGet()メソッドで実装している。サーブレットは、シンプルなHTMLで書かれた画面を出力する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/HelloWorld")//[1] public class HelloWorld extends HttpServlet {//[2] protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//[3] response.setContentType("text/html");//[4] PrintWriter out = response.getWriter();//[5] out.println("<html><head></head><body>");//[6] out.println("<p>Sample</p>");//[7] out.println("<p>Hello World!</p>");//[8] out.println("</body></html>");//[9] } } |
実行結果
ブラウザにURL:http://localhost:8080/Servlet/HelloWorldを入力し、Enterを押す。
表示されるブラウザ画面:
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] アノテーションの宣言をする。
- [2] HttpServletを継承して、HelloWorldクラスを定義する。
- [3] doGet()メソッドをオーバーライドして定義する。
- [4] Content Typeを設定する。
- [5] HTMLを出力するためのoutオブジェクトを取得する。
- [6]-[9] outオブジェクトに「Sample」と「Hello World!」を表示するHTMLコードを出力する。
まとめ
このページではサーブレットの作成方法について簡単に紹介した。サンプルプログラムなどを実際に動作させて各所の働きを確認していこう。