1.5 Webアプリケーション作成

1.5 Webアプリケーション作成

1.5.1 アプリケーションの概要

1 アプリケーション作成の目的

このサンプルプログラムは、ブラウザ上に「Hello Servlet!」という文字列を表示するプログラムです。簡単なアプリケーションを手順通り作成することで、Webアプリケーションの作成方法を学習していきます。
今後の章で出てくるサンプルコードを動かす環境の下準備となります、細かい役割分担については気にせず、まずは手順通りにアプリケーションを作成し動作させてください。

2 作成手順の概略

以下Webアプリケーションの作成手順の概略を示します。

  • プロジェクト準備: 動的Webプロジェクトとフォルダの作成を行う
  • ファイル作成: HelloServlet.javaの作成を行う
  • アプリケーション実行確認: 作成したアプリケーションにアクセスし動作確認を行う

3 作成アプリケーション完成イメージ

4 プロジェクト構成

Eclipseを用いて、下記のようなプロジェクトを作成します。動的Webプロジェクトを作成すると、自動生成されるフォルダやファイルがたくさんできますが、現段階では気にせず、以下の階層にフォルダやファイルを作るという点だけ意識して進めてください。

■アプリケーションのプロジェクト構成

1.5.2 プロジェクト準備

1 プロジェクトの作成

「新規プロジェクト作成ウィザード」を起動します。Eclipseのメニューバーから以下の項目を選択します。

プロジェクト名に「web_basic」と入力し、「完了」ボタンを押下します。

パッケージ・エクスプローラー内に「web_basic」という名前のプロジェクトが作成されます。

1.5.3 ファイルの作成

1 新規ファイルの作成

サーブレットとなるJavaファイルは「src/main/java」フォルダ内に配置します。通常のJavaファイルの作成方法とは少し異なる点がありますので、以下の手順を参考にして、「HelloServlet.java」ファイルを作成してください。

「web_basic」プロジェクトを右クリック > 新規 > クラスを選択すると作成ウィザードが起動します。このウィザードの起動は通常のJavaクラスの作成と変わりません。

表示された新規Javaクラス作成ウィザードの各項目に、次の①から③の設定を行い、「完了」ボタンを押下します。パッケージ・エクスプローラー内にJavaファイルが増えれば作成成功です。

① パッケージ: ch01
② 名前: HelloServlet
③ スーパークラス: jakarta.servlet.http.HttpServlet

通常のJavaクラスの作成と異なる点は、スーパークラスの指定と、main()メソッドの作成の有無です。
通常のJavaクラスではスーパークラスを変更せずデフォルトのままで作成していましたが、サーブレットの場合は、スーパークラスに「jakarta.servlet.http.HttpServlet」を指定します。また、サーブレットにはmain()メソッドが必要ないため、メソッド・スタブの選択項目は特に変更しません。

これでJavaファイルの作成は完了です。
次に、ソースコードを記述します。「HelloServlet.java」ファイルには、以下のソースコードがデフォルトで記述されています。

ソースコード

【ファイル名:HelloServlet.java(デフォルト)】
package ch01;

import jakarta.servlet.http.HttpServlet;

public class HelloServlet extends HttpServlet {

}

こちらのソースコードに対して、@WebServletアノテーション、doGet()メソッドを追加します。プログラム上部に書かれている各クラスのインポート処理については、12~18行目の処理を書き終えて保存するときに、自動で追記されます。

ソースコード

【ファイル名:HelloServlet.java(書き換え後)】
package ch01;
 
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("/HelloServlet")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        PrintWriter out = response.getWriter();
        out.println("Hello Servlet!");

    }

}

ソースコードの記述後は、ファイルの保存を忘れないようにしましょう。
ファイルの保存は、Eclipseの画面左上のフロッピーのアイコンをクリックして行います。ソースコードのタブ部分の左側に出る「*(アスタリスク)」は、そのファイルがまだ保存されていない状態であることを表します。
保存が完了すると、フロッピーのアイコンが押せなくなり、「*」が消えます。

1.5.4 アプリケーションの実行

