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

サーブレットJSPを学びます。

1. サーブレットクラスの実行方法


サーブレットクラスを実行するには、ブラウザでサーブレットクラスのURLを指定してリクエストを行います。

ここまではHTMLファイルと同じですが、指定するURLが異なります。サーブレットクラスのURLは次の形式で指定します。

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


サーブレットクラスの場合、URLの最後の部分にはファイル名ではなくURLパターンを指定します。

URLパターンはサーブレットクラスをリクエストするときに使う名前で、開発者が自由に設定できます。


例えば、「HelloServlet」というクラス名が付いたサーブレットクラスに「hello」というURLパターンを設定した場合、そのクラスをリクエストするURLは次のようになります。

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


言い換えれば、サーブレットクラスはURLパターンを設定しないとリクエストしても実行できません。

したがって、URLパターンの設定方法の理解が非常に重要になります。

1-1. URLパターンの設定

サーブレットクラスのURLパターンは@WebServletアノテーションで設定します。

アノテーションは、クラスやメソッドなどに関連情報を付加できる注釈のような機能です。

アノテーションで付加された情報は、外部ツールから利用できます。


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


URLパターンには任意の文字列を設定できます。

下記に記載しているコードはサーブレットクラスHelloServletに「hello」というURLパターンを設定している例です。

「/servlet/hello」と設定してURLの階層を増やしたり、「hello.html」と設定してHTMLファイルのように見せたりも出来ます。


もちろんクラス名と同じにしても問題ありません。

Eclipseでサーブレットクラスを作成した場合、クラス名と同じURLパターンが自動で設定されます。


1-2. サーブレットクラスの実行

サーブレットクラスにURLのパターンを設定したら、ブラウザからリクエストして実行出来るようになります。

ブラウザからリクエストする方法にはHTMLファイルをリクエストするときと同様に、次の2つの方法があります。

①ブラウザを起動してURLを入力する

ブラウザを起動して、サーブレットクラスのURLを入力してリクエストします。

(この時、アプリケーションサーバを起動しておく必要があります。)

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

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

③サーブレットクラスへのリンクをクリックする

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

<a href=”URLパターン”>リンク文字列</a>

多くの場合、Webアプリケーションに対する最初のリクエストは、方法①や方法②によって実行されます。

このリクエストに対するレスポンスのHTMLはリンクが含まれていることが多く、ユーザは以後方法③を用いてページからページへと渡り歩く事になります。

1-3. リクエストメソッドと実行メソッド

URLの入力、またはリンクのクリックでサーブレットクラスをリクエストした場合doGetメソッドが実行されます。

しかし、サーブレットクラスは常にdoGetメソッドを実行するとは限りません。


サーブレットクラスが実行するメソッドは、リクエストメソッドによって決まります。

具体的には、GETリクエストされたらdoGetメソッドをPOSTリクエストされたらdoPostメソッドを実行します。

URLの入力、またはリンクのクリックでリクエストしたときは、ブラウザは自動的にGETリクエストを行います。

doPostメソッドはdoGetメソッドと名前が異なるだけで、引数や戻り値throwsに記述される例外は同じになります。

1-4. サーブレットクラスを実行する

Eclipseを使って、簡単な占いのページを作成していきたいと思います。


占いの結果はランダムなので、結果のWebページは実行の旅に変わります。


サーブレットクラスのURLのパターンは、クラス名と同じ「UranaiServlet」にします。

動的プロジェクトを中心にこのサーブレットクラスを作成していきます。


Eclipseでサーブレットクラスを新規作成すると、インポートやアノテーションなどのサーブレットクラスの「お約束」は自動で書かれます。

下記のコードを追加して、サーブレットクラスを完成させます。


今回の場合は「example」という動的Webプロジェクトにサーブレットを作成していきます。

「example」で右クリック→新規→その他→Web→サーブレット→次へ



ここでは、サーブレットクラス名を「UranaiServlet」で設定します。

次へを2回押下→スーパークラスからのコンストラクターを外します。



サーブレットクラスが完成したら、下記のコードを記載しましょう。

package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class UranaiServlet
*/
@WebServlet("/UranaiServlet") ・・・①
public class UranaiServlet extends HttpServlet {
    private static final long serialVersionUID = 1L; ・・・②
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
//運勢をランダムで決定
    String[] luckArray = { "大吉" , "中吉" , "小吉" , "吉" , "凶" , "大凶 " };
    int index = (int) (Math.random() *6); ・・・③
    String luck = luckArray[index];
    //実行日を所得
    Date date = new