サーブレットから別のJavaクラスを利用する

3.2 サーブレットから別のJavaクラスを利用する

 サーブレットはWeb上で動作するJavaプログラムです。そのため、サーブレット内から別に定義されたJavaのクラスを呼び出し利用することもできます。本節では、サーブレットから別のクラスを呼び出すプログラムについて学習します。

サーブレットから別のJavaクラスを呼び出し利用するプログラム

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

実行結果

アプリケーション構成

① ソース・フォルダ :web_basic/WEB-INF/src
② パッケージ :ch03
③ 名前 :Season

➢ Season.java
1package ch03;
2 
3import java.util.Random;
4 
5public class Season {
6 
7    private static Random random = new Random();
8 
9    public String getSeason(){
10        //0から11までのランダムな数字を生成
11        int n = random.nextInt(12);
12  
13        //ランダムな数字に対応する季節を返す
14        if(n < 3){
15            return "Winter";
16        }else if(n < 6){
17            return "Spring";
18        }else if(n < 9){
19            return "Summer";
20        }else {
21            return "Autumn";
22        }
23    }
24  
25 }

① ソース・フォルダ :web_basic/WEB-INF/src
② パッケージ :ch03
③ 名前 :SeasonServlet
④ スーパークラス :javax.servlet.http.HttpServlet
⑤ アクセスURL :http://localhost:8080/web_basic/SeasonServlet

➢  SeasonServlet.java
1package ch03;
2 
3import java.io.*;
4import javax.servlet.*;
5import javax.servlet.http.*;
6 
7public class SeasonServlet extends HttpServlet {
8 
9    public void doGet(HttpServletRequest request, HttpServletResponse response)
10    throws ServletException, IOException {
11  
12        //自作クラスのオブジェクト化
13        Season objSea = new Season();
14        //季節名の取得
15        String seasonName = objSea.getSeason();
16  
17        //画面の出力
18        PrintWriter out = response.getWriter();
19        out.println("Season is " + seasonName);
20    }
21 }
➢  web.xml
1<web-app>
2    <servlet>
3        <servlet-name>HelloServletMapping</servlet-name>
4        <servlet-class>ch03.HelloServlet</servlet-class>
5    </servlet>
6    <servlet>
7        <servlet-name>SeasonServletMapping</servlet-name>
8        <servlet-class>ch03.SeasonServlet</servlet-class>
9    </servlet>
10    <servlet-mapping>
11        <servlet-name>HelloServletMapping</servlet-name>
12        <url-pattern>/HelloServlet</url-pattern>
13    </servlet-mapping>
14    <servlet-mapping>
15        <servlet-name>SeasonServletMapping</servlet-name>
16        <url-pattern>/SeasonServlet</url-pattern>
17    </servlet-mapping>
18</web-app>

解説
 このプログラムで重要なのは、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 本章のまとめ

f