広告

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2010年12月16日

    Java総合講座 - 初心者から達人へのパスポート
                  vol.212

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


========================================================
◆ 00.お知らせ(バックナンバーの閲覧に関して)
========================================================


-------------------------------------------------------
・現在、このメールマガジンは以下の2部構成になっています。
[1] 当初からのコース:vol.xxx(xxxは番号)が振られています。
   これは現在、中級レベルになっています。
[2] 2009年11月開講コース:xxx号(xxxは番号)が振られています。
   これは現在、初心者向けのレベルになっています。
・このメールマガジンは、画面を最大化して見てください。
小さな画面で見ていると、不適切な位置で行が切れてしまう
など、問題を起すことがあります。
・このメールマガジンに掲載されているソース・コード及び
文章は特に断らない限り、すべて筆者が著作権を所有してい
ます。また、これらのソース・コードは学習用のためだけに
提供しているものです。
-------------------------------------------------------


========================================================
◆ 01.Strutsのアプリケーション開発(プロジェクト:StrutsShop)
========================================================

さて、StrutsTestCaseでテストできないもので重要なものがもう一つ
あります。
セッションを終えるとき(今回のアプリケーションでは、買物の注文が完了した
とき)にちゃんとsessionオブジェクトが破棄(正確には無効化)されるかどうか
テストしておく必要がありますが、(Actionクラスの中でsessionオブジェクトの
無効化を行っている場合はStrutsTestCaseでは検証できるのですが)JSPの中で
sessionオブジェクトの無効化を行っている場合はStrutsTestCaseでは検証でき
ません。

したがって、これもやはりTomcatを起動してテストすることになります。


ではテストしてみましょう。(今度はMySQLを起動している状態で行います。)

念のため、Tomcatの開始から手順を書いておきます。

(1) Eclipseの「サーバー」ビューの中の「ローカル・ホストのTomcat v5.5サーバー」
を右クリックし、「開始」を選択します。しばらくして、

ローカル・ホストのTomcat v5.5サーバー[始動済み,同期済み]

というように、後ろに「始動済み」の表示が出たら、Tomcatの起動が完了しています。

(2) Webブラウザー(Internet Explorer)を起動して、URL

http://localhost:8080/StrutsShop/itemSelect.jsp

を入力しましょう。

(3) 「商品の検索」のWebページが開いたら、そのまま「商品検索」ボタンをクリック
して、次の「商品のリスト」のWebページでは全て(製品001と製品002)の選択欄に
チェックマークを入れて「買物かごに入れる」ボタンをクリックしましょう。

(4) 「ショッピング・カートの中のリスト」のWebページが開いたら、そのまま
「これらの商品を購入する」ボタンをクリックしましょう。

(5) 「購入する商品」のWebページが開いたら、「お支払い方法」欄は
「クレジット・カード払い」のままにし、「会員登録済み」を選択(その左側
の丸の中をクリック)し、「ユーザーID」欄には、以前会員登録した
user01
を入力し、「パスワード」欄には、以前登録した正しいパスワード
pass01
を入力し、「最終購入確認または新規会員登録の画面に進む」ボタンを
クリックしましょう。

(10) 購入(注文)内容の確認のWebページが開いたら、「購入(注文確定)する」ボタン
をクリックして下さい。

(11) 注文完了のWebページ(「下記のご注文を受け付けました。」のWebページ)が
正常に表示されることを確認して下さい。
続いて、このWebページ上の「トップ・ページ(商品検索のページ)に戻る」を
クリックして、再度「商品の検索」のWebページに戻ることにしましょう。

(12) 「商品の検索」のWebページが開いたら、「カテゴリー」は「文具」を選択し、
「キーワード」は何も入力せずに、「商品検索」ボタンをクリックして、
次の「商品のリスト」のWebページでは全て(製品005と製品006)の選択欄にチェック
マークを入れて「買物かごに入れる」ボタンをクリックしましょう。

