Interstage Application Server スタートガイド
目次 前ページ次ページ

第3章 Webアプリケーションの開発運用> 3.1 開発

3.1.2 Webアプリケーションの開発

Webアプリケーションの開発手順について説明します。
ここでは、開発環境であるApdesignerの標準サーブレットプロジェクト作成ウィザードでプロジェクトを作成し、JSPファイルを追加してWebアプリケーションを作成します。

プロジェクト作成
Javaファイル編集
JSPファイル作成
JSPファイル編集
クラス作成(ビルド)

プロジェクト作成

1. [スタート]メニューから[プログラム]>[Interstage]>[Apworks]メニュー内の[Apworks]を選択し、Apdesignerを起動します。

2. Apdesignerのメニューから[ファイル]>[新規]>[プロジェクト]を選択します。

3. [新規プロジェクト]ダイアログボックスで[J2EE]>[Webアプリケーションプロジェクト]を選択し、[次へ]をクリックします。

4. [新規]ダイアログボックスの[Webアプリケーションプロジェクト]ページでは、プロジェクトの情報を入力して[次へ]をクリックします。

[新規]ダイアログボックス [Webアプリケーションプロジェクト]ページ

項目名

入力値

プロジェクト名

NumGame

プロジェクトコンテンツ

[ワークスペース内に新規プロジェクトを作成]を選択

5. [新規]ダイアログボックスの[Java設定]ページでは、何も変更せずに[次へ]をクリックします。

6. [選択]ページでは、生成するコードを指定して[終了]をクリックします。

[新規]ダイアログボックス [選択]ページ

項目名

入力値

コード生成

[コード生成を行う]を選択

使用可能なコード生成ウィザード

[サーブレット]を選択

7. [サーブレットプロジェクト]ダイアログボックスの[サーブレットクラス情報]ページでは、サーブレットクラスの情報を設定して[終了]をクリックします。

[サーブレットプロジェクト]ダイアログボックス [サーブレットクラス情報]ページ

項目名

入力値

パッケージ

pkgNumGame

サーブレットクラス

NumGame

文字セット

Shift_JIS

実装するメソッド

[doGet()]を選択

サーブレット呼び出すHTMLファイル

[HTMLファイルの作成]をチェックしない

8. Apdesignerの[パッケージエクスプローラ]ビューで、[NumGame]プロジェクトに以下のファイルが生成されていることを確認してください。

アプリケーションクラス作成

9. Apdesignerの[パッケージエクスプローラ]ビューで[NumGame]を選択し、Apdesignerのメニューから[ファイル]>[新規]>[クラス]を選択します。

10. [新規 Javaクラス]ダイアログボックスの[Java クラス]のページで、作成するJavaクラスの情報を入力して[終了]をクリックします。

[新規 Javaクラス]ダイアログボックス [Java クラス]ページ

項目名

入力値

ソースフォルダ

NumGame/src

パッケージ

pkgNumGameBean

エンクロージング型

チェックしない

名前

NumGameBean

修飾子

[public]を選択
[abstract]、[final]をチェックしない

スーパークラス

Java.lang.Object

インタフェース

指定しない

どのメソッドスタブを作成しますか?

チェックしない(すべて)

現在のプロジェクトのプロパティで構成されたとおりコメントを追加しますか

チェックしない

11. Apdesignerの[パッケージエクスプローラ]ビューで、[NumGame]プロジェクトに以下のファイルが生成されていることを確認してください。

Javaファイル編集

Javaエディタを使用して以下のソースファイルを編集します。

12. Apdesignerの[パッケージエクスプローラ]ビューでソースファイルを右クリックし、[アプリケーションから開く]>[Javaエディタ]を選択します。

[NumGame.java]

package pkgNumGame;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
/** 追加ここから **/
import javax.servlet.RequestDispatcher;
/** 追加ここまで **/
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/** 追加ここから **/
import pkgNumGameBean.NumGameBean;
/** 追加ここまで **/
/**
 * @author
 *
 */
