サーブレット&JSPの基本|サーブレットのURLと実行方法

ファイル名ではなくURLパターンで呼び出す。サーブレットを正しく実行するためのURLの仕組みを身につけよう

サーブレットクラスを作成し、HTMLを出力する処理を書いたら、次に大切になるのが実行方法です。

HTMLファイルの場合は、ブラウザからファイル名を指定してアクセスしました。たとえば、studyプロジェクト内のwelcome.htmlであれば、URLの最後にwelcome.htmlのようなファイル名を指定して表示できます。

しかし、サーブレットクラスはHTMLファイルとは少し違います。ブラウザから直接WelcomeServlet.javaやWelcomeServlet.classを指定して実行するわけではありません。

サーブレットを実行するときは、あらかじめサーブレットクラスに設定したURLパターンを使ってリクエストします。URLパターンは、ブラウザからそのサーブレットを呼び出すための名前のようなものです。

ここでは、前の記事で作成したWelcomeServlet.javaを使い、URLパターンの設定方法、ブラウザからの実行方法、Eclipseの実行機能、リンクによる実行、GETリクエストとdoGetメソッドの関係までを順番に確認していきます。

HTMLファイルとサーブレットではURLの最後が違う

HTMLファイルを表示するときは、URLの最後にファイル名を指定します。

たとえば、studyプロジェクトのsrc/main/webappにwelcome.htmlを置いた場合、URLは次のようになります。

http://localhost:8080/study/welcome.html

一方、サーブレットクラスを実行するときは、URLの最後にJavaファイル名を書くのではありません。代わりに、サーブレットクラスに設定したURLパターンを指定します。

サーブレットクラスのURLは、次のような形になります。

http://サーバ名:ポート番号/アプリケーション名/URLパターン

今回のstudyプロジェクトで、WelcomeServletにwelcomeというURLパターンを設定した場合、ブラウザから指定するURLは次のようになります。

http://localhost:8080/study/welcome

HTMLファイルとサーブレットのURLの違い

種類URLの最後に指定するもの
HTMLファイルファイル名http://localhost:8080/study/welcome.html
サーブレットURLパターンhttp://localhost:8080/study/welcome

この違いはとても大切です。

WelcomeServlet.javaというクラスを作ったからといって、URLの最後にWelcomeServlet.javaを指定するわけではありません。また、WelcomeServlet.classを指定するわけでもありません。

ブラウザからアクセスするときに使う名前は、サーブレットクラスに設定したURLパターンです。

URLパターンとは

URLパターンは、サーブレットクラスをブラウザから呼び出すための名前です。

たとえば、WelcomeServletというクラスに/welcomeというURLパターンを設定すると、ブラウザは/welcomeという名前でWelcomeServletをリクエストできるようになります。

URLパターンは、クラス名と同じにする必要はありません。開発者が分かりやすい名前を付けることができます。

サーブレットクラス名URLパターンブラウザで指定するURL
WelcomeServlet/welcomehttp://localhost:8080/study/welcome
WelcomeServlet/servlet/welcomehttp://localhost:8080/study/servlet/welcome
WelcomeServlet/welcome.htmlhttp://localhost:8080/study/welcome.html

URLパターンを/welcome.htmlのように設定すると、見た目上はHTMLファイルへアクセスしているように見えます。しかし、実際にはWelcomeServletが実行されます。

このように、URLパターンはサーブレットクラスの呼び出し名として使われます。

図1:HTMLファイルとサーブレットのURLの違い

この図から分かること

HTMLファイルを表示するときは、URLの最後にファイル名を指定します。

一方、サーブレットを実行するときは、ファイル名ではなくURLパターンを指定します。WelcomeServlet.javaというファイル名であっても、@WebServletで/welcomeと設定していれば、ブラウザからは/study/welcomeでアクセスします。

サーブレットでは、クラス名、Javaファイル名、URLパターンを分けて考えることが大切です。

@WebServletでURLパターンを設定する

サーブレットクラスにURLパターンを設定するには、@WebServletアノテーションを使います。

アノテーションとは、クラスやメソッドなどに追加情報を付けるための仕組みです。サーブレットでは、@WebServletをクラスの直前に書くことで、このクラスはこのURLパターンで呼び出します、という情報をTomcatへ伝えます。

基本形は次のとおりです。

@WebServlet("/URLパターン")