(13) 「ショッピング・カートの中のリスト」のWebページが開いたら、リストの中を
確認しましょう。(12)で買物かごに入れた製品005と製品006だけがリストされている
はずです。
もし、製品005と製品006だけでなく(3)で買物かごに入れた製品001と製品002もリスト
されていたら、(11)で注文を完了した時にsessionオブジェクトが破棄(正確には
無効化)されずに買物かごの中のデータがそのまま残っていたことになります。


どうでしょう。ちゃんと期待通りに動作していますね。
これでsessionオブジェクトの無効化がちゃんと動作していることが検証
できました。


◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆

でも、これだけでは本当にsessionオブジェクトの無効化が動作しているのか、
ちょっと不安がありますね。もしかしたら、sessionオブジェクトは無効化して
いないのに偶然買物かごが正常な動きをしただけかも知れない・・・なんて
心配する人もいるかも知れません。

そこで、こういう場合は、デバッガーを動かしながら確認します。

では、やってみましょう。
まず、いったんTomcatを停止しておいて下さい。
(Eclipseの「サーバー」ビューの中の「ローカル・ホストのTomcat v5.5サーバー」
を右クリックし、「停止」を選択します。)

そして、completeOrder.jspを開きましょう。なお、開くときには
(Amateras JSPエディターではなく)JSPエディターを使って下さい。
すなわち、プロジェクト・エクスプローラーのStrutsShop(プロジェクト)
の配下のWebContentの配下のcompleteOrder.jspを右クリックし、
「アプリケーションから開く」→「JSPエディター」を選択すること
によって開きます。
(Amateras JSPエディターではデバッガーが有効に使えません。)

そして、そのcompleteOrder.jspのソース・コードの62行目あたりを
見てみましょう。

   <% session.invalidate(); %>

という行がありますね。これがsessionオブジェクトを無効化(invalidate)して
いる行です。この行の左側の(行番号が表示されている所の左隣の)灰色のところ
をダブル・クリックすることによってブレーク・ポイントを入れて下さい。
(デバッガーやブレーク・ポイントが何だったか忘れた人はvol.092を復習のこと)

そして、以下の手順でテストしましょう。

(1) Eclipseの「サーバー」ビューの中の「ローカル・ホストのTomcat v5.5サーバー」
を右クリックし、(「開始」ではなく)「デバッグ」を選択します。しばらくして、

ローカル・ホストのTomcat v5.5サーバー[デバッグ,同期済み]

というように、後ろに「デバッグ」の表示が出たら、Tomcatの起動が完了しています。

(2) Webブラウザー(Internet Explorer)を起動して、URL

http://localhost:8080/StrutsShop/itemSelect.jsp

を入力しましょう。

(3) 「商品の検索」のWebページが開いたら、そのまま「商品検索」ボタンをクリック
し、次の「商品のリスト」のWebページでは全て(製品001と製品002)の選択欄に
チェックマークを入れて「買物かごに入れる」ボタンをクリックしましょう。

(4) 「ショッピング・カートの中のリスト」のWebページが開いたら、そのまま
「これらの商品を購入する」ボタンをクリックしましょう。

(5) 「購入する商品」のWebページが開いたら、「お支払い方法」欄は
「クレジット・カード払い」のままにし、「会員登録済み」を選択(その左側
の丸の中をクリック)し、「ユーザーID」欄には、以前会員登録した
user01
を入力し、「パスワード」欄には、以前登録した正しいパスワード
pass01
を入力し、「最終購入確認または新規会員登録の画面に進む」ボタンを
クリックしましょう。

(10) 購入(注文)内容の確認のWebページが開いたら、「購入(注文確定)する」ボタン
をクリックして下さい。

Eclipseのほうで「パースペクティブ切り替えの確認」ウインドウが
表示されたら、「はい」ボタンをクリックして下さい。

(11) すると、Eclipseは先ほどのcompleteOrder.jspファイルのブレーク・ポイント
を入れた行、すなわち

   <% session.invalidate(); %>

という行を(水色の矢印が)指し示した状態でストップするはずです。(もしこの
アプリケーションに何らかの不具合があってsessionオブジェクトの無効化ができ
ない場合には、ここには来ないはずであり、ここが指し示されているということは
これからこの行が実行される(sessionオブジェクトの無効化が実行される)段階
になっていることを意味します。)