1 アプリケーションの実行

動的Webプロジェクト内に作成されたファイルを実行するときは、Eclipseの「実行」ボタンから動作確認することができます。
実行ボタンを押すと「サーバーで実行」の画面が表示されます。
「Tomcat10_Java17」を選択し、「完了」を押下してください。

2 アプリケーションにアクセス

Tomcatが起動すると、ブラウザにURLが送られて、画面が表示されます。アクセスするためのURLの詳細については次の項で詳しく学習しますので、ここでは画面が正しく表示されることのみ確認してください。

URL: http://localhost:8080/web_basic/HelloServlet

上の実行結果のようにブラウザに表示されれば、プログラムが正常に動作したことになります。

もしエラーが表示されてしまう場合は、以下の点を見直してください。

  • プログラムの内容が正しく記述できているか。
  • (URLを手入力した場合は)Webブラウザのアドレスバーに記述したURLが正しいか。
  • Tomcatが起動しているか。

慣れないうちは、プログラムが正しく動作しないことがよく起こります。表示結果がおかしい場合は、慌てず手順や入力文言を見直してみましょう。

1.5.5 アプリケーションの仕組み

今回作成してもらったHelloServlet.javaファイルは次の4つの条件をもとに作成されます。

①HttpServletクラスを継承

サーブレットは「jakarta.servlet.http.HttpServlet」クラスを継承して作成します。Javaのクラスをサーブレットとして作成する場合は、必ずこのクラスを継承する必要があります。

13: public class HelloServlet extends HttpServlet {

②doGet()メソッドをオーバーライド

doGet()メソッドは、ブラウザからサーブレットを呼び出したときや、GET送信されたアクセスの場合に実行されるメソッドです。GET送信については第4章で説明しますので、一旦ここでは、通常のJavaプログラムで記述していたmain()メソッドの代わりのように動くメソッドと考えてください。
なお、継承したHttpServletクラスからオーバーライドするメソッドなので、メソッド名や引数などは正確に記述する必要があります。

メソッドの引数は以下2つのオブジェクトを指定しています。

  • jakarta.servlet.http.HttpServletRequest
  • jakarta.servlet.http.HttpServletResponse

これらは、Webブラウザからのリクエスト(要求)とWebブラウザへのレスポンス(結果)を表すオブジェクトです。

doGet()メソッドで発生する例外は、レスポンスの書き込みを行う際に発生する「IOException」と、その他の例外として発生する「ServletException」の2つで、throwsを利用してスローしています。

15: protected void doGet(HttpServletRequest request, HttpServletResponse response)
16: throws ServletException, IOException {

③doGet()メソッド内に処理を記述

サーブレットの処理はdoGet()メソッド内に記述します。
このプログラムでは、getWriter()メソッドを利用して、文字列出力用のPrintWriterクラスのオブジェクトを生成し、「Hello Servlet」のメッセージをブラウザに出力しています。細かな説明は第2章で説明します。

18: PrintWriter out = response.getWriter();
19: out.println("Hello Servlet!");

④@WebServletアノテーションで呼び出すURLパターンを定義

サーブレットを呼び出す際に指定するURLの定義には、@WebServletアノテーションを使います。アノテーションとはプログラムに注釈を付けることができる機能なのですが、それを応用して、このサーブレットを呼び出すためにはどういうURLパターンで呼び出すのかを設定することができます。
URLパターンを指定する値は「/」から始まることに注意してください。また、配列を利用して複数のURLパターンから同じサーブレットを呼び出すこともできます。

12: @WebServlet("/HelloServlet");

書式:@WebServletアノテーション

@WebServlet(URLパターンの文字列);
@WebServlet( urlPatterns = { “URLパターン1” , “URLパターン2” } )

凡例:@WebServletアノテーション

@WebServlet("/HelloServlet");
@WebServlet( urlPatterns = { “/HelloServlet” , “/hello” } )

web_basicプロジェクトでのURLパターンと、ブラウザで入力するURLの関係は、以下の図のようになります。


NEXT>> 1.6 本章のまとめ