
サーブレット&JSPの基本|サーブレットが実行されるまで
書いて、保存して、リクエストする。サーブレットが動き出すまでの流れをやさしく理解しよう
サーブレットを学び始めると、WelcomeServlet.javaを書いて、Eclipseから実行して、ブラウザで結果を確認するという流れを何度も繰り返すことになります。
ただ、画面に結果が表示されるまでに、内部で何が起きているのかは最初のうちは少し見えにくいところです。
Javaのプログラムは、ソースコードを書いただけではそのまま実行されるわけではありません。サーブレットも同じで、まずコンパイルが行われ、そのあと必要に応じてインスタンス化されて実行されます。とはいえ、EclipseとTomcatを使った開発環境では、その多くを自動で行ってくれるため、開発者が毎回細かく手作業をする必要はありません。
この記事では、WelcomeServlet.javaがどのようにWelcomeServlet.classになり、さらにブラウザからのリクエストをきっかけにTomcat上で実行されるのかを順番に見ていきます。サーブレットが動くまでの流れを理解しておくと、エラーが出たときの原因もつかみやすくなり、開発の見通しもぐっとよくなります。
サーブレットが実行されるまで
サーブレットクラスは、Javaで作られたプログラムです。そのため、通常のJavaクラスと同じように、実行される前にコンパイルとインスタンス化が必要です。
サーブレットの場合、この流れは大きく分けると次の4段階になります。
| 段階 | 内容 |
|---|---|
| 1 | サーブレットクラスのソースファイルを作成する |
| 2 | ソースファイルをコンパイルしてクラスファイルにする |
| 3 | ブラウザからサーブレットへリクエストを送る |
| 4 | Tomcatがサーブレットをインスタンス化して実行する |
ここで大事なのは、実際に動くのはWelcomeServlet.javaそのものではない、という点です。
実行時に使われるのは、コンパイル後に作成されたWelcomeServlet.classであり、さらにそのクラスから生成されたインスタンスです。
サーブレットクラスは作成しただけでは実行されない
WelcomeServlet.javaのようなファイルは、サーブレットクラスのソースファイルです。
これは人が読み書きするためのファイルであり、そのままTomcatが実行するわけではありません。
Javaでは、ソースファイルに書かれた内容をコンピュータが実行できる形へ変換する必要があります。その変換処理がコンパイルです。
たとえば、WelcomeServlet.javaにdoGetメソッドやHTML出力の処理を書いたとしても、その時点ではまだ準備段階です。保存してコンパイルされ、WelcomeServlet.classというクラスファイルになってはじめて、Tomcatが利用できる状態になります。
| ファイル | 役割 |
|---|---|
| WelcomeServlet.java | 開発者が編集するサーブレットのソースファイル |
| WelcomeServlet.class | コンパイルによって作成される実行用のクラスファイル |
この区別を意識しておくと、サーブレット開発の流れが分かりやすくなります。
図1:サーブレットが動くまでの全体の流れ