public class NumGame extends HttpServlet {
  /**
   * サーブレットの初期化
   * @param        config  サーブレットのコンフィギュレーション情報
   * @exception    ServletException サーブレット例外が起こった場合
   */
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
  }
  /**
   * HTTP リクエストの処理
   * @param        req  サーブレットへの要求
   * @param        res サーブレットからの応答
   * @exception    ServletException 要求を処理できない場合
   * @exception    IOException 要求の処理中に検出された場合
   */
  public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException,
    IOException {
    HttpSession session = req.getSession(true);
    try {
/** 削除ここから **
      // ヘッダの設定
      res.setContentType("text/html; charset=Shift_JIS");
      res.setHeader("Pragma", "No-cache");
      res.setHeader("Cache-Control", "no-cache");
      res.setDateHeader("Expires", 0);
      // ブラウザ画面に表示
      PrintWriter out;
      out = res.getWriter();
      out.println("<HTML>");
      out.println("<HEAD>");
      out.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">");
      out.println("<TITLE>NumGame</TITLE>");
      out.println("</HEAD>");
      out.println("<BODY>");
      out.println("</BODY>");
      out.println("</HTML>");
** 削除ここまで **/
/** 追加ここから **/
       // アプリケーションオブジェクトの取得
       NumGameBean _application =
                      (NumGameBean) session.getAttribute("gamebean");
      if (_application == null) {
        _application = new NumGameBean();
        session.setAttribute("gamebean", _application);
        _application.init();
      }
      int num;
      try {
        num = Integer.parseInt(getParameter(req, "Number"));
      } catch (NumberFormatException ne) {
        num = 0;
      }
      // JavaBeanのプロパティ設定
      if (num==0){
        _application.init();
      } else {
        _application.check(num);
      }
      String nextPage;
      if (_application.getResult()) {
        nextPage = "/NumGameBeanOut.jsp";
      }else {
        nextPage = "/NumGameBeanRe.jsp";
      }
      // JSPファイル呼び出し
      RequestDispatcher rd = getServletContext().getRequestDispatcher(nextPage);
      rd.forward(req,res);
/** 追加ここまで **/
    } catch (Exception e) {
      // 開発時にエラー情報をブラウザ上に表示したい場合は、
      // 以下のコメント化されている記述を有効にしてください。
      // ただし、HTML画面へのスタックトレースの出力は、セキュリティ上の問題を内包します。
      // 運用時は適切な画面を作成する必要があります。
      // res.setContentType("text/plain; charset=Shift_JIS");
      // PrintWriter out = res.getWriter();
      // e.printStackTrace(out);
      // out.close();
/** 追加ここから **/
      res.setContentType("text/plain; charset=iso-2022-jp");
      PrintWriter out = res.getWriter();
      out.println("アプリケーションエラーが発生しました。ログファイルで内容を確認してください。");
      e.printStackTrace();
      out.close();
/** 追加ここまで **/
    }
  }
  /**
   * サーブレットの後処理
   */
  public void destroy() {
  }
  /**
   * サーブレット情報の取得
   * @return    サーブレット情報
   */
  public String getServletInfo() {
    return "A NumGame";
  }
  /**
   * パラメタを獲得する。
   * 
   * @param    name    パラメタの名前
   * @return    パラメタの値
   */
  protected static String getParameter(HttpServletRequest req, String name) {
    String value = req.getParameter(name);
    if (value == null) {
      return null;
    }
    String encodedValue;
    try {
      encodedValue = new String(value.getBytes("iso-8859-1"), "Shift_JIS");
    } catch (UnsupportedEncodingException e) {
      // エンコードに失敗したため、未エンコードの値を設定する。
      encodedValue = value;
    }
    return encodedValue;
  }
}

[NumGameBean.java]

package pkgNumGameBean;
/** 追加ここから **/
import java.util.Random; 
/** 追加ここまで **/
public class NumGameBean {
/** 追加ここから **/
    protected boolean[] buf = new boolean[9];
    protected int answer = 0;
    protected boolean result = false;
    protected int count = 0;
    public NumGameBean() {
    }
    public void init() {
        answer = (new Random().nextInt(9))+1;
        count = 0;
        result = false;
        for (int i=0; i<9 ; i++) {
            buf[i] = false;
        }
    }
    public void check(int ans) {
        count ++;
        if (answer == ans ) {
            result = true;
            return;
        }
        buf[ans-1] = true;
    }
    public boolean getResult() {
        return result;
    }
    public int getCount() {
        return count;
    }
    public boolean getBuf(int num) {
        return buf[num];
    }
/** 追加ここまで **/
}

13. Apdesignerのメニューから[ファイル]>[すべて保存]を選択し、編集したファイルを保存します。

JSPファイル作成

以下のJSPファイルを作成し、プロジェクトに追加します。

14. Apdesignerのメニューから、[ファイル]>[新規]>[JavaServer Pages]を選択します。

15. [新規JSP]ダイアログボックスで[JavaServer Pages]を選択して[次へ]をクリックします。

16. [JSP生成ウィザード]ダイアログボックスの[JSP情報]ページでは、JSP情報を入力して[終了]をクリックします。

[JSP生成ウィザード]ダイアログボックス [JSP情報]ページ

項目名

入力値

ソースフォルダ

NumGame/ContextRoot

ファイル名

NumGameBeanOut

文字セット

Shift_JIS

17. 14から16の手順を繰り返して、NumGameBeanRe.jspを作成します。

[JSP生成ウィザード]ダイアログボックス [JSP情報]ページ

項目名

入力値

ソースフォルダ

NumGame/ContextRoot

ファイル名

NumGameBeanRe

文字セット

