サーブレットから別のJavaクラスを利用する
3.2 サーブレットから別のJavaクラスを利用する
サーブレットはWeb上で動作するJavaプログラムです。そのため、サーブレット内から別に定義されたJavaのクラスを呼び出し利用することもできます。本節では、サーブレットから別のクラスを呼び出すプログラムについて学習します。
サーブレットから別のJavaクラスを呼び出し利用するプログラム
このプログラムは、アクセスするたびに異なる「四季」を表示するサーブレットです。メインとなる画面を表示させるサーブレットと、動的に文字を変化させるロジックを記述したJavaプログラムの2つのファイルで構成されます。プログラムを作成し、サーブレットから別のJavaクラスを呼び出す方法とweb.xmlの追記方法について学習しましょう。
実行結果

アプリケーション構成

① ソース・フォルダ :web_basic/WEB-INF/src
② パッケージ :ch03
③ 名前 :Season
➢ Season.java
3 | import java.util.Random; |
7 | private static Random random = new Random(); |
9 | public String getSeason(){ |
11 | int n = random.nextInt(12); |
① ソース・フォルダ :web_basic/WEB-INF/src
② パッケージ :ch03
③ 名前 :SeasonServlet
④ スーパークラス :javax.servlet.http.HttpServlet
⑤ アクセスURL :http://localhost:8080/web_basic/SeasonServlet
➢ SeasonServlet.java
5 | import javax.servlet.http.*; |
7 | public class SeasonServlet extends HttpServlet { |
9 | public void doGet(HttpServletRequest request, HttpServletResponse response) |
10 | throws ServletException, IOException { |
13 | Season objSea = new Season(); |
15 | String seasonName = objSea.getSeason(); |
18 | PrintWriter out = response.getWriter(); |
19 | out.println("Season is " + seasonName); |
➢ web.xml
3 | < servlet-name >HelloServletMapping</ servlet-name > |
4 | < servlet-class >ch03.HelloServlet</ servlet-class > |
7 | < servlet-name >SeasonServletMapping</ servlet-name > |
8 | < servlet-class >ch03.SeasonServlet</ servlet-class > |
11 | < servlet-name >HelloServletMapping</ servlet-name > |
12 | < url-pattern >/HelloServlet</ url-pattern > |
15 | < servlet-name >SeasonServletMapping</ servlet-name > |
16 | < url-pattern >/SeasonServlet</ url-pattern > |
解説
このプログラムで重要なのは、web.xmlファイルに新しいサーブレットの情報を追記していることと、サーブレットから別に定義されたクラスを呼び出し利用していることの2点です。
web.xmlファイルはアプリケーション内に1つだけ作成します。そのため、1つのTomcatプロジェクト内に複数のサーブレットを作成する場合は、以下の図のようにweb.xml内に設定を追記していきます。
図 3.2.1:サーブレットマッピングの追加
この「設定を追記する」ことによって複数のサーブレットが動くようになります。
次に、SeasonServlet.javaについて説明します。SeasonServlet.java ファイルでは13行目と15行目でSeasonクラスのインスタンスメソッドであるgetSeason()メソッドを呼び出し、季節名を取得しています。
サーブレット自体はJavaプログラムで記述されるため、通常のJavaプログラムと同様に別のクラスを利用することができるのです。
13:Season objSea = new Season();
15:String seasonName = objSea.getSeason();
getSeason()メソッドの中でランダムな数字を生成して季節名を生成するため、アクセスする度に実行結果の画面が変わる仕組みになっています。
図 3.2.2: SeasonServletの実行画面
NEXT>> 3.3 本章のまとめ