記事の紹介

この記事ではサーブレットクラスの実行方法に対して扱います。

サーブレットクラスのURL

サーブレットクラスを実行するには、ブラウザでサーブレットクラスのURLを指定してリクエストします。ここまではHTMLファイルの実行方法と似てますが、指定するURLが異なります。サーブレットクラスのURLは、次の形式で指定できます。

http://<サーバ名>/<アプリケーション名>/<URLパターン>

サーブレットクラスはファイル名ではなくURLパターンというものをURL中に指定します。URLパターンは、サーブレットクラスをリクエストするときに使用する名前で、開発者が設定する事ができます。

たとえば、「HellowServlet」というクラス名のサーブレットクラスに「MyWorld」というURLパターンを設定した場合、そのクラスをリクエストするときのURLは、

http://<サーバ名>/<アプリケーション名>/hello

になります。
言い換えれば、サーブレットクラスはサーブレットクラスはURLパターンを設定しないとリクエストして実行することが出来ません。したがって、URLパターンの設定方法を理解することが凄く大事です。

URLパターンの設定

サーブレットクラスのURLパターンは「@WebServletアノテーション」で設定します。アノテーションはJava5から追加された機能で、クラスやメソッドなどに関連情報を付加することが出来ます。アノテーションで付加された情報は、外部ツールに読み込ませる事も可能です。

サーブレットクラスに@WebServletアノテーションを追加すると、アプリケーションサーバがそれを読み取り、URLパターンの設定を行います。

@WebServlet アノテーション
@WebServlet(“/URLパターン”)
*URLパターンは「/」から始める。
*Tomcatのバージョンが7以上である必要があります。
*javax.servlet.annotation.WebServletをインポートする必要があります。

URLパターンには文字列を設定することができます。下記のコードでは、サーブレットクラスHelloServletに「hello」というURLパターンを設定している例です。「/servlet/hello」と設定したURLの階層を増やしたり、「hello.html」と設定してHTMLファイルのように見せることもできます。
もちろん、クラス名と同じ名前で設定しても問題ありません。Eclipseでサーブレットクラスを作成した場合、URLパターンはクラス名と同じものが自動的に設定されます(この場合は’http://localhost:8080/Study(アプリ名)/HelloServlet(クラス名)’となります。

URLパターンの設定(ソース型)
import javax.servlet.annotation.WebServlet;
//...
@WebServlet(“/hello”)
public class HelloServlet extends HttpServlet {	
//...
}
//...

サーブレットの実行

サーブレットクラスにURLパターンを設定したら、ブラウザからリクエストして実行できるようになります。ブラウザからリクエストする方法はHTMLファイルからりくえすとするのと同じく、次の二つの方法があります。

方法① ブラウザを起動してURLを入力

ブラウザを起動した後、サーブレットクラスのURLを入力してリクエストします。(アプリケーションサーバが起動されてなければありません。)

方法② Eclipseの実行機能を利用する

リクエストするサーブレットクラスを選択し、右クリックから「実行」➞「サーバで実行」を選択します。

また、次のような方法もあります。

方法③ サーブレットクラスへのるんをクリックします。

次のように記述したリンクをクリックして、サーブレットクラスをリクエストします。

<a href=”/(アプリケーション名)/(URLパターン)/”>リンク文字列</a>

ex)<a href=”/Study/HelloServlet/”>サーブレットに移動</a>

このようなリクエスト型はよく、ウェブページを作る特に使われます。多くの場合は、Webアプリケーションに最初にリクエストする時に方法①や②によって実行されます。

このリクエストに対するレスポンスのHTMLにはリンクが含まれる事が多く、ユーザは以降のページを利用する時は、方法③を利用してページを移動します。

リクエストメソッドと実行メソッド

URLの入力、またはリンクのクリックでサーブレットクラスをリクエストすると、doGet()メソッドが実行されます。しかし、サーブレットクラスを常にdoGet()メソッドを実行するわけではありません。

サーブレットクラスが実行するメソッドは、リクエストメソッド(webを支える通信の仕組みリクエストとリスポンスを参考)によって決まります。詳細的には、GETリクエストされたらdoGet()メソッドを、POSTリクエストされたらdoPost()メソッドを実行します。リクエストしたとき、ブラウザは自動的にGETリクエストを行うため、doget()メソッドが実行されます。

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