URLパターンは、必ず/から始めます。

たとえば、WelcomeServletを/welcomeというURLパターンで実行したい場合は、次のように指定します。

@WebServlet("/welcome")

この設定により、Tomcatは/study/welcomeへのリクエストを受け取ったときに、WelcomeServletを実行するようになります。

@WebServletで確認すること

確認項目内容
アノテーション名@WebServletを使う
指定する値/から始まるURLパターン
書く場所サーブレットクラスの直前
必要なimportjakarta.servlet.annotation.WebServlet

@WebServletを使うには、jakarta.servlet.annotation.WebServletのimportが必要です。

Eclipseで@WebServletに赤い波線が表示される場合は、import文が不足している可能性があります。Eclipseの修正機能を使って追加できます。

WelcomeServlet.javaの完成例

ここでは、ここまでの記事で作成したWelcomeServlet.javaにURLパターンを設定し、ブラウザへHTMLを出力する完全な形を示します。

URLパターンは/welcomeにします。

ファイル名: WelcomeServlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/welcome")
public class WelcomeServlet extends HttpServlet {

    @Override
    protected void doGet(
            HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html; charset=UTF-8");

        PrintWriter out = response.getWriter();

        out.println("<!DOCTYPE html>");
        out.println("<html lang=\"ja\">");
        out.println("<head>");
        out.println("<meta charset=\"UTF-8\">");
        out.println("<title>WelcomeServletの実行</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>WelcomeServletを実行しました</h1>");
        out.println("<p>URLパターン /welcome からサーブレットが呼び出されています。</p>");
        out.println("</body>");
        out.println("</html>");
    }
}

ブラウザの表示例

このプログラムで特に注目したいのは、クラスの直前にある次の記述です。

@WebServlet("/welcome")

この設定によって、WelcomeServletは/welcomeというURLパターンで呼び出せるようになります。

studyプロジェクトで実行する場合、ブラウザからアクセスするURLは次のようになります。

http://localhost:8080/study/welcome

WelcomeServlet.javaの主な構成

記述役割
import jakarta.servlet.annotation.WebServlet;@WebServletを使うために必要
@WebServlet("/welcome")URLパターンを/welcomeに設定する
extends HttpServletサーブレットクラスとして動作させる
doGetGETリクエストを受け取ったときに実行される
response.setContentTypeHTMLと文字コードを指定する
PrintWriter outブラウザへHTMLを出力する
out.printlnレスポンス本文へHTMLを書き込む

クラス名はWelcomeServletですが、URLの最後に指定するのはwelcomeです。この対応関係をしっかり確認しておきましょう。

図2:@WebServletでURLパターンを設定する

この図から分かること

@WebServlet("/welcome")は、ブラウザから届いた/welcomeへのリクエストとWelcomeServletを結び付ける設定です。

ブラウザがhttp://localhost:8080/study/welcomeへアクセスすると、TomcatはURLパターン/welcomeに対応するサーブレットを探します。そして、対応するWelcomeServletのdoGetメソッドを実行します。

URLパターンが設定されていないと、TomcatはどのURLでそのサーブレットを呼び出せばよいか判断できません。サーブレットを実行するには、URLパターンの設定が欠かせません。

サーブレットを実行する方法

WelcomeServletにURLパターンを設定したら、ブラウザからリクエストして実行できるようになります。

実行方法には、主に次の3つがあります。

方法内容
方法①ブラウザを起動してURLを入力する
方法②Eclipseの実行機能を使う
方法③HTMLのリンクをクリックする

どの方法でも、最終的にはTomcatへリクエストが送られ、URLパターンに対応するサーブレットが実行されます。

方法① ブラウザにURLを入力して実行する

1つ目の方法は、ブラウザのアドレスバーにURLを直接入力する方法です。

Tomcatを起動した状態で、次のURLへアクセスします。

http://localhost:8080/study/welcome

ブラウザからこのURLへアクセスすると、Tomcatはstudyアプリケーション内で/welcomeに対応するサーブレットを探します。そして、WelcomeServletのdoGetメソッドを実行します。

URLを構成する要素

URLの部分今回の値
http通信方式
localhost自分のコンピュータ上のサーバー
8080Tomcatが使用するポート番号
studyアプリケーション名
welcomeWelcomeServletに設定したURLパターン