この図から分かること
サーブレットの実行は、ソースコードを書いた瞬間に始まるわけではありません。
まずWelcomeServlet.javaを作成し、それをコンパイルしてWelcomeServlet.classに変換する必要があります。
そのあと、ブラウザからリクエストが送られると、Tomcatがそのクラスをもとにインスタンスを作成し、サーブレットを実行します。
つまり、コーディング、コンパイル、リクエスト、インスタンス化という流れがつながって、はじめてブラウザへ結果が返されます。
コンパイルとは何か
コンパイルとは、Javaのソースコードを、実行可能なクラスファイルへ変換する処理のことです。
開発者が書くWelcomeServlet.javaは、人が理解しやすい形で書かれています。一方、Javaの実行環境は、そのままではソースコードを直接使えません。そこで、コンパイルを行ってWelcomeServlet.classを作成します。
サーブレットの開発では、このコンパイルが必ず必要になります。もしコンパイルが行われていなければ、Tomcatはサーブレットを実行できません。
コンパイル前とコンパイル後の違い
| 状態 | ファイル | 特徴 |
|---|---|---|
| コンパイル前 | WelcomeServlet.java | 開発者が編集するソースコード |
| コンパイル後 | WelcomeServlet.class | Tomcatが利用するクラスファイル |
Java学習を始めたばかりだと、ソースファイルとクラスファイルの違いが少しあいまいになりやすいですが、サーブレットでもこの2つははっきり役割が分かれています。
Eclipseでは保存時に自動でコンパイルされる
通常のJava開発では、コンパイルを明示的に実行することがあります。
しかし、Eclipseを使っている場合は、ファイルを上書き保存すると自動でコンパイルが行われます。
そのため、WelcomeServlet.javaを編集したあと、わざわざ手動でコンパイルの命令を入力する必要はありません。
保存するだけで、Eclipseが自動的にWelcomeServlet.classを作成または更新してくれます。
これはサーブレット開発でも同じです。
たとえば、doGetメソッドの中身を変更してCtrl + Sで保存すると、その変更内容を反映したクラスファイルが自動的に作られます。
Eclipseでの基本的な流れ
| 操作 | Eclipse内部で行われること |
|---|---|
| WelcomeServlet.javaを編集する | ソースコードが変更される |
| 上書き保存する | 自動コンパイルが行われる |
| エラーがなければ | WelcomeServlet.classが更新される |
| エラーがある場合 | クラスファイルが正しく作成されないことがある |
この仕組みのおかげで、開発者はソースコードの作成に集中しやすくなります。
保存しても実行できないことがある理由
Eclipseが自動コンパイルをしてくれるとはいえ、保存しただけで必ず実行できるとは限りません。
ソースコードに文法エラーがあると、正しいクラスファイルが作成されないことがあります。
たとえば、セミコロンの付け忘れや、括弧の閉じ忘れ、クラス名の入力ミスなどがあると、コンパイルに失敗します。
その場合は、Tomcatが実行できるWelcomeServlet.classが用意できないため、期待した動作にならないことがあります。
コンパイルエラーがあるときに確認したいこと
| 確認項目 | 内容 |
|---|---|
| Javaの文法 | セミコロン、括弧、綴りに誤りがないか |
| import文 | 必要なクラスが正しく読み込まれているか |
| メソッド定義 | doGetの宣言が正しいか |
| Eclipseの表示 | 赤いエラーマークが出ていないか |
保存したのにブラウザで正しく動かないときは、まずコンパイルが成功しているかを確認することが大切です。
インスタンス化とは何か
コンパイルによってWelcomeServlet.classができても、それだけではまだ実際の処理は動きません。
サーブレットを実行するには、そのクラスからインスタンスを生成する必要があります。
インスタンスとは、クラスをもとに実際に作られた実体のことです。
WelcomeServlet.classが設計図だとすると、インスタンスはその設計図をもとに作られた実際の動作対象と考えると分かりやすいでしょう。
サーブレットが実行されるとき、実際に動作するのはこのインスタンスです。
| 用語 | イメージ |
|---|---|
| クラス | 設計図 |
| インスタンス | 設計図から作られた実体 |
| サーブレットの実行 | インスタンスが処理を行う |
この考え方は、通常のオブジェクト指向プログラミングと同じです。
サーブレットだから特別というわけではなく、Javaのクラスとしての基本に沿って動いています。
図2:コンパイルとインスタンス化の関係

