サーブレット&JSPの基本|サーブレットの変更を反映する方法

サーブレットを直したのに画面が変わらない。そんなときは再起動とリロードの仕組みを確認しよう

サーブレットの学習を進めていると、ソースコードを変更したのにブラウザの表示が変わらない、という場面に出会うことがあります。

たとえば、表示する文章を少し変えたはずなのに、ブラウザを更新しても前の内容が表示されたままになることがあります。HTMLファイルであれば、保存してブラウザを更新すればすぐ反映されることが多いですが、サーブレットクラスでは必ずしも同じようには動きません。

これは、サーブレットがJavaのクラスとしてコンパイルされ、Tomcat上でインスタンス化されて実行される仕組みと関係しています。現時点では細かい内部構造まで深く理解しなくても大丈夫ですが、変更が反映されないときの基本的な対処方法は早めに覚えておくと安心です。

この記事では、studyプロジェクト内のサーブレットを変更したときに、実行結果へ反映させる方法を解説します。特に大切なのは、Tomcat11(Java25)を再起動する方法と、オートリロード機能によって変更が反映される場合の確認方法です。

サーブレットを変更しても画面が変わらないことがある

サーブレットクラスは、ブラウザからリクエストされたときにTomcat上で実行されます。

このとき実際に動いているのは、Javaのソースファイルそのものではありません。Eclipseで保存されたサーブレットクラスはコンパイルされ、Tomcat上で読み込まれて実行されます。

そのため、ソースコードを変更して保存したあとでも、Tomcatが古い状態のサーブレットを使い続けていると、ブラウザの表示が変わらないことがあります。

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

対象変更後の反映
HTMLファイル保存してブラウザを更新すると反映されやすい
サーブレットクラス保存だけでは反映されないことがある
サーブレットクラスTomcatの再起動や再読み込みが必要になることがある

サーブレットはJavaプログラムなので、単なるHTMLファイルよりも実行までの仕組みが複雑です。

ソースコードを変更したのにブラウザが変わらない場合は、入力ミスだけでなく、Tomcat側に変更がまだ反映されていない可能性も考えましょう。

表示内容を変更する例

ここでは、プロフィールを表示するサーブレットを例にします。

最初は、開発者の名前と紹介文をHTMLとして出力しています。そのあと、紹介文だけを変更したとします。

プロフィール表示サーブレットの一部の例

String name = "青山 直人";

// HTMLをレスポンス
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset=\"UTF-8\" />");
out.println("<title>" + name + "のプロフィール</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>" + name + "は、Javaの学習を毎日コツコツ進めています。</p>");
out.println("</body>");
out.println("</html>");

このサーブレットを実行すると、ブラウザには次のような内容が表示されます。

青山 直人は、Javaの学習を毎日コツコツ進めています。

ここで、表示する文章を次のように変更したとします。

out.println("" + name + "は、サーブレットの仕組みを確認しています。");

このようにソースコードを変更して保存したあと、ブラウザを更新しても前の文章が表示されることがあります。

この場合、ソースコードの変更が間違っているとは限りません。Tomcatが変更後のサーブレットをまだ読み込んでいない可能性があります。

図1:サーブレットを変更しても表示が変わらない例

この図から分かること

Eclipseでサーブレットのソースコードを変更しても、ブラウザの表示がすぐに変わらないことがあります。

これは、ブラウザが間違っているというより、Tomcatが変更前のサーブレットを使い続けている可能性があるためです。

サーブレットは、Javaのソースコードを保存して終わりではありません。Eclipseでコンパイルされ、Tomcatに読み込まれ、Tomcat上で実行されます。そのため、変更を反映するにはTomcat側の状態も確認する必要があります。

変更が反映されないときの基本的な考え方

サーブレットの変更が反映されないときは、まず次の流れを思い出しましょう。

流れ内容
1Eclipseでサーブレットクラスを編集する
2上書き保存する
3Eclipseが自動でコンパイルする
4Tomcatが変更後のクラスを読み込む
5ブラウザからリクエストする
6変更後の処理結果が表示される

この流れのどこかで止まっていると、ブラウザには古い内容が表示されることがあります。