URLの最後はWelcomeServletではなくwelcomeです。@WebServlet("/welcome")で設定したURLパターンを指定します。

ブラウザに表示される内容は、WelcomeServletのdoGetメソッド内でout.printlnによって出力したHTMLです。

方法② Eclipseの実行機能を使う

2つ目の方法は、Eclipseの実行機能を使う方法です。

パッケージ・エクスプローラーでWelcomeServlet.javaを選択し、右クリックします。そのあと、実行 → サーバーで実行を選択します。

使用するサーバーにはTomcat11(Java25)を選択します。studyプロジェクトをこのサーバーで実行する設定にしている場合は、次回以降のサーバー選択を省略できることがあります。

Eclipseから実行する手順

手順操作
1パッケージ・エクスプローラーでWelcomeServlet.javaを選択する
2右クリックする
3実行 → サーバーで実行を選択する
4Tomcat11(Java25)を選択する
5完了をクリックする
6ブラウザに実行結果が表示されることを確認する

Eclipseの実行機能を使うと、Tomcatの起動、ブラウザの起動、URLへのアクセスをまとめて行えます。

ただし、内部で行われていることは、ブラウザにURLを入力する方法と同じです。最終的にはURLパターンに対応するサーブレットへGETリクエストが送られ、doGetメソッドが実行されます。

方法③ HTMLのリンクをクリックして実行する

3つ目の方法は、HTML内にサーブレットへのリンクを作成し、そのリンクをクリックして実行する方法です。

Webアプリケーションでは、最初の画面だけをURL入力やEclipseの実行機能で開き、その後はページ内のリンクをクリックしながら別の画面へ移動することがよくあります。

サーブレットへのリンクは、aタグのhref属性にURLパターンを指定して作成します。

リンクHTMLの例

ファイル名: servlet-menu.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サーブレット実行メニュー</title>
</head>
<body>
<h1>サーブレット実行メニュー</h1>
<p>下のリンクをクリックするとWelcomeServletを実行します。</p>
<a href="welcome">WelcomeServletを実行する</a>
</body>
</html>

ブラウザの表示例

このHTMLファイルをstudyプロジェクトのsrc/main/webappに配置した場合、servlet-menu.htmlを表示したあと、リンクをクリックするとWelcomeServletが実行されます。

aタグのhref属性にはwelcomeを指定しています。これは、WelcomeServletに設定したURLパターン/welcomeに対応しています。

リンク指定の考え方

記述意味
href="welcome"同じアプリケーション内のwelcomeへリクエストする
@WebServlet("/welcome")welcomeへのリクエストでWelcomeServletを実行する

リンクをクリックした場合も、ブラウザからTomcatへリクエストが送られます。その結果、WelcomeServletのdoGetメソッドが実行されます。

図3:サーブレットを実行する3つの方法

この図から分かること

サーブレットを実行する方法には、URLを直接入力する方法、Eclipseの実行機能を使う方法、HTMLのリンクをクリックする方法があります。

見た目の操作は異なりますが、どの方法でも最終的にはTomcatへリクエストが送られます。TomcatはURLパターンを確認し、対応するWelcomeServletを実行します。

URL入力やEclipseの実行機能は、最初の画面を開くときによく使います。その後、Webアプリケーション内を移動するときには、HTMLのリンクを使ってサーブレットを呼び出すことが多くなります。

URL入力とリンククリックではdoGetが実行される

ブラウザのアドレスバーにURLを入力してサーブレットを実行した場合、通常はGETリクエストになります。

また、aタグのリンクをクリックした場合も、通常はGETリクエストになります。

GETリクエストが届くと、サーブレットではdoGetメソッドが実行されます。

リクエスト方法実行されるメソッド
GETリクエストdoGetメソッド
POSTリクエストdoPostメソッド

今回のWelcomeServlet.javaでは、doGetメソッドを定義しています。そのため、URLを入力した場合やリンクをクリックした場合に、doGetメソッド内の処理が実行されます。

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

サーブレットでは、常にdoGetメソッドだけが実行されるわけではありません。

どのメソッドが実行されるかは、ブラウザから送られるリクエストメソッドによって決まります。

GETリクエストであればdoGetメソッド、POSTリクエストであればdoPostメソッドが実行されます。

GETとPOSTの基本的な関係