Shift_JIS

18. Apdesignerの[パッケージエクスプローラ]ビューで、[NumGame]>[ContextRoot]にJSPファイルが生成されていることを確認してください。

JSPファイル編集

JSPエディタを使用して以下のJSPファイルを編集します。

19. Apdesignerの[パッケージエクスプローラ]ビューでJSPファイルを右クリックし、[アプリケーションから開く]>[テキストエディタ]を選択します。

[NumGameBeanOut.jsp]

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<%@ page contentType="text/html; charset=Shift_JIS" %>
<!--  追加ここから -->
<jsp:useBean id="gamebean" scope="session" class="pkgNumGameBean.NumGameBean"></jsp:useBean>
<!--  追加ここまで -->
<!--  削除ここから --
<%!
    /**
     * パラメタを獲得する。必要に応じて、このメソッドで取得した各入力文字列に'<'、'>'、'&' が
     * 含まれていないかどうかのチェックをする必要があります。
     */
    protected String getParameter(ServletRequest req, String name) throws Exception {
        String value = req.getParameter(name);
        if (value == null)
            return null;
        return new String(value.getBytes("iso-8859-1"), "Shift_JIS");
    }
%>
  --  削除ここまで -->
<TITLE>NumGameBeanOut</TITLE>
</HEAD>
<BODY>
<!--  削除ここから --
<H1>NumGameBeanOut</H1>
<BR>
  --  削除ここまで -->
<!--  追加ここから -->
<CENTER>
<BR>
<FONT size="5"><%= gamebean.getCount() %>回目で正解です。</FONT><BR><BR>
<HR>
<A href="game?Number=0">再チャレンジ</A><BR>
</CENTER>
<!--  追加ここまで -->
</BODY>
</HTML>

[NumGameBeanRe.jsp]

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<%@ page contentType="text/html; charset=Shift_JIS" %>
<!--  追加ここから -->
<jsp:useBean id="gamebean" scope="session" class="pkgNumGameBean.NumGameBean"></jsp:useBean>
<!--  追加ここまで -->
<!--  削除ここから --
<%!
    /**
     * パラメタを獲得する。必要に応じて、このメソッドで取得した各入力文字列に'<'、'>'、'&' が
     * 含まれていないかどうかのチェックをする必要があります。
     */
    protected String getParameter(ServletRequest req, String name) throws Exception {
        String value = req.getParameter(name);
        if (value == null)
            return null;
        return new String(value.getBytes("iso-8859-1"), "Shift_JIS");
    }
%>
  --  削除ここまで -->
<TITLE>NumGameBeanRe</TITLE>
</HEAD>
<BODY>
<!--  削除ここから --
<H1>NumGameBeanRe</H1>
<BR>
  --  削除ここまで -->
<!--  追加ここから -->
<CENTER>
<FONT size="6"><STRONG>数当てゲーム</STRONG></FONT><BR><BR><BR>
<FONT size="5">番号を選択して下さい。</FONT><BR><BR>
<TABLE border="2">
  <TBODY><TR>
    <%
    for (int i=1; i<=9; i++){
      out.println("<TD align=\"middle\" height=\"50\" valign=\"center\" width=\"50\">");
      if ( gamebean.getBuf(i-1) ){
        out.println("<FONT size=\"4\" color=\"RED\">NG</FONT>");
      } else {
        out.println("<FONT size=\"6\"><A href=\"game?Number="+i+"\">"+i+"</A></FONT>");
      }
      out.println("</TD>");
      if (0 == (i%3) && i !=9 ) out.println("</TR><TR>");
    }
    %>
  </TR></TBODY>
</TABLE><BR>
<FONT size="5"><%= gamebean.getCount() %>回不正解</FONT><BR><BR>
<HR>
</CENTER>
<!--  追加ここまで -->
</BODY>
</HTML>

20. Apdesignerのメニューから[ファイル]>[すべて保存]を選択し、編集したファイルを保存します。

クラス作成(ビルド)

ビルドを実行してクラスファイルを作成します。
Apdesignerの初期状態では、ファイルの保存時に自動的にビルドが行われるようにオプションが設定されており、ビルド時にWARファイルを作成するようにビルドツールが設定されています。
そのため、Apdesignerのメニューで[プロジェクト]>[自動的にビルド] がチェックされている場合は、Webアプリケーションの実装を保存したときにエラーが発生していなければ、WARファイルが作成されています。[問題]ビューにエラーなどのメッセージが表示されていないことを確認します。
[プロジェクト]>[自動的にビルド]がチェックされていない場合は、Apdesignerの[パッケージエクスプローラ]ビューで[NumGame]プロジェクトを選択し、メニューから[プロジェクト]>[プロジェクトのビルド]を選択します。ビルド終了後、[問題]ビューにエラーなどのメッセージが表示されていないことを確認します。


目次 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2006