たとえば、保存していなければ変更は反映されません。コンパイルエラーがあれば、変更後のクラスファイルが正しく作られません。Tomcatが変更後のクラスを読み込んでいなければ、古い処理が実行されることがあります。

そのため、画面が変わらない場合は、ブラウザだけを何度も更新するのではなく、EclipseとTomcatの状態を確認することが大切です。

対処方法① サーバーを再起動する

サーブレットの変更を確実に反映したい場合は、Tomcatを再起動します。

サーバーを再起動すると、TomcatがWebアプリケーションを読み込み直します。そのため、変更後のサーブレットクラスが実行結果に反映されやすくなります。

Eclipseでは、サーバー ビューからTomcat11(Java25)を操作できます。

Tomcatを手動で操作する方法

操作内容
開始停止しているTomcatを起動する
停止起動中のTomcatを停止する
再開Tomcatを停止してから起動し直す

操作手順は次のとおりです。

手順操作
1Eclipseのサーバー ビューを開く
2Tomcat11(Java25)を選択する
3右クリックする
4開始、停止、再開のいずれかを選択する

サーブレットの変更を反映したい場合は、基本的に再開を選びます。再開は、停止してから開始する操作です。

ただし、停止と再開はTomcatが起動している状態で選択できます。Tomcatが停止している場合は、開始を選びます。

再開する場合

Tomcat11(Java25)を右クリックし、「再開」を選択します。

再起動すると変更が反映されやすい理由

Tomcatは、サーブレットクラスを読み込んで実行します。すでに読み込まれているサーブレットがある場合、ソースコードを変更しただけでは古い状態が残ることがあります。

再起動すると、Tomcatはいったん停止し、再び起動するときにWebアプリケーションを読み込み直します。その結果、変更後のサーブレットクラスが使われるようになります。

状態起こりやすいこと
Tomcatを再起動していない古いサーブレットが動き続けることがある
Tomcatを再起動した変更後のサーブレットが読み込まれやすい

学習中に、変更したはずなのに表示が変わらないと感じたら、まずTomcatの再開を試すとよいでしょう。

サーブレットの変更反映で迷ったときの基本対応として、サーバーの再起動を覚えておくと安心です。

Eclipseの実行機能で再起動を促される場合

Eclipseのサーバーで実行を使うと、サーバーの再起動が必要な場面で確認ダイアログが表示されることがあります。

このダイアログが表示された場合、OKをクリックすると、EclipseがTomcatの再起動とリクエストの実行をまとめて行ってくれます。

つまり、手作業で停止と開始を行わなくても、Eclipseの実行機能によって変更を反映しやすい状態にできます。

ダイアログが表示されたときの流れ

手順内容
1サーバーで実行を選択する
2再起動が必要な場合に確認ダイアログが表示される
3OKをクリックする
4EclipseがTomcatを再起動する
5再起動後にリクエストが実行される
6ブラウザに変更後の結果が表示される

サーブレットの変更を確実に反映したい場合は、この確認ダイアログでOKを選ぶと分かりやすいです。

図2:Tomcatを再起動して変更を反映する

この図から分かること

サーブレットの変更がブラウザに反映されない場合は、Tomcat11(Java25)を再起動することで反映できることがあります。

Eclipseのサーバー ビューでは、Tomcatに対して開始、停止、再開を選択できます。起動中のTomcatに対して再開を選ぶと、停止してから再び開始するため、サーブレットクラスが読み込まれ直します。

その結果、変更後のProfileServlet.javaの内容がブラウザに表示されるようになります。サーブレットを変更したあとに動作が変わらない場合は、Tomcatの再起動を基本的な対処方法として覚えておきましょう。

対処方法② しばらく待つ

もう一つの対処方法は、サーブレットクラスを保存したあと、しばらく待つことです。

Apache Tomcatには、オートリロードという機能があります。オートリロードが有効になっている場合、サーブレットクラスを変更して保存したあと、Tomcatが自動的にWebアプリケーションを再読み込みしてくれることがあります。

この再読み込みが完了すると、Eclipse画面下部のコンソール ビューに、次のような内容が表示されます。

情報:このコンテキストの再ロードが完了しました

このメッセージが表示されていれば、TomcatがWebアプリケーションを読み込み直したことが分かります。つまり、サーブレットクラスの変更が反映されている可能性が高い状態です。