リクエストメソッド主な場面サーブレットで実行されるメソッド
GETURL入力、リンククリックdoGet
POSTフォームからの送信などdoPost

URL入力やリンククリックでは、ブラウザが自動的にGETリクエストを送ります。そのため、今回の範囲ではdoGetメソッドが実行されると考えれば大丈夫です。

POSTリクエストを使う場面は、フォームからデータを送信するときなどに登場します。doPostメソッドは、名前がdoGetと異なるだけで、引数、戻り値、throwsに記述する例外の形はdoGetと同じです。

URLパターンを間違えた場合

サーブレットを実行できない場合は、まずURLパターンが正しいか確認します。

WelcomeServlet.javaで次のように設定している場合、ブラウザで指定するURLの最後はwelcomeです。

@WebServlet("/welcome")

正しいURLは次のようになります。

http://localhost:8080/study/welcome

次のようなURLでは、意図したサーブレットが実行されない可能性があります。

間違いやすいURL問題点
http://localhost:8080/study/WelcomeServlet.javaJavaファイル名を指定している
http://localhost:8080/study/WelcomeServlet.classクラスファイル名を指定している
http://localhost:8080/study/WelcomeServletURLパターンと一致していない
http://localhost:8080/study/welcome.htmlURLパターンが/welcomeであれば一致しない

サーブレットのURLは、ファイル名ではなくURLパターンで決まります。

実行できないときは、@WebServletの指定とブラウザのURLを見比べましょう。

URLパターンを設定しないと実行できない

サーブレットクラスを作成しても、URLパターンが設定されていなければ、ブラウザからどのURLで呼び出せばよいのかTomcatが判断できません。

そのため、@WebServletを使ってURLパターンを設定することが重要です。

Eclipseでサーブレットクラスを作成した場合、クラス名に合わせたURLパターンが自動で設定されることがあります。ただし、学習中は自動生成された内容をそのまま流すのではなく、@WebServletの中身を確認しておきましょう。

確認する場所確認内容
@WebServlet/から始まるURLパターンが設定されているか
import文jakarta.servlet.annotation.WebServletがあるか
ブラウザのURLアプリケーション名の後ろにURLパターンを指定しているか
サーバーstudyがTomcat11(Java25)で実行されているか

Webアプリケーションの設定方法

サーブレットのURLパターンなど、Webアプリケーションに関する設定には、アノテーションを使う方法とweb.xmlを使う方法があります。

@WebServletのようなアノテーションを使う方法では、サーブレットクラスの中にURLパターンを直接記述できます。クラスと設定の対応関係が見やすいため、学習しやすい方法です。

一方、web.xmlはXML形式の設定ファイルです。サーブレットが登場した初期から使われてきた設定方法で、Webアプリケーション全体の設定をファイルにまとめて記述します。

設定方法特徴
アノテーションクラスに直接設定を書ける
web.xmlXML形式の設定ファイルにまとめて書く

アノテーションによる設定は、サーブレット3.0以降で利用できるようになった方法です。

今回の学習では、WelcomeServlet.javaに@WebServletを付けてURLパターンを設定する方法を使います。

WelcomeServlet.javaの実行手順

最後に、WelcomeServlet.javaを実行する流れを整理しておきます。

まず、WelcomeServlet.javaに@WebServlet("/welcome")が付いていることを確認します。次に、ファイルを保存します。Eclipseでは保存時に自動コンパイルが行われます。

そのあと、Tomcat11(Java25)が起動していることを確認し、ブラウザから次のURLへアクセスします。

http://localhost:8080/study/welcome

または、EclipseでWelcomeServlet.javaを右クリックし、実行 → サーバーで実行を選択します。

正常に実行されると、doGetメソッドが呼び出され、WelcomeServlet.javaのout.printlnで出力したHTMLがブラウザに表示されます。

実行前後の確認項目

確認項目内容
プロジェクト名studyになっているか
サーブレットクラスWelcomeServlet.javaを使用しているか
URLパターン@WebServlet("/welcome")になっているか
アクセスURLhttp://localhost:8080/study/welcomeになっているか
実行メソッドGETリクエストでdoGetが実行される
表示内容WelcomeServletが出力したHTMLが表示される

サーブレットを実行するときは、ファイル名ではなくURLパターンを使う。この考え方を押さえておくと、今後サーブレットが増えてきても、どのURLでどの処理が動くのかを整理しやすくなります。