ここでsessionオブジェクトの中身を調べるには、「変数」ビュー(「変数」タブの下
の領域)の中のsessionの配下を展開して見れば、さらにそのattributesの配下のtable
の中に"USER"や"ORDER"をkeyとして持つHashtableの要素がはいっているはずです。
確認してみて下さい。

続いて、ここで、F6キーを押すか、または、メニュー・バーの「実行」→「ステップ・オーバー」
を選択しましょう。
すると、指し示す位置がその下の行に移りますね。これは先ほどの

   <% session.invalidate(); %>

の行が実行されたことを意味します。

このとき「変数」ビューの中のsessionの配下を見ると、先ほどの"USER"や"ORDER"は
無くなっていることがわかるでしょう。また、isValidの値がtrueからfalseに変わって
いるはずです。これで確かにsessionが実際に無効化されたことが確認できました。

最後にF8キーを押すか、または、メニュー・バーの「実行」→「再開」を選択しま
しょう。

(11) 注文完了のWebページ(「下記のご注文を受け付けました。」のWebページ)が
正常に表示されますね。


こうして、ちゃんとsessionオブジェクトの無効化が実行されていることが
デバッガーで確認できました。


このように、WTPを使うとJavaのファイルだけでなくJSPに対してもデバッガーを
使えるので便利です。これもWTPがtomcatPluginに取って代わるツールであること
がわかる一つの例です。
(tomcatPluginがサーブレットの開発を主体とするのに対し、WTPはサーブレット
だけでなくJSPやEJB(Enterprise JavaBeans)、JSF(JavaServer Faces)といっ
た、J2EE全般に渡っての開発を支援する機能を提供してくれるツールです。
WTPはJ2EE全般に渡っての開発を支援するツールなので、tomcatPluginでは
できなかったJSPの構文をチェックしたり、JSPにブレークポイントを置いて
デバッグしたり、といった機能も提供してくれるのです。)



では、EclipseをJava EEのパースペクティブに戻しておいてから、Tomcatを停止して
おいて下さい。



========================================================
◆ 02.リファレンス・マニュアルの自動生成(Javadocツールの使い方)
========================================================

さて、今回は以前(vol.125で)ちょっとふれたJavadocというツールの使い方
についてお話しておきましょう。

上の小タイトルにある「リファレンス・マニュアル(reference manual)」
(または単に「リファレンス」と略す)とは、日本語では「参考書」のような
意味(ただしmanualの部分は、より正確には取扱説明書というような意味)に
なりますが、JavadocはJavaで書かれたクラスやインターフェースのリファレン
ス・マニュアル(Javaでは通常APIドキュメント(API document)とかAPI仕様(書)
(API specification)と呼んでいる)を自動生成するツールです。
Javadocは、Javaのソース・コード上に一定のルールに従って書かれたコメント
に基づいてドキュメントを(HTMLの形式で)生成します。

Javadocは単独のコマンド(javadoc)としてコマンド・プロンプトから実行
することもできますが、Eclipseの中にも組み込まれているので、Eclipse内
で実行することもできます。
(javadocコマンドの詳細を知りたい場合は、
http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/javadoc.html
などを参照して下さい。)


というわけで、実際にEclipseでこの機能を使ってみましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆

では、Eclipseでjp.co.flsi.lecture.struts.dbパッケージのDbManager.javaファイル
を開いて、その中のクラス文の行、すなわち

public class DbManager {

という行の上に

/**

と入力し、この行の右端にカーソルがある状態でEnterキーを押してみて
下さい。すると、

/**
 *
 * @author xxxx
 *
 */

というようなコメント行が自動的に現れるでしょう。ただし、xxxxのところには
PCのユーザー名が入るはずです。

このようの/**の行から始まり*/で終わるコメントをドキュメンテーション・コメント
(documentation comments)と呼び、これがJavadocが読み取ってドキュメントを
生成するためのコメントです。

ちなみに、上のコメントのうち@authorはJavadocが認識するタグで、著作者(author)
を指定するためのものです。


続いて、connect()メソッドの行、すなわち