オートリロードで確認する場所

オートリロードによる反映を確認するときは、Eclipseのコンソール ビューを見ます。

保存した直後にブラウザを更新しても反映されない場合があります。Tomcatが再読み込みを完了するまで少し時間がかかることがあるためです。

オートリロード時の確認ポイント

確認項目内容
ファイル保存サーブレットクラスを上書き保存したか
コンソール ビュー再ロード完了のメッセージが出ているか
Tomcatの状態起動済みになっているか
ブラウザ更新再ロード完了後に更新したか

コンソールに再ロード完了のメッセージが表示されてからブラウザを更新すると、変更後の内容が表示されることがあります。

ただし、オートリロード機能は環境によって有効になっていない場合があります。デフォルトでは有効になっていないこともあるため、必ずしも待てば反映されるとは限りません。

オートリロードが有効でない場合

オートリロードが有効でない環境では、サーブレットクラスを保存してしばらく待っても、変更が自動で反映されないことがあります。

その場合は、Tomcatを再起動するのが確実です。

状態対応
コンソールに再ロード完了のメッセージが出る反映後にブラウザを更新する
メッセージが出ないTomcatを再起動する
反映されたか分からないTomcatを再開して確認する

学習の初期段階では、変更が反映されない理由を細かく切り分けるよりも、まず再起動で確実に反映できることを覚えておくと安心です。

慣れてきたら、コンソールのメッセージを確認しながら、オートリロードが働いているかどうかも見分けられるようになりましょう。

図3:オートリロードとコンソールの確認

この図から分かること

オートリロードが有効な場合、サーブレットクラスを保存したあと、Tomcatが自動的にWebアプリケーションを再読み込みすることがあります。

このとき、Eclipseのコンソール ビューに 情報:このコンテキストの再ロードが完了しました というメッセージが表示されます。このメッセージが確認できれば、Tomcat側で再読み込みが完了したことが分かります。

ただし、オートリロードは環境によって有効になっていない場合があります。コンソールにメッセージが出ない場合や、しばらく待っても変更が反映されない場合は、Tomcatを再起動して確認しましょう。

変更が反映されないときの確認順序

サーブレットを修正したのに画面が変わらない場合は、次の順番で確認すると落ち着いて対応できます。

順番確認内容
1サーブレットクラスを保存したか確認する
2Eclipseにコンパイルエラーが出ていないか確認する
3ブラウザを更新する
4コンソールに再ロード完了のメッセージが出ているか確認する
5反映されない場合はTomcat11(Java25)を再開する
6もう一度ブラウザで実行結果を確認する

この順番で確認すると、保存忘れ、コンパイルエラー、Tomcatの未反映を切り分けやすくなります。

再起動と待機の使い分け

サーブレットの変更を反映する方法には、Tomcatを再起動する方法と、オートリロードを待つ方法があります。

方法特徴
Tomcatを再起動する変更を確実に反映しやすい
しばらく待つオートリロードが有効な場合に反映される
コンソールを確認する再ロードが完了したか判断できる

確実に反映したい場合は、Tomcatを再起動します。
オートリロードが有効な環境では、保存後に少し待つだけで変更が反映されることもあります。

ただし、オートリロードが有効でない場合は待っても変わらないため、コンソールの表示を確認することが大切です。

学習中は再起動を基本にすると安心

サーブレットの変更反映で迷ったときは、Tomcatを再起動する方法を基本にすると分かりやすいです。

サーバー ビューでTomcat11(Java25)を右クリックし、再開を選ぶことで、Tomcatを停止してから起動し直せます。

再起動後にブラウザで同じURLをリクエストすれば、変更後のサーブレットが実行されるか確認できます。

状況おすすめの対応
すぐに変更を反映したいTomcatを再開する
コンソールに再ロード完了が出たブラウザを更新する
反映されたか分からないTomcatを再開して確認する
エラーが出たコンソールとソースコードを確認する

サーブレットは、HTMLファイルのように保存と更新だけで必ず反映されるとは限りません。

変更が反映されないときは、Tomcatが古い状態のサーブレットを使っている可能性を考え、再起動やコンソール確認を行いましょう。