この図から分かること
WelcomeServlet.javaは、あくまでソースコードです。
保存時にEclipseが自動コンパイルを行うことで、WelcomeServlet.classというクラスファイルが作成されます。
さらに、実際に処理を行うのはWelcomeServlet.classそのものではなく、Tomcatがそこから生成したインスタンスです。
クラスとインスタンスは同じように見えやすいですが、役割は異なります。
サーブレットの実行を理解するためには、ソースファイル、クラスファイル、インスタンスの3つを区別して考えることが大切です。
サーブレットのインスタンス化はTomcatが自動で行う
通常のJavaプログラムでは、必要に応じてnewを使ってインスタンスを生成します。
しかし、サーブレットでは開発者が自分でWelcomeServletのインスタンスを作成する必要はありません。
ブラウザからサーブレットへのリクエストが届くと、Tomcatが自動的にサーブレットをインスタンス化します。
そして、そのインスタンスを使って必要な処理を実行します。
この仕組みのおかげで、開発者はインスタンス生成の細かな制御を意識しなくても、doGetメソッドの中身を書くことに集中できます。
サーブレット開発で自動化されること
| 処理 | 誰が行うか |
|---|---|
| コンパイル | Eclipseが保存時に自動で行う |
| インスタンス化 | Tomcatがリクエスト時に自動で行う |
| サーブレットの実行 | Tomcatが生成したインスタンスを使って行う |
サーブレット開発では、環境側が多くの準備を引き受けてくれるため、開発者は業務処理やHTML出力の実装に集中しやすくなっています。
リクエストが実行のきっかけになる
サーブレットは、保存しただけで勝手に動き始めるわけではありません。
実行のきっかけになるのは、ブラウザからのリクエストです。
たとえば、Eclipseのサーバーで実行を使ったり、ブラウザにURLを入力したりすると、Tomcatへリクエストが送られます。
そのリクエストを受けたTomcatが、対応するサーブレットを探し、必要に応じてインスタンスを生成して処理を実行します。
つまり、サーブレットの流れは次のようになります。
| 流れ | 内容 |
|---|---|
| 1 | 開発者がWelcomeServlet.javaを作成する |
| 2 | 保存によって自動コンパイルされる |
| 3 | ブラウザからURLへアクセスする |
| 4 | Tomcatがリクエストを受け取る |
| 5 | Tomcatがサーブレットをインスタンス化する |
| 6 | サーブレットのインスタンスが処理を実行する |
このように、リクエストがサーブレット実行のスタート地点になります。
手動でやらなくてよいことを整理する
サーブレット学習を始めたばかりの段階では、どこまで自分で行い、どこから環境が自動でやってくれるのかが分かりにくいことがあります。
そこで、手動で行うことと自動で行われることを整理しておきましょう。
開発者が主に行うこと
| 操作 | 内容 |
|---|---|
| コーディング | WelcomeServlet.javaを作成、修正する |
| 保存 | 上書き保存して変更を反映する |
| 実行操作 | ブラウザからリクエストする、またはEclipseで実行する |
EclipseやTomcatが主に行うこと
| 自動処理 | 内容 |
|---|---|
| 自動コンパイル | 保存時にWelcomeServlet.classを作成する |
| 自動インスタンス化 | リクエスト時にサーブレットのインスタンスを生成する |
| 実行管理 | インスタンスを使ってサーブレットを実行する |
この役割分担が分かると、開発の全体像がかなりつかみやすくなります。
図3:ブラウザのリクエストからサーブレットが動くまで

この図から分かること
ブラウザからのリクエストが届くと、Tomcatはまず対応するサーブレットのクラスファイルを利用します。
そのうえで、必要なインスタンスを生成し、そのインスタンスに処理を実行させます。
実行が終わると、処理結果はレスポンスとしてブラウザへ返されます。
ここでも、実際に処理を担当しているのはWelcomeServlet.javaではなく、Tomcatが生成したサーブレットのインスタンスです。
この流れを理解しておくと、サーブレットは書いたらすぐそのまま動くのではなく、コンパイルとインスタンス化を経て実行されることがよく分かります。
実際に動くのはサーブレットクラスのインスタンス
最後に、もう一度いちばん大切な点を確認しておきます。
サーブレットを実行したときに実際に動くのは、アプリケーションサーバーが生成したサーブレットクラスのインスタンスです。
WelcomeServlet.javaはソースコード、WelcomeServlet.classはコンパイル後のクラスファイル、そして実際の処理担当はWelcomeServletのインスタンスです。
この違いを押さえておくと、サーブレットの実行をかなり整理して理解できます。
| 対象 | 役割 |
|---|---|
| WelcomeServlet.java | 開発者が記述するソースファイル |
| WelcomeServlet.class | コンパイル後のクラスファイル |
| WelcomeServletのインスタンス | 実際に処理を実行する実体 |
サーブレット開発では、開発者は主にソースコードを書くことに集中します。
コンパイルはEclipseが、インスタンス化はTomcatが自動で行ってくれるため、複雑な準備を毎回意識しなくても開発を進められます。
その一方で、内部ではこうした流れが動いていることを知っておくと、サーブレットの仕組みがより深く理解できるようになります。