   public void connect() throws StruShopDbException, StruShopOtherException {

という行の上にも

/**

と入力し、この行の右端にカーソルがある状態でEnterキーを押してみて
下さい。すると、

   /**
    *
    * @throws StruShopDbException
    * @throws StruShopOtherException
    */

というようなコメント行が自動的に現れるでしょう。ここの@throwsというタグ
は文字通りこのメソッドがthrowsする例外、すなわちthrows節に指定された
例外を記述するものです。このように、Eclipseが自動的にメソッドの定義に
付随する情報を読み取ってタグに記述してくれるので楽ですね。


@authorや@throwsの他にもいくつかのJavadoc用のタグがありますが、これから
実際にソース・コードを編集しながら解説することにしましょう。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆

では、このDbManager.javaファイル全体を下記のように編集してみて下さい。

--------------------------------------------------------
package jp.co.flsi.lecture.struts.db;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import jp.co.flsi.lecture.struts.StruShopOtherException;

import org.apache.log4j.Logger;

/**
 * データベースにアクセスするためのクラスです。
 * データベースへの接続と切り離しを行います。
 * @author フューチャー・ライフ株式会社
 * @version 1.0
 */
public class DbManager {

   /**
    * データベースの接続オブジェクト
    * @since 1.0
    */
   protected Connection conn = null;

   /**
    * ログ出力のためのオブジェクト
    * @since 1.0
    */
   private static Logger logger = Logger.getLogger(DbManager.class);

   /**
    * データベースへの接続を行います。
    * @throws StruShopDbException
    * @throws StruShopOtherException
    * @since 1.0
    */
   public void connect() throws StruShopDbException, StruShopOtherException {
      logger.info("Start ...............");
      try{
         if (conn == null || conn.isClosed()) {

            if ("junit".equals(System.getProperty("ut"))) {
                  Class.forName("com.mysql.jdbc.Driver");
                  conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/STRUSHOP", "root", "rootpass");
                  conn.setAutoCommit(false);
               return;
            }

            Context initCtx = new InitialContext();
            if(initCtx == null) throw new StruShopDbException("Error: InitialContext could not be generated!");
            DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/STRUSHOP");
            if (ds != null) {
               conn = ds.getConnection();
               if(conn == null) throw new StruShopDbException("Error: Connection does not exist!");
               else logger.info("Connection has been gotten.");
            }
            else {
               throw new StruShopDbException("Error: DataSource does not exist!");
            }
         }
      } catch (NamingException e) {
         logger.error(e);
         throw new StruShopDbException("Error: Connect() failed!", e);
      } catch (SQLException e) {
         logger.error(e);
         throw new StruShopDbException("Error: Connect() failed!", e);
      } catch (StruShopDbException e) {
         logger.error(e);
         throw new StruShopDbException("Error: Connect() failed!", e);
      }
      catch (Throwable e) {
         logger.error(e);
         throw new StruShopOtherException("Error: Connect() failed!", e);
      }
      finally {
         logger.info("End ...............");
      }
   }

   /**
    * データベースからの切り離しを行います。
    * @since 1.0
    */
   public void disconnect() {
      logger.info("Start ...............");
      try {
         if (conn != null && !conn.isClosed()) conn.close();
      } catch(SQLException e) {
         logger.error(e, e);
      }
      catch (Throwable e) {
         logger.error(e, e);
      }
      finally {
         logger.info("End ...............");
      }
   }

}
--------------------------------------------------------

上のソース・コードでは新たに@versionというタグが出てきましたが、これは
文字通りプログラム(クラス)のバージョンを記述するためのものです。
また@sinceというタグはそのフィールドやメソッドなどが最初に導入された
バージョンを記述するためのものです。


なお、このようにclass文の頭につけるコメントをクラス・コメント(class comments)
メソッドの頭につけるコメントをメソッド・コメント(method comments)、フィールド
の頭につけるコメントをフィールド・コメント(field comments)というように呼び、
これらはそれぞれクラス・ヘッダー、メソッド・ヘッダー、フィールド・ヘッダー
というふうに呼ばれることもあります。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆

続いて、jp.co.flsi.lecture.strutsパッケージのItemSelectForm.javaファイル
を開きましょう。

今度は、別のやり方でJavadoc用のコメントを付加してみましょう。

Eclipseのメニュー・バーから「Limy」→「既存getter/setterメソッドのJavadocコメントを生成」
を選択します。
すると、たとえば


   /**
    * keywordを設定します。
    * @param keyword keyword
    */
   public void setKeyword(String keyword) {
      this.keyword = keyword;
   }

のように各getter/setterメソッドにメソッド・ドキュメントが自動生成されますね。
(ここで生成された@paramや@returnといったタグについては後でまとめて説明します。)

このようにLimyというプラグイン(我々が使っているPleiades All in One 日本語ディストリビューション
のEclipseには組込み済み)にはJavadocを支援する便利な機能も組み込まれています。


続いて、

public class ItemSelectForm extends ActionForm {

という行のItemSelectFormの中にカーソルを入れるか、または「アウトライン」ビュー
の中のItemSelectFormを選択してから、メニュー・バーの「Limy」→
「メンバーにJavadocコメントを付加」を選択してみて下さい。
logger、keyword、categoryNumの各フィールドやreset()メソッドについても同様の
操作をしてみて下さい。コメントが自動生成されますね。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆

では、これらをさらに編集してItemSelectForm.javaファイル全体を下記のように
してみましょう。

--------------------------------------------------------
package jp.co.flsi.lecture.struts;

import java.io.UnsupportedEncodingException;
import java.util.Vector;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import jp.co.flsi.lecture.struts.db.Category;
import jp.co.flsi.lecture.struts.db.CategoryDbManager;
import jp.co.flsi.lecture.struts.db.StruShopDbException;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/**
 * itemSelect.jspに対するActionFormです。
 * itemSelect.jspによって生成されるWebページのFormの情報を管理します。
 * @author フューチャー・ライフ株式会社
 * @author セルゲイ・ランダウ
 * @version 1.0
 */
public class ItemSelectForm extends ActionForm {

   /**
    * ログ出力のためのオブジェクトです。
    */
   private static Logger logger = Logger.getLogger(ItemSelectForm.class);

   /**
    * Formのキーワード(keywordプロパティー)の値を保持します。
    */
   private String keyword = null;

   /**
    * Formのカテゴリーの番号(categoryNumプロパティー)の値を保持します。
    */
   private String categoryNum = null;

   /**
    * Formの初期設定を行います。
    * @param mapping ActionMappingオブジェクト
    * @param request HttpServletRequestオブジェクト
    * @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
    * @since 1.0
    */
   public void reset(ActionMapping mapping, HttpServletRequest request) {
      logger.info("Start ...............");
      CategoryDbManager dbManager = new CategoryDbManager();
      String exceptionInfo = "";
      request.setAttribute("exceptionInfo", exceptionInfo);
      try {
         request.setCharacterEncoding("UTF-8");
         ServletContext serv = getServlet().getServletContext();
         Vector<Category> categoryList = (Vector<Category>) serv.getAttribute("categoryList");
         if (categoryList == null) {
            dbManager.connect();
            categoryList = dbManager.getDataByName("");
            serv.setAttribute("categoryList", categoryList);
         }
      } catch (UnsupportedEncodingException e) {
         logger.error(e, e);
      } catch (StruShopDbException e) {
         logger.error(e, e);
         exceptionInfo = "systemerror";
         request.setAttribute("exceptionInfo", exceptionInfo);
      }
      catch (StruShopOtherException e) {
         logger.error(e, e);
         exceptionInfo = "systemerror";
         request.setAttribute("exceptionInfo", exceptionInfo);
      }
      finally {
         try {
            dbManager.disconnect();
         }
         catch (Exception e) {
            logger.info("Disconnect failed or there is no connection.");
         }
         logger.info("End ...............");
      }
   }

   /**
    * keywordを設定します。
    * @param keyword Formのキーワード
    */
   public void setKeyword(String keyword) {
      this.keyword = keyword;
   }

   /**
    * keywordを取得します。
    * @return keyword
    */
   public String getKeyword() {
      return keyword;
   }

   /**
    * categoryNumを設定します。
    * @param categoryNum Formのカテゴリーの番号
    */
   public void setCategoryNum(String categoryNum) {
      this.categoryNum = categoryNum;
   }

   /**
    * categoryNumを取得します。
    * @return categoryNum
    */
   public String getCategoryNum() {
      return categoryNum;
   }

}
--------------------------------------------------------

ここで@paramというタグはメソッドの引数(パラメータ)を記述するための
ものです。
上のソース・コードのように引数が複数ある場合は、このタグを複数並べる
ことになります。
ちなみに、上のソース・コードのように@authorタグも複数並べられます。

また、@seeというタグは関連項目を記述するためのものです。
ここでは、reset()メソッドがorg.apache.struts.action.ActionFormの
reset()メソッドをオーバーライドしたものなので、その情報を記述する
ために@seeタグが組み込まれています(先ほどLimyに自動的に挿入させた
ものです)。

あと、@returnというタグはメソッドの戻り値を記述するためのものです。



他にもコメントを記述すべきクラスはたくさんありますが、面倒なので
Javadoc用のコメントを解説するのはここまでとし、StrutsShopプロジェ
クトの残りのクラスについては、各自が自由課題としてコメントを書いて
ください。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆

では、リファレンス・マニュアル(API仕様)を自動生成してみましょう。

(1) Eclipseのメニュー・バーから「プロジェクト」→「Javadocの生成」を
選択して下さい。

(2) 「Javadocの生成」ウインドウが開いたら、「Javadocが生成される型の選択」欄
の中のStrutsShopの左側の枠の中を何度かクリックすることによってチェック・マーク
を入れて下さい。(既にチェック・マークが入っているように見えてもその背景が灰色
の状態では一部のクラスやパッケージしか選択されていませんので、何度かクリックして
チェック・マークを入れ直すのです。)
このチェック・マークの入ったものがドキュメント生成の対象になります。
(なお、StrutsShopの配下のsrcの配下のjp.co.flsi.lecture.struts.dbを選択し、
その右側のクラス名のリストの中からDbManagerだけにチェック・マークを入れる
というふうにクラスやパッケージを個別に指定することもできます。)

それから、「次の可視性を持つメンバーのJavadocを作成」はPrivateを選択し
(これですべてのメンバーのドキュメントが生成される)、
「宛先」欄(C:\JavaWorkSpace\StrutsShop\docになっているはず)を確認して、
「次へ」ボタンをクリックして下さい。

(3) 「基本オプション」欄と「これらのタグ」欄のすべての項目にチェック・マーク
が入っていることを確認し、「次へ」ボタンをクリックして下さい。

(4) 「VMオプション」の欄に

-encoding UTF-8

を入力し、「完了」ボタンをクリックして下さい。
(ソース・コードのエンコーディングがUTF-8なので、このオプションの指定が
必要です。これを間違えるとドキュメントの生成に失敗します。)

(5) もし「Javadocロケーションの更新」ウインドウが開いたら、「すべてはい」ボタン
をクリックしましょう。


しばらくすると、先ほどの「宛先」欄に指定されていたフォルダー

C:\JavaWorkSpace\StrutsShop\doc

の中に各種HTMLファイルが生成されているので、そのうちの

index.html

を(エクスプローラー内でダブル・クリックすることによって)開いて
みて下さい。なお、WebブラウザーのエンコーディングがUTF-8でないと
文字化けしますので、注意して下さい。

「すべてのクラス」フレームの中でDbManagerやItemSelectFormを選択して
みましょう。
先ほどソース・コードに入力しておいたコメントの内容がちゃんと組み込まれて
いることがわかりますね。



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆

なお、タグの記述には順番が決まっていますので、好き勝手な順番に
並べ替えないように注意して下さい。


今回説明したもの以外にもタグがありますが、詳しくは、

http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html

などを参照して下さい。
(ちなみに、以前もお話したようにSun Microsystems社はOracle社に買収されましたので
その各Webページも上のURLのように段々とOracle社の配下に収められつつあります。)



◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆ ◆


(次回に続く)



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2010 Future Lifestyle Inc. 不許無断複製