关于作者

姓名:马云生

性别:男

出生日期:1979-12-27

地区:日本-东京

联系电话:

QQ:--

婚否:已婚
用户名:dleie
笔名:气度侠
地区: 日本-东京
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



JAVA技术连载

访问统计:
文章个数:187
评论个数:5
留言条数:0




Powered by BlogDriver 2.1

知识共享园地

 

欢迎访问知识共享园

文章

感到心在流泪

    也许我是一个比较爱伤感的男人,也许我经历的和我周围人经历的事确实比较使人会有感触.

  现在回顾起来,从小到大,从过去到现在,我走的路还是比较平坦,虽然当中也有些事情在当时看来是比较困难,曾使我一度伤心失望的.但是现在回忆起来都非常模糊不清了,这说明我走的路还是比较好,老天比较公平的,但是,有一件事就是一直都觉得老天对我不够公平,那就是我生长在一个比较贫穷的农村.虽然现在我的月收入虽然已经超过2万元,家里有一对双胞胎宝贝,一家四口生活还算比较幸福,但是我始终认为如果我生活在一个比较富裕的家庭里,也许我生活的会更好.

  直到今天,无意中看到了初中好朋友的BLOG才知道,原来我是多么的幸福,上天对我已经是非常好了,在初中好朋友了BLOG里,他写到了纪念他已经离开人世7年的母亲,我看到这篇文章我才知道,自己生活在有母亲,有父亲,兄弟姐妹都有的家庭里已经是多么的幸福,上天对我是多么的好了,我真的不知道,如果我的母亲不在了,我的生活我将会如何度过,我是不是还会有今天这样的幸福生活.

     当自己觉得上天对自己多么不公,自己是多么不幸时候,都要想一想比你更不幸的人大有人在时,你就应该满足,你就应该珍惜现在的你,和你的生活.不要在去埋怨,不要再去伤心,要努力才能幸福.

- 作者: 气度侠 2007年05月3日, 星期四 14:42  回复(0) |  引用(0) 加入博采

C++によるプログラミング入門4
こんにちは。少し退屈してきたかなと心配もしています。プログラミングの勉強は、はじめがなかなか大変です。逆に、とてもおもしろいと思っている人もいるでしょう。(私の「講義」がいいというのではなくて、です。)その場合は自分に才能があると思ってよろこんでください。人生における最大の才能は「おもしろい」と思う性格でしょう。

 今日は「オブジェクト指向」という言葉についての一応の前置きです。

 プログラミングには「オブジェクト指向」という流儀があります。そして、C++はまさにオブジェクト指向に都合がよい言語なのです。(そのように作られた言語なのです。)(注:「C++はオブジェクト指向に都合がよい」ということを「C++はオブジェクト指向をサポートする」などといいます。初めて聞くと、何のことだかわからなくてびっくりしますよね。)
 実は、C++では、オブジェクト指向とはまったく関係ないプログラミング方法も可能なのですが、私の講義ではオブジェクト指向型のプログラミングを考えます。わざわざ「オブジェクト指向」というとものすごいことに聞こえるかもしれませんが、今では普通にある技術のひとつにすぎません。

 では、そのオブジェクト指向とはどういうことでしょうか? それは、あれこれ説明を聞くより、C++というすばらしい言語で、まず、実体験してみるのがよいと思うのです。

 要するに、私の講義ではオブジェクト指向型のプログラミングをしようと思いますが、オブジェクト指向についての解説をすぐにはしないということになります。ただ、指針は必要でしょうから、言葉だけあげておきます。それは、

 「C++でのオブジェクト指向型プログラムとは、クラス継承仮想関数を(有効に)使ったプログラムである。」

となります。クラス、継承、仮想関数はこれから説明しますので、安心してください。
 なお、もう少し一般的な言い方では、「オブジェクト指向は、クラス、継承、ポリモーフィズム」などとも言います。ポリモーフィズムの意味もあとで説明しますが、C++においてポリモーフィズムを成立させるための中心的な仕組みが仮想関数なのです。

 特に「クラス」はオブジェクト指向の出発点(終点ではない)なので、いやがらずについてきてください。(これは特に他の言語をしっている経験者へのコメントです。)
 ということで、次回はクラスについてです。

- 作者: 气度侠 2006年10月14日, 星期六 10:43  回复(0) |  引用(0) 加入博采

C++によるプログラミング入門3
こんにちは。前回は画面への出力を見ました。今回はキーボードから入力する方法を学びます。

 今回は「コンピュータが名前をきいて、それに答えると、コンピュータがあいさつする」というようなプログラムを考えてみましょう。まず、コンピュータは本当に質問したりしませんから、そのように見せかける必要があります。それは前回やったcoutでできそうです。
 しかし、「質問された人」(これからは、「ユーザ」といいます)の入力はどうやって受け取ればよいでしょう。入力を受け取るためには、まず、入力をいれる「いれもの」が必要です。
 実は、名前のような文字の列をいれる「いれもの」は

   string name;

などと書くことができます。

 ここでstringは、「文字列」という意味です。こうすると、「文字列」をいれる「いれもの」であるnameができることになっているのです。stringは文字列を表わすと決まっているので、これを変えることはできません。しかし、nameはプログラマがかってに作る「いれもの」の名前なので、なんでもかまいません。ここでは、名前のいれものなので、nameとしただけです。(注:ちなみに、文字列のいれものとして、配列というものを使う方法もあります。新しいC++では、stringを使う方が一般的ですが、細かい操作を効率よくする場合などには、配列の方法も役に立ちます。これに関しては、旧作のC++入門を参照してください。こちらでは、stringでいきます。また、時間ができたらこちらでも説明するつもりです。)
 ただし、stringを使うときには、

   #include <string>

という行を上のほうに書くことになっています。これは、「stringを使うために必要な情報を取って来い」という程度の意味ですが、これも前回書いた「おまじない」の一種と考え、最初は気にせず使っていればよいと思います。(下でもう少し説明します。)
 ということで、とりあえず、先のプログラムを完成させてみます。考えるのはプログラムの解説を見てからにしてください。

//hello2.cpp
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string name;
    cout << "こんにちは。私はコンピュータです。" <<endl;
    cout << "あなたの名前を入力してください。" <<endl;
    cin >> name;
    cout<<name<<"さん。よろしく。"<<endl;
}

 プログラムの本体は、mainの中にあるのでした。mainの中の最初の行「string name;」はnameという「いれもの」の定義です。これ自体は、内部の処理なので、画面には何も出力されません。その後の2行目3行目の「cout << "..." << endl;」が画面に字を出力するのでした。
 そのため、このプログラムをコンパイル(コンパイル+リンクを簡単に「コンパイル」とだけ言うことにします)して実行すると、まず画面に

こんにちは。私はコンピュータです。
あなたの名前を入力してください。

と出力されます。
 それからmainの中の4行目「cin >> name;」が実行されます。これは、「ユーザの入力を待ち、入力があれば、それをnameに格納する」という意味なのです。つまり、ここで、プログラムはユーザの入力待ちになり、いったん止まります。そして、ユーザが自分の名前をキーボードで書き込みエンターキー(リターンキー)を押すと、その文字列がnameに格納されるのです。
 すると、すぐに最後の行が実行されてしまいます。これはいれられた名前のあとに続けて、「さん。よろしく。」と出力するので、例えばユーザが「小林」と入力していれば、

小林さん。よろしく。

と画面に出ることになります。以上、なんとなくでもわかったら、実験してみてください。プログラムを学ぶ基本は自分で入力し、コンパイルし、実行することです。

Fig.1 hello2.exeの実行例

 実は、cinは、キーボードを表わしているのです。そして、>>は「押し込め」とか「流し込め」という意味です。したがって、「cin >> name;」は、「キーボードからnameにデータを流し込め」つまり「キーボードからの入力をnameに受け取れ」という意味になるのです。

 ついでに、これを年齢もきくプログラムにしてみます。この場合は、年齢(つまり数)をいれる「いれもの」が必要になりますね。初心者にはややこしいですが、コンピュータの世界では、文字列と数は違うのです。さらに、数といってもいろいろあるのですが、年齢なら整数でしょう。整数の「いれもの」は、普通、

    int x;

などとして、用意することになっています。ここでintが整数を表し、xが「いれもの」の名前です。「いれもの」の名前はstringのときと同じで自分でかってにつけていいのです。
 また、整数の入力をxへ格納するのも、文字列のときと同様に、

    cin >> x;

でできます。
 以上を使うと、プログラムは次のようになります。このプログラムでは、年齢を入れる「いれもの」をtosiとすることにしました。また、プログラムにコメントをいれる話は前回しましたので、以後、解説も兼ねたコメントをいれることにします。このコメントはあってもなくてもプログラムの実行には何の関係もないのでした。

//hello3.cpp
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string name;      //名前(文字列)の「いれもの」
    int tosi;         //年齢(整数)の「いれもの」

    cout << "こんにちは。私はコンピュータです。" << endl;
    cout << "あなたの名前を入力してください。" << endl;
    cin >> name;      //名前(文字列)の入力

    cout << name << "さん。よろしく。" << endl;

    cout << "ところで、" << name << "さん。失礼ですがお年はいくつですか?" << endl;
    cout << "(入力はかならず、半角の数字でお願いします。)" << endl;
    cin >> tosi;      //年齢(整数)の入力

    cout << "なるほど。" << tosi << "歳ですか。" << endl;
    cout << "私はもうすぐ2歳のマシンです。"<<endl;
}

 細かい話を少々します。まず、「Windowsのコマンドプロンプトで日本語が出せない」という質問を受けることがよくあります。設定によってはそうなっているかもしれませんが、コマンドプロンプトの窓を開いた状態で(普通にやるように)「Alt + 半角/全角」を試してみてください。普通はこれで日本語入力モードになると思います。そうならない場合は、パソコンの設定の問題だと思いますので、詳しい人にきいてみてください。
 また、日本語(=全角)の数字は数として扱われません。数を入力するときは、(もう一度、日本語入力モードから半角入力モードに戻すなどして、)半角の数字で入力してください。そのことをユーザにわからせるため、年齢の入力の前に「cout << "(入力はかならず、半角の数字でお願いします。)" << endl;」をいれました。

Fig.2 hello3.exeの実行画面

 データの「いれもの」は実は業界用語では「変数」といます。(そのくらい知っとるわいと怒ったあなた。まあ、いいじゃないですか。)変数と言う言葉をおぼえてください。「いれもの」つまり変数ははじめに用意してもよいし、途中で用意してもいいのですが、上でははじめに用意してみました。(注:ちなみに、Cでは、ブロックのはじめに定義しないとコンパイルエラーになります。)


 最後に、「おまじない」と書いた部分について、説明しましょう。気にならなければ、しばらく気にする必要はありません。気になる場合だけ、以下を読んでください。
 まず、「#include <iostream>」や「#include <string>」の意味です。簡単に言うと、「#include」は、「必要なものを持って来い」(インクルードするといいます)という程度の意味です。そして、<iostream>には、入出力に必要な「情報」が入っているのです。たとえば、cout、cin、endlというものの「名前」が、<iostream>に入っているのです。そのため、それらは「#include <iostream>」と書くことで使えるようになるのです。ためしに、「#include <iostream>」を削除したhello3.cppをコンパイルすると、エラーになると思います。(コンパイラによっては、エラーにしないかもしれません。それは、たまたま「プログラマにあまい」コンパイラなのです。)たとえば、Borland C++でコンパイルしたところ、次のようになりました。

Fig.3 「#include <iostream>」を削除するとコンパイル時にエラーになる

 これは、「coutなんか知らない」「endlなんか知らない」「cinなんか知らない」という意味なのです。逆に言うと、プログラム中でcoutなどを使うために「#include <iostream>」と書くわけです。「#include <string>」も同様で、これにはstring関連の「情報」が入っているのです。
 つまり、C++では、何かを使いたい場合、それに対応した「#include ○○」を書くことになるのです。ただし、ごく基本的なものに関しては、何もインクルードしなくてよいことになっています。たとえば、intは、何もインクルードしなくても使えるのです。こう書くと「何を使いたいときに何をインクルードするかわからない」と思うかもしれません。実際のところ、重要なものは使っているうちに覚えますし、必要ならマニュアル等を見ればよいということになります。この講座では、その都度説明しますので、最初から神経質にならないでください。大丈夫です。^^)
 次に「using namespace std;」の意味を簡単に説明しましょう。実は、coutの正式な名前は、std::coutなのです。cin、endlも同様にstd::cin、std::endlです。ここで、stdは言わば苗字のようなものなのです。つまり、std::coutは「std家のcoutさん」みたいなものなのです。(ちなみに、stdは「標準」という意味です。)このように「苗字」を使うのは、名前が同じものがあった場合、それらの区別をするためです。これは、大きなプログラムを書く場合には重要なことです。というのは、プログラムが大きくなれば、似たような名前が増え、整理する必要が出てくるからです。
 ただ、初心者が短いプログラムを書いて練習しているうちは、面倒なだけですね。「std::」を省略して書きたいと思うこともあるのです。そのような場合のために、「using namespace std;」があるわけです。これを書いておけば、「std::」を省略できるのです。一応、「using namespace std;」を使わずにhello.cppを書き直したものもお見せしましょう。

//hello.cpp書き換えバージョン
//「using namespace std;」はない
#include <iostream>

int main()
{
    std::cout << "hello" << std::endl;
}

 この入門講座では、大きいプログラムは書かないので、「using namespace std;」を使うことにします。これをusing宣言などといいます。
 それでは、今日はこの辺で。

- 作者: 气度侠 2006年10月14日, 星期六 10:37  回复(0) |  引用(0) 加入博采

C++によるプログラミング入門2
こんにちは。前回は、プログラムについての一般的な話をしました。今回は、簡単なプログラムを書いてみます。
 はじめてプログラムを書く人は、市販の業務用ソフトやゲームソフトを想像するかもしれませんが、売り物になるようなプログラムを書くことは並大抵ではありません。まず、はじめは、じみ~で、おもしろくないものから始めなくてはなりません。そのうち楽しくなると思いますから、少しがんばってみましょう。

 この業界の人は大抵ある有名なプログラムからはじめます。私たちもそれにならいましょう。おそらく単独では世界でもっとも有名なプログラム(ただし、バリエーションは少しあります)です。

//hello.cpp
#include <iostream>
using namespace std;

int main()
{
    cout << "hello" << endl;
}

 もし、すでにC++のコンパイラ(処理系)を持っているなら、上のソースコードを入力(すべて半角英数字です)し、コンパイル+リンクし、実行してみてください(endlの最後の「l」は小文字のエルです)。(Borland C++とVisual C++ .NETの場合の簡単な説明は、付録1を見てください。)実行結果は、画面に「hello」と打ち出されるだけです。なんと、つまらない、、、と思う、思わないは個人の自由ですが、普通はこんなプログラムから入門していくのです。(ちなみに、現在、現役ばりばりのプログラマの多くも、はじめは、こんなプログラムのお世話になっているはずです。)

Fig.1 hello.cppをコンパイル+リンクして作ったhello.exeの実行画面


 プログラムの説明をします。

 1行目は、「//」ではじまっていますね。「//」ではじまる部分は、行末までがコメントと呼ばれ、プログラムの実行とはなんの関係もないものです。(当然、コメントは削除しても、プログラムの動作に影響はありません。)プログラム中には、このような形でコメントを書くことができるのです。
 ここではプログラムの名前hello.cppをコメントとして書いただけです。(注:私の使っている処理系(Borland C++ 、Visual C++)ではC++のソースは「ファイル名.cpp」とします。ここでcppが拡張子と呼ばれるものです。皆さんは自分の処理系が要求する拡張子をつけてください。)このタイプのコメントは「//」ではじまっているので、ほかの行でも「//」を見つけたらこれは、そのあとに書いてあることはただのコメントだと思ってください。

 2行目「#include <iostream>」は、「標準的な入出力に関して必要な情報を取って来い」という程度の意味です。プログラムによっては標準的な入出力をしないものもあります。しかし、たいていは標準の入出力をするので、この行は基本的にいつも書くことになります。

 3行目「using namespace std;」は、「プログラム中でいろいろなものの名前を簡単に書くため」と思っておいてください。そう言われてもなんのことかわからないと思いますが、とりあえず、「おまじない」と思っておくのがよいと思います。詳しい意味は次回に説明します。とにかく、最初は、「C++のプログラムには(普通)このような行(2行目3行目)が頭にある」と思っておいてください。

 4行目は空行ですね。見やすさのために1行空けたのです。

 5行目の「int main()」はこれからプログラムの「中心部分(本体)」が始まるという「合図」です。C++のプログラムの中心部分はいつもここから始まります。ここはそういうものなんだと、理解してください。この「int main()」が支配している範囲は「中カッコ」で示されます。それが6行目の「」と8行目の「」なのです。

 したがって、「プログラム中心部分の中身」は7行目の「cout << "hello" << endl;」だけなのです。coutの前が少しあいているのは見やすさのためです。今回は、この行の意味がわかればよいのです。もう少しですね。
ということで、7行目を説明しましょう。実は、coutは画面を表わし、<<は「そこへ押し込め」などの意味です。したがって、

 cout << "文字列"

と書くと、「文字列を画面に押し込め」つまり「文字列を画面に出力せよ」という意味になるのです。
 また、endlは「改行」を表わし、「;」は「命令の終わり」を意味します。そのため、

 cout << ... << endl;

とすると、「出力の最後に画面に改行を押し込む」つまり「最後に改行する」という意味になるのです。
 以上をまとめると、「cout << "hello" << endl;」は、「画面にhelloと出力して、改行せよ」という命令になるのです。Fig.1を見てください。実際、そうなっていますね。

 はじめのうちは、あまり「どうしてだろう」と悩まずに多くのことを受け入れてください。そのうちいろいろなことがわかってきます。まず、上のプログラムをなんとか実行してみてください。コンパイル+リンク(ビルドなどということもあります。以下ではかんたんのため「コンパイル」とだけいうことにしますが、これはいつもコンパイル+リンクのことと思ってください。)時にエラーメッセージがでたら、おそらくタイプミスか何かでしょう。例えば、初心者は、よく「;」を忘れます。
 エラーが出たらなんとか直してコンパイルしてください。うまくいったら実行です。「hello」とでましたか?もし、うまくいったら、(あまりおもしろいプログラムではありませんが)自分で少しだけ改造したプログラムを書いてみてください。

 例えば、こんなのが出来るでしょう。

#include <iostream>
using namespace std;

int main()
{
    cout << "俺様はプログラマの卵だ!" << endl;
}

 出力する文字列を変えただけです。実際、実行すると「俺様はプログラマの卵だ!」と出力するはずです。ただし、日本語は「俺様はプログラマの卵だ!」だけで、他の部分は半角英数字で入力するのを忘れないでください。特に「"」などを全角文字で書いたりしないように気をつけてください。また、日本語の空白(全角の空白)を「""」の外に書くと、コンパイル時にエラーになります。しかし、これは普通見えない文字なので、初心者は、とても悩むことになります。これも気をつけてください。

 以上は、文字を出力するプログラムでしたが、数(字)も同様にできます。しかし、数だけを出力するときには「"」はいりません。この場合、数字はかならず半角で打ってください。また、次のように

//nenrei.cpp
#include <iostream>
using namespace std;

int main()
{
    cout << "私は" << 43 << "才です。" << endl;
}

<<をいくつもならべて使うこともできます。こうすると、「私は43才です。」と出力するプログラムになります(旧作のときは37才だったのに)。

Fig.2 nenrei.exeの実行

 今日はこの辺にしましょう。それではまた。

- 作者: 气度侠 2006年10月14日, 星期六 10:26  回复(0) |  引用(0) 加入博采

JAVA基礎(クラス-オーバーライドとオーバーロード)
クラス-8.オーバーライドとオーバーロード
このページでは、オーバーライドとオーバーロードについて説明を行います。オーバーライドとは、スーパークラスで定義されたメソッドをサブクラスで再定義することを言います。オーバーロードとは、同一クラス内で、メソッド名が同一で引数の型、数、並び順が異なるメソッドを複数定義することを言います。
オーバーライド
オーバーライドとはスーパークラスにおいて定義されているインスタンスメソッドを、サブクラス内で再定義することを言います。スーパークラスのメソッドを変更することはできないが、サブクラスに特化した機能を付与する必要がある場合などに使用します
オーバーライド
オーバーライドが適用されるのはprivateアクセスレベルを除く、インスタンスメソッドのみです。privateアクセスレベルは同一クラス内のみに参照可能なため、クラスをまたぐオーバーライドの概念には当てはまりません。スーパークラスで定義されているクラスメソッド、メンバ変数をサブクラスで再定義することは隠蔽と言われ、オーバーライドとは区別されます。

オーバーライドを定義する際には以下の規定があります。
1.オーバーライドする側はオーバーライドされる側と戻り型、インスタンスメソッド名、引数型、引数の数が同じでなければなりません。どれか一つでも異なる場合はオーバーライドとは見なされません。
 オーバーライドする側はオーバーライドされる側と戻り型、インスタンスメソッド名、引数型、引数の数が同じでなければなりません。
2.オーバーライドされる側のインスタンスメソッドに指定されるアクセスレベルより広い範囲を持つアクセスレベルをオーバーライドする側のインスタンスメソッドに付与することはできません。例えばオーバーライドされる側のインスタンスメソッドにprotectedが指定されている場合、オーバーライドする側のインスタンスメソッドにpublicを指定することはできません。
3.オーバーライドされる側のインスタンスメソッドに指定されるthrows節以外の例外をオーバーライドする側のインスタンスメソッドに指定することはできません。但し、オーバーライドされる側に指定された例外をより限定する例外をオーバーライドする側に指定することはできます。
4.オーバーライドされる側のインスタンスメソッドにfinal修飾子が付与されている場合、そのインスタンスメソッドをオーバーライドすることはできません。
5.オーバーライドされる側のインスタンスメソッドにabstract修飾子が付与されている場合、そのメソッドはサブクラスで必ずオーバーライドしなければなりません。オーバーライドしない場合はそのサブクラス全体がabstractクラスになります。

【例1オーバーライドを行った例です。

class ExClass8 {
  //(1)オーバーライドされるメソッド
  void methodA(int i) {
    int x = i * 10;
  }
}
class subExClass8 extends ExClass8 {
  //(2)オーバーライドするメソッド
  void methodA(int i) {
    int x = i * 10;
    System.out.println(x);
  }
  public static void main(String[] args) {
    subExClass8 objectSub = new subExClass8();  //(3)
    objectSub.methodA(10);  //(4)
  }
}

【解説1

(1).スーパークラスExClass8で引数に指定された数を10倍にするメソッドmethodAを宣言します。
(2).サブクラスsubExClass8でスーパークラスのmethodAをオーバーライドし、10倍された数を表示する機能を付与します。
(3).サブクラスsubExClass8のオブジェクトobjectSubを宣言・生成します。
(4).objectSubを通し、サブクラスでオーバーライドしたmethodAを呼び出します。
【実行結果1】
D:\JAVA>javac subExClass8.java

D:\JAVA>java subExClass8
100

D:\JAVA>
動的束縛と静的束縛
動的束縛とはクラス構成要素(メソッド、メンバ変数など)を呼び出す際、オブジェクト変数に代入されたオブジェクトに基づき構成要素が呼び出されることを言い、静的束縛とはオブジェクト変数のオブジェクト型に基づき構成要素が呼び出されることを言います。そのため、静的束縛はコンパイルする時点で呼び出すオブジェクトが決定されますが、動的束縛はプログラムが実行されるまでどのオブジェクトに基づき呼び出されるかわかりません(条件分岐などで、代入されるオブジェクトが変動する場合があるため)。多くのプログラム言語が静的束縛を実装する中で、動的束縛はJavaの特徴の一つとなっています。

オーバーライドは動的束縛が適用されます。一方、隠蔽は静的束縛が適用されます。以下に例を記載します。
【例2】オーバーライドを行い、動的束縛が適用される例です。
class ExClass9 {
  //(1)オーバーライドされるメソッド
  void methodA(int i) {
    System.out.println("super:" + (i * 1000));
  }
}

class subExClass9 extends ExClass9 {
  //(2)オーバーライドするメソッド
  void methodA(int i) {
    System.out.println("sub:" + (i * 10));
  }
  public static void main(String[] args) {
    //(3)オブジェクト変数の型がExClass9、
    //   オブジェクトがsubExClass9
    ExClass9 objectSuper = new subExClass9();
    objectSuper.methodA(10);  //(4)
  }
}

【解説2

(1).スーパークラスExClass9で引数に指定された数を1000倍にするメソッドmethodAを宣言します。
(2).

サブクラスsubExClass9でスーパークラスのmethodAをオーバーライドし、引数に指定された数を10倍にするメソッドmethodAを宣言します。

(3).オブジェクト変数の型がExClass9でsubExClass9クラスのオブジェクトが代入されたobjectSuperを宣言・生成します。
(4).objectSuperを通し、メソッドmethodAを呼び出します。オーバーライドでは、動的束縛が適用されるため、代入されるオブジェクト(サブクラスsubExClass9のオブジェクト)の構成要素のメソッドが呼び出されます。
【実行結果2】
D:\JAVA>javac subExClass9.java

D:\JAVA>java subExClass9
sub:100

D:\JAVA>

【例3】隠蔽を行い、静的束縛が適用される例です。
class ExClass10 {
  //(1)隠蔽されるメソッド
  static void methodA(int i) {
    System.out.println("super:" + (i * 1000));
  }
}
class subExClass10 extends ExClass10 {
  //(2)隠蔽するメソッド
  static void methodA(int i) {
    System.out.println("sub:" + (i * 10));
  }
  public static void main(String[] args) {
    //(3)オブジェクト変数の型がExClass10、
    //   オブジェクトがsubExClass10
    ExClass10 objectSuper = new subExClass10();
    objectSuper.methodA(10);  //(4)
  }
}

【解説3

(1).スーパークラスExClass10で引数に指定された数を1000倍にするメソッドmethodAを宣言します。
(2).

サブクラスsubExClass10でスーパークラスのmethodAを隠蔽し、引数に指定された数を10倍にするメソッドmethodAを宣言します。

(3).オブジェクト変数の型がExClass10でsubExClass10クラスのオブジェクトが代入されたobjectSuperを宣言・生成します。
(4).objectSuperを通し、メソッドmethodAを呼び出します。隠蔽では、静的束縛が適用されるため、オブジェクト変数の型のオブジェクト(スーパークラスExClass10のオブジェクト)の構成要素のメソッドが呼び出されます。
【実行結果3】
D:\JAVA>javac subExClass10.java

D:\JAVA>java subExClass10
super:10000

D:\JAVA>
オーバーロード
オーバーロードとは同一クラス内でメソッド名が同一で引数の型、数、並び順が異なるメソッドを複数定義することを言います。

例えば、会員登録を行う機能で、名前と国名を登録させたいとします。国名を入力しなかった会員は国名:日本で登録します。同じ登録を行う機能であるのに、メソッドをtoroku(String name,String country)、torokuJapan(String name)などと作成するするのはあまりきれいなプログラムではありません。この場合、toroku(String name)、toroku(String name,String country)というように同じ名前のメソッドを引数の数を変えて作成します。同じ機能を持つものは同じメソッド名とした方が、プログラムがきれいに見えます。Javaはメソッドの引数の型、数、並び順が異なる場合、それぞれを異なるメソッドとして扱います。これがオーバーロードの機能です。
オーバーロード
オーバーロードを定義する際には以下の規定があります。
1.異なるメソッドと認識される部分は、メソッドの次の個所です。「引数の型」、「引数の数」、「引数の並び順」。
2.次の個所が異なっていても異なるメソッドとは認識されません。コンパイルエラーとなります。「戻り型」、「アクセスレベル」、「引数名」、「throws節」。
【例4】オーバーロードを行った例です。
class ExClass11{
  //(1)引数を2つ持つtorokuメソッド
  void toroku(String name, String country) {
    System.out.println("名前は" + name);
    System.out.println("国は" + country);
  }
  //(2)引数を1つ持つtorokuメソッド
  void toroku(String name) {
    System.out.println("名前は" + name);
    System.out.println("国は" + "日本");
  }
  public static void main(String[] args) {
    ExClass11 object11 = new ExClass11();
    object11.toroku("Java太郎");  //(3)
  }
}

【解説4

(1).引数をnameとcountryの2つ持つメソッドtorokuを宣言します。
(2).

引数をnameの一つしか持たず、countryに当たる部分は日本を表示するメソッドtorokuを宣言します。

(3).torokuメソッドを呼び出します。引数が1つしか指定されていないため、②のメソッドが呼び出されます。
【実行結果4】
D:\JAVA>javac ExClass11.java

D:\JAVA>java ExClass11
名前はJava太郎
国は日本

D:\JAVA>

- 作者: 气度侠 2005年11月25日, 星期五 12:48  回复(0) |  引用(0) 加入博采

C++入門1

 この講座はプログラミングの初心者を対象としてC++を楽しくおぼえていくというものです。ぎちぎちした文法や細かい知識は話しません。そういうことは、 この講座をおえれば、一人でも本を読んでおぼえていけるでしょう。
 また、用語はすべてキチンと解説していくと百科事典になってしまうので、ウソにならないように気をつけながら、なるべく簡単な説明で講義を進めていくつもりです。


 C++でプログラミングをする場合、C++用の「処理系」(後述)が必要です。これについてはあらかじめどこかで入手して、簡単な使い方を、知っている近くの人にでも聞いておいてください。有名な処理系としては、例えば、Borland C++、Visual C++、gccなどがあります。もちろん、他にもいろいろ優れたものがあります。どれかを自分のマシンにインストールしておいてください。具体的な使い方はそれぞれ違いますが、これは、知っている人に聞くのが一番です。難しいことは聞かなくてよいですから、今日の講義と次の講義を読んだ後にでも、「エディタ( 処理系についている場合も多いです)を使ってどのようにソース(後述)を入力するか」と、「それをどのように、コンパイル+リンク(後述)するか」だけ聞いてください。
 さて、そもそもプログラミングとはどういうことをするのでしょうか。C++では、次の操作を行います。

 まず、ソース(ソースプログラム)とよばれるコンピュータにたいする命令を特別な言語で書きます。この言語にはいろいろなものがあります。それは、普通の言語にも、日本語や英語、ドイツ語、、、などといろいろ種類があるのと同じです。私たちはC++という言語を選びました。このソースがいわゆるプログラムなのです。

 ところでコンピュータはこのソースの内容を直接理解することはできません。ソースをコンピュータにわかる言葉(バイナリなどといいます)に翻訳する必要があるのです。 この翻訳をコンパイルといい、翻訳するソフトをコンパイラといいます。実はコンパイルするだけでは、まだ、そのプログラムを実行することはできません。そのあと、リンクとよばれる作業が必要です(リンクをしてくれるソフトをリンカといいます)。これは、コンパイルされたプログラムを実際に使える形につなぎあわせるということなのですが、初心者にはこの「リンク」はピンとこないと思います。このような知識はずいぶん先にならないと必要ないので、今は「ソースプログラムを実行可能ファイルにするのに、コンパイルやらリンクやらとよばれる作業がある」とだけ理解すれば十分です。

 このコンパイル・リンクは「処理系」などとよばれるソフト(ソフト群)が一発でやってくれますので、気にすることはありません。「コンパイラとリンカ」、あるいは「コンパイラ、リンカ、およびエディタなどを含む統合開発環境を提供するソフト」などを簡単に「処理系」などと言います。また、これらの作業で中心的役割をはたすのはコンパイラなので、全部をひっくるめて「コンパイラ」とよぶ人も多いと思います。厳密には誤りですが、上に書いた事情をわかった上で簡単に言っているのです。
 こうしてできあがった実行可能ファイルをコンピュータは理解して、実行してくれるわけです。

 以上をまとめると、プログラムを書いて実行するということは

1.ソースを書く
2.コンパイル+リンク
3.実行

ということになります。ここで、2と3は簡単にできます。自分のインストールしたC++処理系(つまりコンパイルやリンクをしてくれるソフト)が、クリックやコマンド一発でやってくれるからです。

 Borland C++とVisual C++ .NETを使う場合については、簡単に付録1で説明します。ただ、知っている人が近くにいれば、その人に聞いてみてください。他の開発環境についても同様です。質問を嫌う人もいますが、ソースの入力方法とコンパイル+リンクの簡単な方法なら、相手にもそれほど迷惑にならないはずです。(もちろん、聞くのですから、礼はつくすべきですが、、、。)

 私たちがおぼえることは、要するに「どのようにソースプログラムを書くか」ということになるわけです。

- 作者: 气度侠 2006年04月19日, 星期三 16:03  回复(2) |  引用(0) 加入博采

Struts(ファイルアップロード)

ここではStrutsでファイルアップロードを行うプログラムを作成する方法を解説します。通常ファイルアップロードを行うプログラムは、複雑なアップロード処理を記述する必要があります。Strutsではこの複雑な処理を行う機能をあらかじめ備えており、プログラマは簡易な処理を記述するだけでファイルアップロードを行うプログラムを作成することができます。

実行環境
・WindowsXP Home Edition
・J2SDK 1.5.0_03
・Tomcat 5.0.18
・Struts 1.2.4

作成概要

Strutsでファイルアップロードを行うプログラムを作成する際は、Strutsであらかじめ用意されているFormFileインタフェースを利用します。ここではFormFileインタフェースを利用してファイルアップロードを行うプログラムを作成する例を解説します。
プログラムは「アップロードするファイルを選択するJSPファイル」、「アップロードするファイルの情報を保有するアクション・フォームBean」、「アップロード処理を行うアクション・クラス」、「アップロード結果を表示するJSPファイル」で構成されています。

【作成ファイル一覧】
ファイル名
内容
exFileUp.jsp
「アップロードするファイルを選択するJSPファイル」。<html:file>タグを使用してアップロードを行うファイルを選択します。
ExFileUploadForm.java
「アップロードするファイルの情報を保有するアクション・フォームBean」。ファイルの情報はFormFileインタフェースのオブジェクトとして保有します。
ExFileUploadAction.java
「アップロード処理を行うアクション・クラス」。FormFileインタフェースで用意されているメソッドと入出力クラスを使用してアップロード処理を行います。
exFileUp2.jsp
「アップロード結果を表示するJSPファイル」。ファイルアップロード後、<bean:write>タグを使用してアップロードを行ったファイル名を表示します。
struts-config.xml
Strutsプログラムの定義ファイルです。<controller>タグを使用して、アップロードを行うファイルの最大サイズなどを指定します。
作成
exFileUp.jsp 作成概要

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>FileUpload処理</title></head>
<body>

<%-- ①enctype属性にmultipart/form-dataを指定 --%>
<html:form action="/FileUpAction" 
           method="POST" 
           enctype="multipart/form-data">
  <%-- ②ファイル選択を行う<html:file>タグを指定 --%>
  <html:file property="fileUp" />
  <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>

①.<html:form>タグのenctype属性にmultipart/form-dataを指定します。ファイルアップロードを行う際は必ず指定する必要があります。
②.<html:file>タグを使用して、FORM画面でアップロードするファイルを選択するボタンを付与します。HTMLタグの<input type="file">タグに該当します。property属性はアクション・フォームBeanで使用するプロパティ名です。

ExFileUploadForm.java 作成概要

package struts;

import org.apache.struts.action.*;
//①FormFileインタフェースのインポート
import org.apache.struts.upload.FormFile;

public final class ExFileUploadForm extends ActionForm {
  //②FormFileインタフェースのfileUp変数を宣言
  private FormFile fileUp;

  //③アップロードファイル情報に対するアクセスメソッドを宣言
  public FormFile getFileUp() { return fileUp;}
  public void setFileUp(FormFile fileUp) {this.fileUp = fileUp;}

}

①.ファイルアップロードに関する機能が定義されたインタフェースFormFileをインポートします。
②.アップロードされたファイルの情報を保有するFormFileインタフェースのfileUpオブジェクト変数を宣言します。
③.exFileUp.jspで指定したプロパティ名にしたがいアクセスメソッドを宣言します。アクセスメソッドを通して、外部プログラムからアップロードされたファイルの情報を取得、設定します。

ExFileUploadAction.java 作成概要

package struts;

import javax.servlet.http.*;
import org.apache.struts.action.*;
import java.io.*;
//①FormFileインタフェースのインポート
import org.apache.struts.upload.FormFile;

public final class ExFileUploadAction extends Action {
 public ActionForward execute(ActionMapping mapping, 
        ActionForm form,
        HttpServletRequest req, 
        HttpServletResponse res) throws Exception{
  //②アクション・フォームBeanオブジェクトの取得
  ExFileUploadForm efuf = (ExFileUploadForm)form;
  //③アクセスメソッドを使用してFormFileオブジェクトの取得
  FormFile fileUp = efuf.getFileUp();

  //④getInputStreamメソッドを使用し、入力ストリームを取得
  InputStream is = fileUp.getInputStream();
  //⑤入力ストリームをバッファリング
  BufferedInputStream inBuffer = new BufferedInputStream(is);
  //⑥ファイルのアップロード先を指定して、出力ストリームを生成
  FileOutputStream fos = new FileOutputStream
                         ("/java/Tomcat 5.0/webapps/SExam/files/" 
                         + fileUp.getFileName());
  //⑦出力ストリームをバッファリング
  BufferedOutputStream outBuffer = new BufferedOutputStream(fos);

  int contents = 0;
    
  //⑧入力データがなくなるまで入出力処理を実行
  while ((contents = inBuffer.read()) != -1) {
    outBuffer.write(contents);
  }

  outBuffer.flush();
  inBuffer.close();
  outBuffer.close(); 

  //⑨一時領域のアップロードデータを削除
  fileUp.destroy();

  return (mapping.findForward("success"));
 }
}

①.ファイルアップロードに関する機能が定義されたインタフェースFormFileをインポートします。
②.ActionForm型であるformオブジェクトを今回のアクション・フォームBeanであるExFileUploadFrom型にキャストして、オブジェクトefufを取得します。
③.アクション・フォームBeanで定義したアクセスメソッドを使用して、FormFileインタフェースのオブジェクトを取得します。
④.getInputStreamメソッドを使用して、アップロードされたファイルの入力ストリームを取得します。
⑤.入力ストリームをバッファリングします。⑤~⑧はアップロード処理の一例です。ファイル入出力処理を記述することで自由にアップロード処理を記述できます。
⑥. アップロード先を指定して、ファイルの出力ストリームを生成します。getFileNameメソッドはアップロードするファイルのファイル名を取得するメソッドです。
⑦.出力ストリームをバッファリングします。
⑧.readメソッドにより入力ストリームからデータを読み込み、writeメソッドで出力ストリームに書き出します。readメソッドは入力データがなくなると-1を返します。
⑨.destroyメソッドで一時領域に生成されたアップロードデータを削除します。アップロードファイルのサイズが大きい場合、メモリ内のアップロードデータを一時的にある領域に生成します。そのデータを削除します。

exFileUp2.jsp 作成概要

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>FileUpload処理</title></head>
<body>

アップロードしたファイル
<br>
<%-- ①アップロードファイルのファイル名を表示 --%>
<bean:write name="FileUpForm"
            property="fileUp.fileName" />

</body>
</html:html>

①.<bean:write>タグを使用し、アップロードファイルのファイル名を表示します。name属性にstruts-config.xmlで指定したアクション・フォームBeanの名前を、property属性にアクション・フォームBeanの参照するプロパティ名を指定します。fileUp.fileNameはfileUpでfileUpプロパティであるFormFileオブジェクトを取得し、fileNameでFormFileオブジェクトで定義されているgetFileNameメソッドの呼び出しを表します。 getFileNameメソッドはアップロードしたファイルのファイル名を取得するメソッドです。

struts-config.xml 作成概要

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <!-- ①アクション・フォームBeanの定義 -->
  <form-beans>
    <form-bean
     name="FileUpForm"
     type="struts.ExFileUploadForm"/>
  </form-beans>

  <!-- ②アクション・クラスの定義 -->
  <action-mappings>
    <action path="/FileUpAction"
     type="struts.ExFileUploadAction"
     name="FileUpForm"
     scope="request">
      <!-- ③アクション・クラス実行後の遷移先の定義 -->
      <forward name="success" path="/exFileUp2.jsp"/>
    </action>
  </action-mappings>

  <!-- ④ファイルアップロードに関する定義 -->
  <controller maxFileSize="1024K"
              bufferSize="1024"
              tempDir="/java/Tomcat 5.0/webapps/SExam/tmps" />

</struts-config>

①.<form-beans>タグでアクション・フォームBeanを指定します。
②.<action-mappings>タグでアクション・クラス、関連するアクション・フォームBeanを指定します。
③.<forward>タグでアクション・クラス実行後に返された値"success"に合致する遷移先(exFileUp2.jsp)を指定します。
④.ファイルアップロードに関する定義を行います。maxFileSize属性はアップロードでいるファイルの最大サイズを指定します。bufferSize属性はアップロードする際にバッファリングする最大サイズを指定します。このサイズを超えた場合一時領域にアップロードデータが生成されます。tempDir属性はアップロードデータが生成される一時領域を指定します。


【実行結果】Strutsの実行方法に関してはJavaの道:Struts(基本操作)を参照してください。

Javaの道_Struts_ファイルアップロード実行結果_1

Javaの道_Struts_ファイルアップロード実行結果_2

一覧

ここでは、FormFileインタフェースで定義されている主なメソッドと、struts-config.xmlの<controller>タグの主な属性について紹介します。

【FormFileインタフェースの主なメソッド】
戻り型メソッド説明
voiddestroy( )
一時領域に生成されたアップロードデータを即座に削除します。
StringgetContentType( )アップロードファイルのコンテントタイプを返します。
String getFileName( )アップロードファイルのファイル名を返します。
int getFileSize( )アップロードファイルのサイズを返します。
InputStreamgetInputStream( )アップロードファイルの入力ストリームを返します。

【controllerタグの主な属性】
属性内容
bufferSize ファイルをアップロードする際のバッファサイズを指定します。アップロードデータが指定した容量を超えると、メモリ内のデータを一時領域に生成します。サイズは(サイズなし)、K(キロバイト)、M(メガバイト)、G(ギガバイト)で指定できます。デフォルトは4096バイトです。
maxFileSizeアップロードできるファイルの最大サイズを指定します。サイズは(サイズなし)、K(キロバイト)、M(メガバイト)、G(ギガバイト)で指定できます。デフォルトは250Mバイトです。
tempDir一時領域の場所を指定します。アップロードデータのサイズがbufferSizeの値を超えると、メモリ内のデータが指定した一時領域に生成されます。

- 作者: 气度侠 2006年03月5日, 星期日 14:01  回复(0) |  引用(0) 加入博采

Struts(Validator)

ここではStrutsValidatorについて解説します。Validatorとは、アクション・フォームBeanに入力された値が指定した条件(必須入力、入力パターンなど)に合致しているかを調べ、合致していない場合はエラーを表示する仕組みです。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

概要

Validatorはタグの指定のみでアクション・フォームBeanに入力される値のチェックを行うことができます。入力値ごとにチェックプログラムを記述する必要がなく、簡易な設定で入力値のチェックを行うことができます。

【Validatorで確認できるルール】
ルール名
内容
required
入力必須の確認。
validwhen
指定した条件式に合致するかの確認。使用する際はantlr.jarが必要。
minlength
指定した文字数より少なくないかの確認。
maxlength
指定した文字数より多くないかの確認。
mask
指定した正規表現に合致する値かの確認。
byte
Byte型のクラスに変換できる値かの確認。
short
Short型のクラスに変換できる値かの確認。
integer
Integer型のクラスに変換できる値かの確認。
long
Long型のクラスに変換できる値かの確認。
float
Float型のクラスに変換できる値かの確認。
double
Double型のクラスに変換できる値かの確認。
date
Date型のクラスに変換できる値かの確認。変換できるかはSimpleDateFormatクラスを利用する。
intRange
指定した数値の範囲内の値かの確認。値はInteger型のクラスに変換できる必要がある。
floatRange
指定した数値の範囲内の値かの確認。値はFloat型のクラスに変換できる必要がある。
doubleRange
指定した数値の範囲内の値かの確認。値はDouble型のクラスに変換できる必要がある。
creditCard
クレジットカード番号のフォーマットに合致する値かの確認。
email
メールアドレスのフォーマットに合致する値かの確認。
url
URLのフォーマットに合致する値かの確認。
基本設定

Validatorを利用する場合の基本的な設定例について解説します。

1.アクション・フォームBeanにValidator処理を行うための記述を行います。

2.アクション・フォームBeanの各プロパティに適用するValidatorルールをvalidation.xmlに記述します。Validator自体の動作はvalidator-rules.xmlに定義されています。validator-rules.xmlはあらかじめ定義されているものを使用します。

3.メッセージ・リソースファイルにvalidation.xmlのルールに合致しなかった場合に表示するエラーメッセージを記述します。

4.エラーメッセージを表示するための、JSPプログラムを作成します。

5.struts-config.xmlにValidator関連の設定を行います。

1.アクション・フォームBeanの作成基本設定 Top

【ExValidatorForm.java】
package struts;

import org.apache.struts.validator.*;
import org.apache.struts.action.*;

//Validatorを使用する場合はValidatorFormクラスを継承します。
//その他は一般的なアクション・フォームBeanの作成方法と変わりません。
public final class ExValidatorForm extends ValidatorForm { private String requireV; private String validwhenV; private String countV; private String patternV; private String dateV; private String rangeV; private String emailV; public void setRequireV(String requireV) {this.requireV = requireV;} public void setValidwhenV(String validwhenV) {this.validwhenV = validwhenV;} public void setCountV(String countV) {this.countV = countV;} public void setPatternV(String patternV) {this.patternV = patternV;} public void setDateV(String dateV) {this.dateV = dateV;} public void setRangeV(String rangeV) {this.rangeV = rangeV;} public void setEmailV(String emailV) {this.emailV = emailV;} public String getRequireV() {return requireV;} public String getValidwhenV() {return validwhenV;} public String getCountV() {return countV;} public String getPatternV() {return patternV;} public String getDateV() {return dateV;} public String getRangeV() {return rangeV;} public String getEmailV() {return emailV;} }

2.validation.xmlの作成基本設定 Top

【validation.xml】
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE form-validation PUBLIC
 "-//Apache Software Foundation//
  DTD Commons Validator Rules Configuration 1.1.3//EN"
 "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

<form-validation>
  <formset>
    <!-- 適用するアクション・フォームBeanを論理名で指定  -->
    <form name="ExValidator">
      <!-- requiredルールの指定 -->
      <field property="requireV" depends="required">
      </field>
      <!-- validwhenルールの指定
           validwhenの条件式をtest変数で指定
           *this*はプロパティvalidwhenVを表す -->
      <field property="validwhenV" depends="validwhen">
        <msg name="validwhen" key="errors.validwhen" />
        <var>
        <var-name>test</var-name>
        <var-value>
          ((*this* != null) and (countV != null))
        </var-value>
        </var>
      </field>
      <!-- minlengthルールの指定
           minlength変数で条件の最低入力数を指定 -->
      <field property="countV" depends="minlength">
        <var>
        <var-name>minlength</var-name>
        <var-value>4</var-value>
        </var>
      </field>
      <!-- maskルールの指定
           mask変数で条件パターンを指定 -->
      <field property="patternV" depends="mask">
        <var>
        <var-name>mask</var-name>
        <var-value>^[a-zA-Z]*$</var-value>
        </var>
      </field>
      <!-- dateルールの指定
           datePattern変数で条件の日時パターンを指定 -->
      <field property="dateV" depends="date">
        <msg name="date" key="errors.date" />
        <var>
        <var-name>datePattern</var-name>
        <var-value>yyyy/mm/dd</var-value>
        </var>
      </field>
      <!-- intRangeルールの指定
           max変数、min変数で条件の範囲を指定 -->
      <field property="rangeV" depends="intRange">
        <var>
          <var-name>min</var-name>
          <var-value>4</var-value>
        </var>
        <var>
          <var-name>max</var-name>
          <var-value>16</var-value>
        </var>
      </field>
      <!-- emailルールの指定 -->
      <field property="emailV" depends="email">
      </field>
    </form>
  </formset>
</form-validation>

各ルールに設定するサブ要素を以下に記載します。

【各ルールのサブ要素】
ルール名
サブ要素
内容
required -
-
validwhentest
条件式を指定。条件式にはJava標準の演算子を使用できる。
minlengthminlength
入力が必要な最小値
maxlengthmaxlength
入力できる最大値
maskmask
Perl5互換の正規表現パターン
byte-
-
short-
-
integer-
-
long-
-
float-
-
double-
-
datedatePattern
日時パターンを指定。パターンはSimpleDateFormatクラスを利用する。datePatternStrictは厳密なパターンが適用される。yyyy/mm/ddで2005/1/1はパターンに合致しない2005/01/01の場合はパターンに合致する。
datePatternStrict
intRangemin
minは最小値、maxは最大値
max
floatRangemin
minは最小値、maxは最大値
max
doubleRangemin
minは最小値、maxは最大値
max
creditCard-
-
email -
-
urlallowallschemes
スキームを許可するかどうか。trueを設定するとすべてのスキームが許可される。デフォルトはfalse。
allow2slashes
ダブルスラッシュ(//)を許可するかどうか。デフォルトはfalse。
nofragments
URLの分割を許可するかどうか。デフォルトはfalse(分割を許可する)。
schemes
許可するスキームを,(カンマ)で指定する。デフォルトはhttp, https, ftp。

3.メッセージ・リソースファイルの作成基本設定 Top

【application.properties】
errors.required =requireV is wrong.<br>
errors.validwhen=validwhenV is wrong.<br>
errors.minlength=countV is wrong.<br>
errors.invalid  =patternV is wrong.<br>
errors.date     =dateV is wrong.<br>
errors.range    =rangeV is wrong.<br>
errors.email    =emailV is wrong.<br>

validator-rules.xmlにルールごとに該当するメッセージ・リソースファイルのキーが定義されています。以下に定義されているキーを記載します。また、validation.xmlに<msg>タグを記載することで、任意のキーを使用することができます。

【メッセージ・リソースファイルのキー】
ルール名
キー
required errors.required
validwhenerrors.required
minlengtherrors.minlength
maxlengtherrors.maxlength
maskerrors.invalid
byteerrors.byte
shorterrors.short
integererrors.integer
longerrors.long
floaterrors.float
doubleerrors.double
dateerrors.date
intRangeerrors.range
floatRangeerrors.range
doubleRangeerrors.range
creditCarderrors.creditcard
email errors.email
url errors.url

4.JSPの作成基本設定 Top

【error.jsp】Validatorルールに合致したなかったときに表示されるエラー画面です。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>エラー画面</title></head>
<body>

エラーメッセージ
<br>
<%-- <html:messages>タグでエラーメッセージを 表示します。エラーメッセージを表示するときは message属性をfalseにします。 --%> <html:messages id="msg" message="false"> <%-- filter属性をfalseにすることでメッセージに HTMLタグを利用できます。trueにするとHTMLタグが あった場合置換文字(&lt;、&gt;など)に変換します。 --%> <bean:write name="msg" ignore="true" filter="false"/> </html:messages> </body> </html:html>

【exValidator.jsp】Validatorチェックを行う値を入力するフォーム画面です。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>Validator処理</title></head>
<body>

<html:form action="/ExValidator">
  入力必須
  <br>
  <html:text property="requireV" size="16"/>
  <br><br>
  validwhen
  <br>
  <html:text property="validwhenV" size="16"/>
  <br><br>
  文字数確認
  <br>
  <html:text property="countV" size="16"/>
  <br><br>
  パターン確認
  <br>
  <html:text property="patternV" size="16"/>
  <br><br>
  日付確認
  <br>
  <html:text property="dateV" size="16"/>
  <br><br>
  範囲確認
  <br>
  <html:text property="rangeV" size="16"/>
  <br><br>
  メールアドレス確認
  <br>
  <html:text property="emailV" size="16"/>
  <br><br>
  <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>

5.struts-config.xmlの作成基本設定 Top

【struts-config.xml】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

 <!-- アクション・フォームBeanの指定 -->
 <form-beans>
  <form-bean name="ExValidator"
             type="struts.ExValidatorForm" />
 </form-beans>

 <!-- アクション・クラスの指定 -->
 <action-mappings>
  <!-- Validatorを使用する場合validate属性をtrueに指定。
       Validatorのエラーを表示する画面をinput属性で指定。 -->
  <action path="/ExValidator"
          type="struts.ExValidatorAction"
          name="ExValidator"
          scope="request"
          validate="true"
          input="/error.jsp">
   <forward name="info" path="/exValidator2.jsp"/>
  </action>
 </action-mappings>

 <!-- メッセージ・リソースファイルの指定 -->
 <message-resources parameter="resources.application"/>

 <!-- Validatorの指定。プロパティpathnamesの値に
      validator-rules.xmlとvalidation.xmlを指定 -->
 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
  <set-property property="pathnames"
   value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
 </plug-in>

</struts-config>

実行結果基本設定 Top

何も入力せず実行すると、必須入力チェックによりreruiredルールとvalidwhenルールのエラーメッセージが表示されているのがわかります。

Javaの道_Struts実行結果_19_1

Javaの道_Struts実行結果_18_2

応用処理

1.複数条件指定
<field>タグのdepends属性に値を複数指定することにより、チェックする条件を複数指定することができます。emailフォーマットチェック且つ、必須入力チェックなど条件を組み合わせて指定できます。

【depends属性に複数条件を指定】
<!-- emailフォーマットチェックと必須入力チェックを指定 -->
<field property="emailV" depends="email,required">
</field>

2.エラーメッセージに可変置き換え文字を利用
<field>タグに<argn>タグ(nは0~3のいずれか)を指定することで、エラーメッセージに可変置き換え文字を使用することができます。可変置き換え文字はメッセージ・リソースファイルで指定、直接指定、<var>タグの変数指定のいずれかを選ぶことができます。直接指定、<var>タグの変数指定を行う場合は<argn>タグのresource属性にfalseを指定する必要があります。

【<argn>タグを指定】
・・・・・
<field property="countV" depends="minlength">
  <!-- 可変置き換え文字にメッセージ・リソースファイルの
       "minlength.msg"を指定 -->
  <arg0 key="minlength.msg" />
  <!-- 可変置き換え文字に<var>タグのminlengthを指定 -->
  <arg1 key="${var:minlength}" resource="false" />
  <var>
    <var-name>minlength</var-name>
    <var-value>4</var-value>
  </var>
</field>
・・・・・

【メッセージ・リソースファイル】

errors.minlength={0} needs over {1} characters.
minlength.msg=minlength

3.メッセージ・リソースファイルのキーを指定
<field>タグに<msg>タグを指定することで参照されるメッセージ・リソースファイルのキーを変更することができます。

【<msg>タグを指定】
・・・・・
<field property="requireV" depends="required">
  <!-- エラー時のメッセージ・リソースファイルのキーを
       "errors.original.required"に変更 -->
  <msg name="required" key="errors.original.required" />
</field>
・・・・・

4.動的アクション・フォームBeanにValidatorを使用
動的アクション・フォームBeanにValidatorを使用することができます。struts-config.xmlの<form-bean>タグのtype属性にDynaValidatorFormを指定するだけで使用することができます。他の部分はアクション・フォームBean時のValidatorの使用方法と同一です。

【<form-bean>タグにDynaValidatorFromを指定】
・・・・・
  <form-beans>
    <!-- type属性にDynaValidatorFormを指定 -->
    <form-bean
     name="DynaForm"
     type="org.apache.struts.validator.DynaValidatorForm">
     <form-property
      name="requireV"
      type="java.lang.String" />
    </form-bean>
  </form-beans>

  <action-mappings>
    <action path="/ExValidator"
            type="struts.ExValidatorAction"
            name="DynaForm"
            scope="request"
            validate="true"
            input="/error.jsp">
      <forward name="info" path="/exValidator2.jsp"/>
    </action>
  </action-mappings>
・・・・・

- 作者: 气度侠 2006年03月5日, 星期日 13:59  回复(1) |  引用(0) 加入博采

Struts(例外処理)

例外が発生した際、標準のエラー画面が表示され画面にプログラムのソースコードが表示されます。これは、セキュリティ上あまり好ましいことではありません。Struts例外処理を使用すると、例外が発生した際、指定した例外処理を行い指定したエラー画面を表示します。ここでは、Struts例外処理について解説します。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

基本処理

Strutsでは、struts-config.xmlの<global-exceptions>タグを使用して例外が発生した場合の例外処理を指定します。

1.<global-exceptions>タグ内に<exception>タグを指定し、例外クラスごとの例外処理を指定します。

2.<exception>タグでは、type属性にキャッチする例外クラス、key属性にメッセージ・リソースファイルに指定したエラーメッセージのキー、path属性に例外が発生した際に遷移するエラー画面を指定します。

3.例外が発生した際、<exception>タグのkey属性のエラーメッセージを保持したActionMessagesオブジェクトが生成されます。

4.エラー画面のJSPで、ActionMessagesオブジェクトのエラーメッセージを<html:messages>タグを使用して表示します。

アクション・クラスで例外が発生した場合の例外処理について解説します。

【exException.jsp】「送信」ボタンを一つだけもち、アクション・クラスへ処理を遷移させるJSPプログラムです。今回は何の処理も行いません。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>例外処理</title></head>
<body>

<html:form action="/ExException">
  <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>

【ExExceptionForm.java】アクション・フォームBeanです。今回は何の処理も行いません。
package struts;

import org.apache.struts.action.*;

public final class ExExceptionForm extends ActionForm {
}

【ExExceptionAction.java】アクション・クラスです。0で除算を行い例外を発生させています。
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

public final class ExExceptionAction extends Action {
  //①throws Exceptionを指定
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) throws Exception {
    //②0で除算して、例外を発生させる
    int discount = 100/0;
    return (mapping.findForward("info"));
  }
}

①.throws Exceptionを指定し、executeメソッド内で発生した例外をスローします。
②.0で除算し、例外ArithmeticExceptionを発生させます。

【error.jsp】例外が発生した際に遷移するJSPプログラムです。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>エラー画面</title></head>
<body>

エラーメッセージ
<br>
<%-- ①ActionMessagesオブジェクトのエラーメッセージを表示 --%> <html:messages id="msg" message="false"> <bean:write name="msg" ignore="true"/> </html:messages> </body> </html:html>

①.<html:messages>タグで、ActionMessagesオブジェクトに登録されたエラーメッセージを表示します。message属性がfalseの場合はエラーメッセージを表示することを表します。<bean:write>タグのignore属性をtrueにしている場合は、メッセージがない場合は何も表示されません。

【application.properties】メッセージ・リソースファイルです。
error.msg1=ArithmeticException Error! Please inform administrator.
error.msg =Exception Error! Please inform administrator.

【struts-config.xml】struts-config.xmlファイルです。例外が発生した際の動作を指定します。
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <form-beans>
    <form-bean name="ExException"
               type="struts.ExExceptionForm" />
  </form-beans>

  <!-- ①例外処理を指定 -->
  <global-exceptions>
    <!-- ②ArithmeticException例外が発生した際の処理を指定 -->
    <exception type="java.lang.ArithmeticException" 
               key="error.msg1"
               path="/error.jsp"/>
    <!-- ③Exception例外が発生した際の処理を指定 -->
    <exception type="java.lang.Exception" 
               key="error.msg"
               path="/error.jsp"/>
  </global-exceptions>

  <action-mappings>
    <action path="/ExException"
            type="struts.ExExceptionAction"
            name="ExException"
            scope="request">
      <forward name="info" path="/exException2.jsp"/>
    </action>
  </action-mappings>

  <!-- ④メッセージ・リソースファイルを指定 -->
  <message-resources parameter="resources.application"/>

</struts-config>

①.<global-exceptions>タグで例外が発生した際の処理を指定します。例外ごとの処理は<exception>タグで指定します。<exception>タグは上から順に実行されるため、例外の範囲が少ない順に例外を指定します。
②.<exception>タグのtype属性にArithmeticExceptionを指定し、例外ArithmeticExceptionが発生した際の処理を指定します。例外が発生した際、key属性で指定したエラーメッセージを保持し、path属性に指定したerror.jspページに遷移します。
③.<exception>タグのtype属性にExceptionを指定し、ArithmeticException以外の例外が発生した際の処理を指定します。例外が発生した際、key属性で指定したエラーメッセージを保持し、path属性に指定したerror.jspページに遷移します。
④.エラーメッセージが記載されているメッセージ・リソースファイルを指定します。

【実行例】プログラムの実行例です。「送信」ボタンをクリックするとアクション・クラスが実行され、例外が発生、例外処理が行われていることがわかります。
Javaの道_Struts実行結果_18_1

Javaの道_Struts実行結果_18_2

応用処理

1.例外処理クラスを指定
<exception>タグのhandler属性を指定することで例外が発生した際に実行されるクラスを指定することができます。例外が発生した際、何らかの特別な処理を行いたいときにhandler属性を使用します。

【<exception>タグにhandler属性を指定】
<global-exceptions>
    <!-- 例外処理クラスException01クラスを指定 -->
    <exception type="java.lang.ArithmeticException" 
               key="error.msg1"
               path="/error.jsp"
               handler="struts.exception.Exception01/>
・・・・・
・・・・・
</global-exceptions>

2.特定のアクション内の例外処理を指定
<action>タグ内に<exception>タグを指定することで、特定のアクションに限定した例外処理を指定することができます。

【<action>タグ内に<exception>タグを指定】
・・・・・
<action-mappings>
  <action path="/ExException"
          type="struts.ExExceptionAction"
          name="ExException"
          scope="request">
    <!-- <action>タグ内に<exception>タグを指定 -->
    <exception type="java.lang.ArithmeticException" 
               key="error.msg1"
               path="/error.jsp"/>

    <forward name="info" path="/exException2.jsp"/>
  </action>
</action-mappings>
・・・・・

- 作者: 气度侠 2006年03月5日, 星期日 13:57  回复(0) |  引用(0) 加入博采

Struts(メッセージ処理)

ここでは、Strutsでのメッセージ管理メッセージ処理方法について解説します。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

基本処理

Strutsでは、ActionMessages、ActionMessageといったクラスを利用してメッセージ処理を行います。

1.ActionMessagesクラスは複数のメッセージを管理するクラスです。

2.ActionMessageクラスは単一のメッセージを管理するクラスです。ActionMessageオブジェクトをActionMessagesオブジェクトに追加することによりメッセージ管理を行います。

3.saveMessages、saveErrorsメソッドを使用し、ActionMessagesオブジェクトをrequestスコープに登録します。requestスコープに登録することによりメッセージをJSPから参照できるようになります。

4.JSPでは、<html:messages>タグを利用してメッセージを表示します。

アクション・クラスで生成したメッセージを表示するプログラムを例に、Strutsのメッセージ処理について解説します。

【exMessage.jsp】「送信」ボタンを一つだけもち、アクション・クラスへ処理を遷移させるJSPプログラムです。今回は何の処理も行いません。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>メッセージ処理</title></head>
<body>

<html:form action="/ExMessage">
  <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>

【ExMessageForm.java】アクション・フォームBeanです。今回は何の処理も行いません。
package struts;

import org.apache.struts.action.*;

public final class ExMessageForm extends ActionForm {
}

【ExMessageAction.java】アクション・クラスです。メッセージの生成、管理を行います。
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

public final class ExMessageAction extends Action {
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {
    String name = "java";

    //①ActionMessagesオブジェクトの生成
    ActionMessages ams_success = new ActionMessages();
    //②ActionMessageオブジェクトの生成
    ActionMessage am_success1 = 
                  new ActionMessage("success.msg1", name);
    ActionMessage am_success2 = 
                  new ActionMessage("success.msg2", name);
    //③ActionMessageオブジェクトの登録
    ams_success.add(ActionMessages.GLOBAL_MESSAGE, am_success1);
    ams_success.add(ActionMessages.GLOBAL_MESSAGE, am_success2);
    //④ActionMessagesオブジェクトをメッセージとして登録
    saveMessages(req, ams_success);

    //⑤ActionMessagesオブジェクトの生成
    ActionMessages ams_error = new ActionMessages();
    //⑥ActionMessageオブジェクトの生成
    ActionMessage am_error1 = 
                  new ActionMessage("error.msg1", name);
    //⑦ActionMessageオブジェクトの登録
    ams_error.add(ActionMessages.GLOBAL_MESSAGE, am_error1);
    //⑧ActionMessagesオブジェクトをエラーメッセージとして登録
    saveErrors(req, ams_error);

    return (mapping.findForward("info")); 
  }
}

①.ActionMessagesオブジェクトams_successを生成します。
②.ActionMessageオブジェクトam_success1、am_success2を生成します。コンストラクタの引数にメッセージ・リソースファイルのキーと可変置き換え文字を指定します。
③.addメソッドを使用し、ActionMessagesオブジェクトにActionMessageオブジェクトを登録します。第一引数にはメッセージをグルーピングする際に使用するプロパティを指定します。ActionMessages.GLOBAL_MESSAGEは標準のプロパティです。第二引数に登録するActionMessageオブジェクトを指定します。
④.メッセージをJSPプログラムで使用するためにsaveMessagesメソッドを使用して、ActionMessagesオブジェクトをrequestスコープに登録します。saveMessagesはメッセージを通常のメッセージとして登録することを意味します。
⑤.ActionMessagesオブジェクトams_errorを生成します。
⑥.ActionMessageオブジェクトam_error1を生成します。
⑦.addメソッドを使用し、ActionMessagesオブジェクトにActionMessageオブジェクトを登録します。
⑧.メッセージをJSPプログラムで使用するためにsaveErrorsメソッドを使用して、ActionMessagesオブジェクトをrequestスコープに登録します。saveErrorsはメッセージをエラーメッセージとして登録する際に使用します。

【exMessage2.jsp】メッセージ、エラーメッセージを表示するJSPプログラムです。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>メッセージ処理</title></head>
<body>

・メッセージ
<br>
<%-- ①メッセージを表示します。 --%> <html:messages id="msg" message="true"> <bean:write name="msg" ignore="true"/> </html:messages> <br><br> ・エラーメッセージ <br> <%-- ②エラーメッセージを表示します。 --%> <html:messages id="msg" message="false"> <bean:write name="msg" ignore="true"/> </html:messages> </body> </html:html>

①.<html:messages>タグで、ActionMessagesオブジェクトに登録されたメッセージを表示します。message属性がtrueの場合はsaveMessagesメソッドで登録されたメッセージを表示します。<bean:write>タグのignore属性をtrueにしている場合は、メッセージがない場合は何も表示されません。
②.<html:messages>タグのmessage属性がfalseの場合はsaveErrorsメソッドで登録されたエラーメッセージを表示します。<bean:write>タグのignore属性をtrueにしている場合は、エラーメッセージがない場合は何も表示されません。

【application.properties】メッセージ・リソースファイルです。
success.msg1={0} Congratulation!
success.msg2=Thank you for registration!

error.msg1={0} I'm sorry.

【struts-config.xml】struts-config.xmlファイルです。
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <form-beans>
    <form-bean
     name="ExMessage"
     type="struts.ExMessageForm" />
  </form-beans>

  <action-mappings>
    <action path="/ExMessage"
     type="struts.ExMessageAction"
     name="ExMessage"
     scope="request">
      <forward name="info" path="/exMessage2.jsp"/>
    </action>
  </action-mappings>

  <message-resources parameter="resources.application"/>

</struts-config>

【実行例】プログラムの実行例です。通常のメッセージとエラーメッセージが表示されていることがわかります。
Javaの道_Struts実行結果_17_1

応用処理

1.メッセージに可変置き換え文字を使用
メッセージに可変置き換え文字を使用する場合は、ActionMessageオブジェクトにメッセージを登録する際にコンストラクタの引数に可変置き換え文字を指定します。可変置き換え文字は4つまで指定することができます。また、可変置き換え文字を配列で指定することもできます。置き換えられるメッセージはメッセージ・リソースファイルの{0}~[3}で指定します。

【ActionMessageオブジェクトにメッセージを登録】
String id = "12345";
String name = "java"; //メッセージ・リソースファイルのキー"success.msg" //の可変置き換え文字として、id、nameを登録 ActionMessage am = new ActionMessage("success.msg", id, name);

【メッセージ・リソースファイル】
#メッセージが置き換えられる部分として{0}, {1}を指定
success.msg=Your data is {0}, {1} .

2.メッセージをグループ化
addメソッドを使用してActionMessageを登録する際に第一引数に、グループを識別するプロパティを指定することで、メッセージをグループ化して管理することができます。指定したプロパティを<html:message>タグのproperty属性に指定することで、該当のグループに属するメッセージのみを表示することができます。標準のグループはActionMessages.GLOBAL_MESSAGEです。

【addメソッドでActionMessageオブジェクトを登録】
//ActionMessageオブジェクトamに登録されているメッセージを
//GROUP1_MESSAGEグループに属するメッセージとして登録
ams.add(GROUP1_MESSAGE, am);

【グループを指定してメッセージを表示】
<%-- GROUP1_MESSAGEグループに属するメッセージのみを表示 --%>
<html:messages id="msg" message="true" property="GROUP1_MESSAGE">
  <bean:write name="msg" ignore="true"/>
</html:messages>

3.sessionスコープにメッセージを登録
saveMessagesメソッドを使用してメッセージをsessionスコープで登録することができます。エラーメッセージをsessionスコープで登録することはできません。

【メッセージをsessionスコープで登録】
//saveMessagesメソッドの引数にSessionオブジェクトを指定して
//メッセージをsessionスコープで登録
saveMessages(req.getSession(), ams);

- 作者: 气度侠 2006年03月5日, 星期日 13:54  回复(0) |  引用(0) 加入博采

メッセージ・リソースファイルの日本語処理
ここでは、Strutsのメッセージ・リソースファイルで日本語を利用する場合の方法について解説します。 実行環境・WindowsXP Home Edition ・J2SE 1.4.2_04 ・Tomcat 5.0.18 ・Struts 1.2.4 日本語処理 ▲ Top メッセージ・リソースファイルで日本語を利用する場合は、native2asciiコマンドを利用し日本語をUnicodeでエンコードする必要があります。native2asciiコマンドはJAVA_HOME\binディレクトリ配下にあります。-encodingオプションには変換前ファイルのエンコード方式を指定します。指定しない場合は、OSのデフォルトのエンコード方式が使用されます。-reverseオプションはUnicodeでエンコードされたファイルを元に戻します。 native2ascii [ -encoding エンコード方式 ] [ -reverse ] 変換前ファイル 変換後ファイル 【application.txt(変換前)】natice2asciiコマンド利用前のメッセージ・リソースファイルです。 message.hello=こんにちは 【application.properties(変換後)】natice2asciiコマンド利用後のメッセージ・リソースファイルです。 message.hello=\u3053\u3093\u306b\u3061\u306f 【実行例】native2asciiコマンドの実行例です。 C:\java>native2ascii application.txt application.properties C:\java> ロケールの指定 ▲ Top メッセージ・リソースファイルのファイル名にロケールを指定することでブラウザに設定されている言語に合わせたメッセージ・リソースファイルを使用することができます。ブラウザに設定されている言語のメッセージ・リソースファイルがない場合は、デフォルトのメッセージ・リソースファイルが使用されます。 ファイル名[_ISO言語コード][_ISO国コード].properties ISO言語コード:http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt ISO国コード:http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html 【application_ja.properties】日本語用のメッセージ・リソースファイルです。 message.hello=\u3053\u3093\u306b\u3061\u306f 【application.properties】デフォルトのメッセージ・リソースファイルです。 message.hello=Hello 【実行結果1】言語に日本語が指定されていた場合の実行結果です。 【実行結果2】言語に英語が指定されていた場合の実行結果です。

- 作者: 气度侠 2006年03月5日, 星期日 13:52  回复(0) |  引用(0) 加入博采

Struts(メッセージ・リソースファイル)

ここでは、Strutsメッセージ・リソースファイルについて解説します。メッセージ・リソースファイルとは、Struts内で利用されるメッセージを管理するためのファイルです。通常のメッセージ、エラーメッセージ、Formのボタン名などを管理します。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

記載方法

・キーとメッセージで管理するメッセージを記載します。キーとメッセージの間は「=」で区切ります。

・メッセージが長い場合は「\」で改行した文字列を連結ることができます。

・可変の置き換え文字を{0}~{4}で指定できます。置き換え文字は<beam:message>タグのarg0からarg4属性で指定します。

・メッセージ・リソースファイルの拡張子は「.properties」です。

【xxx.properties】メッセージ・リソースファイルの記載例です。
# キー「error.name」、メッセージ「name is not correct.」を指定 
error.name=name is not correct.
error.pass=password is not correct.

# 可変の置き換え文字{0}を指定
message.confirm =Please confirm {0}.
# 改行した文章を\で連結
message.complete=Thank you! \
                 Registration Complete!

button.submit =SubmitA
struts-config.xmlの設定

・メッセージ・リソースファイルはstruts-config.xmlの<message-resources>タグで指定します。

・<message-resources>タグのparameter属性にメッセージ・リソースファイルの配置ディレクトリ、ファイル名を指定します。配置ディレクトリは\WEB-INF\classesディレクトリ以下から指定します。ファイル名に拡張子(properties)を指定する必要はありません。

【struts-config.xml】メッセージ・リソースファイルの指定例です。
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

<!--
  \WEB-INF\classes\resourcesディレクトリに配置した
  xxx.propertiesメッセージ・リソースファイルを指定しています。
-->
<message-resources parameter="resources.xxx"/>

</struts-config>
表示方法

・メッセージ・リソースファイルで指定したメッセージは<bean:message>タグで表示します。

・<bean:message>タグのkey属性に表示するメッセージのキーを指定します。可変の置き換え文字がある場合は、arg0からarg4属性に指定します。

【exResourceFile.jsp】<bean:message>タグの使用例です。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>メッセージ・リソースファイル</title></head>
<body>

<%-- key属性にerror.nameを指定し、key属性に
     該当するメッセージを表示しています。 --%>
<bean:message key="error.name"/><br>
<bean:message key="error.pass"/><br>
<br>
<%-- arg0属性に置き換え文字nameを指定しています。 --%>
<bean:message key="message.confirm" arg0="name"/><br>
<bean:message key="message.complete"/><br>
<br>
<%-- <html:submit>タグ内に<bean:message>タグを指定し、ボタン名に
     メッセージ・リソースのメッセージを適用しています。 --%>
<html:submit property="exeMethod">
  <bean:message key="button.submit"/>
</html:submit>

</body>
</html:html>
実行結果

これまで解説したメッセージ・リソースファイル(xxx.properties)、struts-config.xml、JSPプログラム(exResourceFile.jsp)の実行結果です。

Javaの道_Struts実行結果_15_1

- 作者: 气度侠 2006年03月5日, 星期日 13:50  回复(0) |  引用(0) 加入博采

アクション・クラス:LookupDispatchAction

ここでは、Strutsアクション・クラスの内、LookupDispatchActionクラスについて解説します。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

概要

LookupDispatchActionクラスはフォーム画面内で、submitボタンが複数ある場合に使用するアクション・クラスです。submitボタンごとそれぞれの処理を実行することができます。DispatchActionクラスもsubmitボタンが複数ある場合に使用するアクション・クラスですが、DispatchActionクラスはsubmitボタン名と処理するメソッド名が必ず同じでなければなりません。そのため、submitボタン名に日本語を使用することができません。

LookupDispatchActionクラスは処理するメソッドの情報を、Mapオブジェクト(メッセージ・リソースファイルのキーとメソッド名の組み合わせ)で保持します。submitボタン名はメッセージ・リソースファイルのキーに対する値になります。そのため、値に日本語を使用することで、submitボタン名に日本語を使用することができます。

○LookupDispatchActionクラスの作成ポイント

アクション・クラスは、LookupDispatchActionクラスを継承して作成します。

・アクション・クラスは、Mapオブジェクトを作成するためのgetKeyMethodMapメソッド、submitボタンごとの処理メソッドで構成されます。

・submitボタンごとの処理メソッドは、Actionクラスのexecuteメソッドと同じ形式をとります。

・メッセージ・リソースファイルのキーの値に日本語を使用する場合は、native2asciiコマンドでエンコードしておく必要があります。

使用例

フォーム画面にsubmitボタンを2つ作成し、submitボタンそれぞれの処理を実行するプログラムを例に、LookupDispatchActionクラスの使用方法について解説します。

【exLookupDispatch.jsp】submitボタンを複数持つ、フォーム画面です。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>exLookupDispatch.jsp</title></head>
<body>

<html:form action="/ExLookupDispatch">
<%-- ①property属性を指定 --%> <html:submit property="exeMethod"> <%-- ②メッセージ・リソースファイルの値を表示 --%> <bean:message key="submit.a"/> </html:submit> <br><br> <html:submit property="exeMethod"> <bean:message key="submit.b"/> </html:submit> </html:form> </body> </html:html>

①.property属性にstruts-config.xmlの<action>タグのparameter属性と同一の値を指定します。
②.<bean:message>タグを使用し、メッセージ・リソースファイルに記載されるsubmitボタン名を表示します。

【submitA.jsp】「送信A」ボタンをクリックした際に実行されるJSPプログラムです。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>submitA.jsp</title></head>
<body>

送信Aボタンをクリック。

</body>
</html:html>

【submitB.jsp】「送信B」ボタンをクリックした際に実行されるJSPプログラムです。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>submitB.jsp</title></head>
<body>

送信Bボタンをクリック。

</body>
</html:html>

【ExLookupDispatchForm.java】アクション・フォームBeanです。今回は何の処理も行いません。
package struts;

import org.apache.struts.action.*;

public final class ExLookupDispatchForm extends ActionForm {
}

【ExLookupDispatchAction.java】LookupDispatchActionクラスを継承したアクション・クラスです。
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;
//①該当パッケージをインポート
import org.apache.struts.actions.*;
import java.util.*;

//②LookupDispathcActionクラスを継承
public final class ExLookupDispatchAction 
                   extends LookupDispatchAction {
  //③getKeyMethodMapメソッドを宣言
  protected Map getKeyMethodMap() {
    Map map = new HashMap();
    map.put("submit.a", "methodA");
    map.put("submit.b", "methodB");
    return map;
  }

  //④「送信A」ボタンクリック時に実行されるmethodAメソッドを宣言
  public ActionForward methodA(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    return (mapping.findForward("methodA")); 

  }

  //⑤「送信B」ボタンクリック時に実行されるmethodBメソッドを宣言
  public ActionForward methodB(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    return (mapping.findForward("methodB")); 

  }
}

①.LookupDispatchActionクラスを継承したクラスを宣言するために、該当のパッケージをインポートします。
②.LookupDispatchActionクラスを継承したExLookupDispatchActionクラスを宣言します。
③.getKeyMethodMapメソッドで、メッセージ・リソースファイルのキーと処理するメソッドの組み合わせをMapオブジェクトに保持します。ここでは、メッセージ・リソースファイルの"submit.a"キーを参照するsubmitボタンがクリックされた時、methodAメソッドが実行されることを表します。
④."submit.a"キーを参照する「送信A」ボタンがクリックされたときに実行されるmethodAを宣言します。書式は、Actionクラスのexecuteメソッドと同一です。ここでは、単にfindForward("methodA")メソッドを実行し、struts-config.xmlに指定したページに遷移する処理のみを行っています。
⑤."submit.b"キーを参照する「送信B」ボタンがクリックされたときに実行されるmethodBを宣言します。

【struts-config.xml】アクション・フォームBean、アクション・クラスの振る舞いを指定します。
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <form-beans>
    <form-bean
     name="ExLookupDispatch"
     type="struts.ExLookupDispatchForm"/>
  </form-beans>

  <action-mappings>
<!-- ①アクション・クラスの振る舞いを定義 --> <action path="/ExLookupDispatch" type="struts.ExLookupDispatchAction" name="ExLookupDispatch" parameter="exeMethod"> <!-- ②findForwardメソッド実行後の遷移先を指定 --> <forward name="methodA" path="/submitA.jsp"/> <forward name="methodB" path="/submitB.jsp"/> </action> </action-mappings> <!-- ③メッセージ・リソースファイルを指定 --> <message-resources parameter="resources.application"/> </struts-config>

①.<action>タグにアクション・クラスの振る舞いを定義します。parameter属性に、<html:submit>タグのproperty属性に指定された値を指定します。
②.<forward>タグにアクション・クラスのfindForwardメソッド実行後の遷移先を指定します。
③.メッセージ・リソースファイルを指定します。メッセージ・リソースファイルは\WEB-INF\classesディレクトリ配下に設置します。拡張子(.properties)は指定する必要はありません。

【application.properties】メッセージ・リソースファイルです。"submit.a"に送信A、"submit.b"に送信Bを指定し、native2asciiコマンドでエンコードしています。
submit.a=\u9001\u4fe1A
submit.b=\u9001\u4fe1B

【exLookupDispatch.jsp】 submitボタンが複数あるフォーム画面です。
Javaの道_Struts実行結果_14_1

【submitA.jsp】 「送信A」ボタンをクリックした実行結果です。
Javaの道_Struts実行結果_14_2

- 作者: 气度侠 2006年03月5日, 星期日 13:47  回复(0) |  引用(0) 加入博采

アクション・クラス:ForwardAction

ここでは、Strutsアクション・クラスの内、ForwardActionクラスについて解説します。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

使用例

ForwardActionクラスはビジネスロジックの処理を行わず、単にリクエストの転送のみを行うアクション・クラスです。前ページ(exForAction.jsp)で入力された値を次ページ(exForAction2.jsp)で表示するプログラムを例に、ForwardActionクラスの使用方法について解説します。

ForwardActionクラスはstruts-config.xmlに指定するだけで使用できます。

【struts-config.xml】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

<!-- ①アクション・フォームBean ExForActionFormクラスを指定します。 --> <form-beans> <form-bean name="ExForAction" type="struts.ExForActionForm" /> </form-beans> <action-mappings> <!-- ②アクション・クラス ForwardActionクラスを指定します。 --> <action path="/ExForAction" type="org.apache.struts.actions.ForwardAction" name="ExForAction" scope="request" parameter="/exForAction2.jsp" /> </action-mappings> </struts-config>

①.<form-beans>タグで、アクション・フォームBeanの論理名とクラス名を指定します。
②.<action>タグのpath属性に、JSPのフォーム画面から指定される値を指定します。type属性にForwardActionクラスを指定します。ここでは、必ずorg.apache.struts.actions.ForwardActionと指定します。name属性にアクション・クラスが実行されたときに実行されるアクション・フォームBeanの論理名を指定します。scope属性にアクション・フォームBeanに保持されるプロパティのスコープを指定します。parameter属性にForwardActionクラスが実行されたときに遷移する遷移先を指定します。遷移先の指定は/ではじめる必要があります。

【exForAction.jsp】
Javaの道_Struts実行結果_13_1

【exForAction2.jsp】
Javaの道_Struts実行結果_13_2

- 作者: 气度侠 2006年03月5日, 星期日 13:46  回复(0) |  引用(0) 加入博采

Struts(アクション・クラス)

ここでは、Strutsアクション・クラスについて解説します。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

概要

アクション・クラスとはStrutsアプリケーション内で、ビジネスロジックを担当する部分です。アクション・クラスにビジネスロジック処理を記述したり、ビジネスロジック処理を行う外部プログラムを呼び出したりします。

アクション・クラスはStrutsであらかじめ用意されているクラスを継承して作成します。あらかじめ用意されているクラスには以下のクラスがあります。

クラス名
内容
Action
アクション・クラスの基本となるクラスです。
ForwardAction
ビジネスロジックの処理を行わず、リクエストの転送のみを行うクラスです。
IncludeAction
サーブレットなど指定した外部プログラムを実行させる処理のみを行うクラスです。
SwitchAction
異なるStrutsアプリケーション内のプログラムと連携するためのクラスです。
DispatchAction
フォーム内に複数のボタンを利用するプログラムを処理するクラスです。ボタンと関連するプログラム名は同一でなければなりません。
LookupDispatchAction
DispatchActionクラスと同様に、フォーム内に複数のボタンを利用するプログラムを処理するクラスです。DispatchActionクラスとの違いは、ボタンと関連するプログラム名の情報をMapオブジェクトで保持している点です。
使用例

入力した数を10乗し、表示するプログラムを例にアクション・クラスの動作について解説します。

①.exAction.jspのフォーム画面で10乗する数値を入力し、実行すると、<html:form action="/ExAction">で指定された"/ExAction"とstruts-config.xmlの<action>タグのpath属性が合致するアクション・クラスが実行されます。
②.アクション・クラスが実行される際、struts-config.xmlの<action>タグのname属性に指定されるアクション・フォームBeanが実行されます。アクション・フォームBeanで、入力された数値を保持します。
③.アクション・クラス(ExActionAction.java)で入力された数値を10乗し、値をアクション・フォームBeanに保持します。
④.アクション・クラス(ExActionAction.java)でfindForward("success")メソッドが実行されると、struts-config.xmlの<forward>タグの合致する値"success"の遷移先、exAction2.jspに遷移します。
⑤.exAction2.jspでは、<bean:write>タグでアクション・フォームBeanに保持された10乗された値を参照、表示します。

【exAction.jsp】フォーム画面を作成します。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>アクション・クラス</title></head>
<body>

<%-- <html:form>タグのaction属性で
     実行されるアクション・クラスを指定します。 --%>
<html:form action="/ExAction">
  <html:text property="countNum"/>
  <br><br>
  <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>

【exAction2.jsp】アクション・フォームBeanに保持されたデータを表示します。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>アクション・クラス</title></head>
<body>

<%-- アクション・フォームBeanに保持される
     countNumプロパティを参照します。 --%>
<bean:write name="ExAction" property="countNum"
            scope="request" format="######" />

</body>
</html:html>

【ExActionForm.java】アクション・フォームBean ExActionForm.javaを作成します。
package struts;

import org.apache.struts.action.*;

public final class ExActionForm extends ActionForm {

  private int countNum;
  // countNumプロパティを保持するメソッドです。
  public void setCountNum(int countNum) {this.countNum = countNum;}
  // countNumプロパティを参照するメソッドです。
public int getCountNum() {return countNum;} }

【ExActionAction.java】アクション・クラスExActionAction.javaを作成します。
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

//①Actionクラスを継承して、ExActionActionクラスを宣言します。
public final class ExActionAction extends Action {
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    //②キャストし、アクション・フォームBeanの
        ExActionオブジェクトを取得します。
ExActionForm eaf = (ExActionForm)form; int countNum = eaf.getCountNum(); int countNum2 = eaf.getCountNum(); //③フォームに入力された値を10乗します。 for (int i = 0; i < 9; i++) { countNum = countNum * countNum2; } //④10乗された値をアクション・フォームBeanに保持します。 eaf.setCountNum(countNum); //⑤アクション・クラス実行後の遷移先を指定します。 return (mapping.findForward("success")); } }

①.Actionクラスを継承して、アクション・クラスExActionActionクラスを宣言します。
②.ActionFromクラスのオブジェクトformをキャストし、ExActionFormクラスのオブジェクトeafを取得します。 アクセスメソッドgetCountNumを実行し、フォーム画面で入力された数値を取得します。
③.取得した数値を10乗します。
④.アクセスメソッドsetCountNumを実行し、10乗された値をアクション・フォームBeanに保持します。
⑤.findForwardメソッドを実行し、引数に指定された値"success"と合致するstruts-config.xmlの<forward>タグに指定された遷移先に遷移します。

【struts-config.xml】アクション・フォームBean、アクション・クラスの振る舞いを指定します。
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <!-- ①アクション・フォームBeanを指定します。 -->
  <form-beans>
    <form-bean
     name="ExAction"
     type="struts.ExActionForm" />
  </form-beans>

  <action-mappings>
    <!-- ②アクション・クラスの振る舞いを指定します。 -->
    <action path="/ExAction"
     type="struts.ExActionAction"
     name="ExAction"
     scope="request">
      <!-- ③アクション・クラス実行後の遷移先を指定します。 -->
      <forward name="success" path="/exAction2.jsp"/>
    </action>
  </action-mappings>

</struts-config>

①.<form-beans>タグで、アクション・フォームBeanの論理名とクラス名を指定します。
②.<action>タグのpath属性に、JSPのフォーム画面から指定される値を指定します。type属性にアクション・クラス名を指定します。name属性にアクション・クラスが実行されたときに実行されるアクション・フォームBeanの論理名を指定します。scope属性にアクション・フォームBeanに保持されるプロパティのスコープを指定します。
③.<forward>タグで、アクション・クラスでfindForwardメソッドが実行された際の遷移先を指定します。

【exAction.jsp】
Javaの道_Struts実行結果_12_1

【exAction2.jsp】
Javaの道_Struts実行結果_12_2

- 作者: 气度侠 2006年03月5日, 星期日 13:44  回复(0) |  引用(0) 加入博采

動的アクション・フォームBean

ここでは、Struts動的アクション・フォームBeanの利用方法について解説します。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

概要

動的アクション・フォームBeanとは、アクション・フォームBeanを自動的に生成する方法です。アクション・フォームBeanには通常、定型的なアクセスメソッドを記載するだけであるため、その部分を自動化したものです。アクション・フォームBeanの設定はstruts-config.xmlで行います。

アクション・フォームBeanと動的アクション・フォームBeanの違いの一つに、アクション・フォームBeanにプロパティ値が格納される前に呼び出されるresetメソッドを利用できるかどうかがあります。動的アクション・フォームBeanではresetメソッドを利用することができません。
また、動的アクション・フォームBeanでは、プロパティの型に基本型(int、floatなど)を利用することはできません。

struts-confgi.xmlの設定方法
【struts-config.xml】
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <form-beans>
<!-- ①動的アクション・フォームBeanの指定 --> <form-bean name="DynaForm" type="org.apache.struts.action.DynaActionForm"> <!-- ②動的アクション・フォームBeanのプロパティの指定 --> <form-property name="name" type="java.lang.String" /> </form-bean> </form-beans> <action-mappings> <action path="/Dyna" type="struts.DynaAction" name="DynaForm" scope="request"> <forward name="success" path="/exDyna2.jsp"/> </action> </action-mappings> </struts-config>

①.<form-bean>タグで動的アクション・フォームBeanを指定します。name属性に動的アクション・フォームBeanの名前、type属性にはorg.apache.struts.action.DynaActionFormを指定します。
②.<form-property>タグで動的アクション・フォームBeanのプロパティを指定します。name属性にプロパティ名を指定します。type属性にプロパティの型を指定します。

アクセスメソッド

アクション・フォームBeanのアクセスメソッドはgetXxx( )、setXxx(データ型 変数名)ですが、動的アクション・フォームBeanのアクセスメソッドは以下の形式になります。引数に指定された値でどのプロパティのアクセスメソッドかを判別します。

データ保持のためのアクセスメソッド

set(プロパティ名, プロパティ値);


データ参照のためのアクセスメソッド

get(プロパティ名);

アクション・クラス
【DynaAction.java】アクション・クラスから動的アクション・フォームBeanのプロパティ値を取得、設定しています。
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

public final class DynaAction extends Action {
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    //①DynaActionFormクラスにキャスト
    DynaActionForm daf = (DynaActionForm)form;
    //②プロパティnameの値を取得
String nameA = daf.get("name").toString(); //③プロパティnameに値を設定
daf.set("name", nameA + "_100"); return (mapping.findForward("success")); } }

①.動的アクション・フォームBeanのオブジェクトを取得する際は、DynaActionFormでキャストして取得します。
②.get(プロパティ名)でプロパティnameの値を取得し、toStringメソッドを使用し文字列に変更しています。
③.set(プロパティ名, プロパティ値)でプロパティnameに新しい値を設定しています。

実行結果

これまで説明したstruts-config.xml、DynaAction.javaを使用し、フォーム画面(exDyna.jsp)で入力した値を次の画面(exDyna2.jsp)で表示するプログラムを実行します。

【exDyna.jsp】値を入力するフォーム画面です。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>動的アクション・フォームBean</title></head>
<body>

<html:form action="/Dyna">
  <%-- 入力項目 --%>
  <html:text property="name"/>
  <br><br>
  <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>

【exDyna2.jsp】動的アクション・フォームBeanのプロパティ値を表示する画面です。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>動的アクション・フォームBean</title></head>
<body>

<%-- 動的アクション・フォームBeanのプロパティ値を表示 --%>
<bean:write name="DynaForm" property="name" scope="request" ignore="true" /> </body> </html:html>

【exDyna.jsp】
Javaの道_Struts実行結果_11_1

【exDyna2.jsp】
Javaの道_Struts実行結果_11_2

- 作者: 气度侠 2006年03月5日, 星期日 13:41  回复(0) |  引用(0) 加入博采

アクション・フォームBeanの日本語処理

ここでは、Strutsアクション・フォームBeanで、日本語を処理する方法について解説します。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

概要

アクション・フォームBeanでは、ブラウザからのリクエストデータを格納する際、どのエンコード方式を使用しているかの情報を得る(setCharacterEncodingメソッドなど)前にリクエストデータを格納します。そのため、日本語を扱う際、文字化けが起こります。

アクション・フォームBeanで日本語処理を行う際は、Servlet2.3から導入されたフィルタ機能を利用します。フィルタ機能でリクエストデータのエンコード処理を行います。フィルタ機能が使えない場合は、アクション・フォームBeanにデータが格納される前に呼び出されるresetメソッド内でsetCharacterEncodingメソッドを呼び出す、アクセスメソッド内でエンコード処理を行うなどの対応を行います。

ここでは、フィルタ機能を利用したエンコード処理について解説します。フィルタ機能の詳細に関しましてはJavaの道:フィルタを参照してください。

使用例

フィルタ処理の際、実行されるプログラムにはTomcatのサンプルプログラムとして提供されているSetCharacterEncodingFilterクラスを利用します。SetCharacterEncodingFilterクラスを持っていない場合は、以下よりダウンロードしてください。

ソースファイル:SetCharacterEncodingFilter.java
クラスファイル:SetCharacterEncodingFilter.class
※右クリック、「対象をファイルに保存」でダウンロードできます。

web.xmlにフィルタ処理を行う際の記載を行います。

【web.xml】
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <filter>
  <!-- フィルタ名を記載します。 --> <filter-name>EncodeFilter</filter-name>   <!-- フィルタ処理の際のクラスを指定します。 SetCharacterEncodingFilterクラスは filtersパッケージ内にあります。 --> <filter-class>filters.SetCharacterEncodingFilter</filter-class>   <!-- パラメータ値にエンコード方式を指定します。 --> <init-param> <param-name>encoding</param-name> <param-value>Shift_JIS</param-value> </init-param> </filter> <!-- すべてのURLパターンでフィルタ処理が
行われるように指定します。 -->
<filter-mapping> <filter-name>EncodeFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet>

・・・・・・・・・・・・
・・・・・・・・・・・・

以下は、SetCharacterEncodingFilterクラスをWEB-INF\classes\filtersディレクトリに設置し、アクション・フォームBeanを実行した例です。

【exEncode.jsp】入力フォーマットを表示するJSPプログラムです。
Javaの道_Struts実行結果_10_1

【exEncode2.jsp】アクション・フォームBeanに格納されたデータを参照し、表示するJSPプログラムです。日本語が文字化けせず表示されているのがわかります。
Javaの道_Struts実行結果_10_2

- 作者: 气度侠 2006年03月5日, 星期日 13:40  回复(0) |  引用(0) 加入博采

Struts(アクション・フォームBean)

ここでは、Strutsアクション・フォームBeanについて解説します。

実行環境
・WindowsXP Home Edition
・J2SE 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

概要

アクション・フォームBeanはフォーム画面から送信されてくるデータの保持、他のプログラムからのデータの参照を行う機能を持っています。アクション・フォームBeanにはデータの保持・参照を行うためのメソッド(アクセスメソッド)を指定する必要があります。アクセスメソッドは以下の形式になります。

データ保持のためのアクセスメソッド

public setXxx(データ型 変数名);


データ参照のためのアクセスメソッド

public 戻り型 getXxx( );

アクセスメソッドは他のプログラムから呼び出されるため、publicを指定する必要があります。Xxxにはプロパティ名が入ります。プロパティ名はフォームの<html:text property="id"/>でいうproperty属性に指定された値になります。プロパティ名の最初の文字は大文字にする必要があります。

アクション・フォームBeanで値を保持する際に、その値のスコープを指定することができます。スコープはstruts-config.xmlで指定します。指定できるスコープはrequestスコープと、sessionスコープです。

動作例

フォーム画面(exForm.jsp)で入力したデータを他の画面(exForm2.jsp)で表示するプログラムを例に、アクション・フォームBeanの動作について解説します。

①.exForm.jspのフォーム画面を実行すると、<html:form action="/FormBean">で指定された"/FormBean"とstruts-config.xmlの<action>タグのpath属性が合致するアクション・クラスが実行されます。
②.アクション・クラスが実行される際、struts-config.xmlの<action>タグのname属性に指定されるアクション・フォームBeanが実行されます。
③.アクション・フォームBeanが実行される際、exForm.jspのフォーム画面で入力されたデータを保持するための該当のアクセスメソッドが呼び出されます。ここでは、setIdメソッドが呼び出されます。<action>タグのscope属性にrequestが指定されているため、データはrequestスコープで保持されます。
④.アクション・クラス実行後、struts-config.xmlの指定に従い、exForm2.jspに遷移します。
⑤.exFrom2.jspの<bean:write>タグは指定されたアクション・フォームBeanのプロパティに該当するデータを参照、表示します。ここではデータを参照する際、getIdメソッドが呼び出されます。

【exForm.jsp】フォーム画面を作成します。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head>
<title>アクション・フォームBean動作例</title>
</head>

<body>
<%-- htmlタグライブラリでフォームを作成 --%>
<html:form action="/FormBean">
  <%-- プロパティ名がidの入力項目を作成 --%>
  <html:text property="id"/>
  <html:submit property="submit" value="送信"/>
</html:form>
</body>

</html:html>

【exForm2.jsp】フォーム画面で入力したデータを表示します。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>アクション・フォームBean動作例</title></head>
<body>

<%-- beanタグライブラリで指定されたアクション・フォームBeanの
     プロパティのデータを取得、表示 --%>
<bean:write name="FormBeanForm" property="id"
            scope="request" ignore="true" />

</body>
</html:html>

【FormBeanForm.java】アクション・フォームBeanの動作を行うクラスを作成します。
package struts;

import org.apache.struts.action.*;

//アクション・フォームBeanであるFormBeanFormクラスの作成
//アクション・フォームBeanの動作を行うクラスはActionForm
//クラスを継承する必要があります。
public final class FormBeanForm extends ActionForm {

  //プロパティのデータを保持する変数を宣言
  private String id;

  //プロパティのデータを保持するアクセスメソッドを宣言
  public void setId(String id) {this.id = id;}
  //プロパティのデータを参照するアクセスメソッドを宣言
  public String getId() {return id;}

}

【FormBeanAction.java】アクション・クラスの動作を行うクラスを作成します。
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

//アクション・クラスであるFormBeanActionクラスの作成
public final class FormBeanAction extends Action {
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    //exForm2.jspの呼び出し、呼び出すexForm2.jspは
    //struts-config.xmlに記載
    return (mapping.findForward("success")); 
  }
}

【struts-config.xml】アクション・フォームBean、アクション・クラスの振る舞いを指定します。
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <!-- アクション・フォームBeanの指定 -->
  <form-beans>
    <form-bean
     name="FormBeanForm"
     type="struts.FormBeanForm"/>
  </form-beans>

  <!-- アクション・クラスの振る舞いを指定 -->
  <action-mappings>
    <action path="/FormBean"
     type="struts.FormBeanAction"
     name="FormBeanForm"
     scope="request">
      <!-- アクション・クラス実行後の遷移先を指定 -->
      <forward name="success" path="/exForm2.jsp"/>
    </action>
  </action-mappings>

</struts-config>
データ型

アクション・フォームBeanは数値、文字列、Boolean、オブジェクト、配列、コレクション、日付型など様々なデータ型を取り扱うことができます。

【アクション・フォームBeanの例】
package struts;

import org.apache.struts.action.*;

public final class FormBeanForm extends ActionForm {

  private int code;
  private String name;
  private boolean reply = false;
  private String[] hobby;

  //数値型のアクセスメソッド
  public void setCode(int code) {this.code = code;}
  //文字列型のアクセスメソッド
  public void setName(String name) {this.name = name;}
  //boolean型のアクセスメソッド
  public void setReply(boolean reply) {this.reply = reply;}
  //配列型のアクセスメソッド
  public void setHobby(String[] hobby) {this.hobby = hobby;}

  //数値型のアクセスメソッド
  public int getCode() {return code;}
  //文字列型のアクセスメソッド
  public String getName() {return name;}
  //boolean型のアクセスメソッド
  public boolean getReply() {return reply;}
  //配列型のアクセスメソッド
  public String[] getHobby() {return hobby;}
}

【プロパティの参照例】
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<html:html>
<head><title>プロパティの参照例</title></head>
<body>

<%-- 数値型のプロパティの参照 --%>
<bean:write name="FormBeanForm" property="code"
            scope="request" ignore="true" />
<br><br>
<%-- 文字列型のプロパティの参照 --%>
<bean:write name="FormBeanForm" property="name"
            scope="request" ignore="true" />
<br><br>
<%-- boolean型のプロパティの参照 --%>
<bean:write name="FormBeanForm" property="reply"
            scope="request" ignore="true" />
<br><br>
<%-- 配列型のプロパティの参照 --%>
<bean:write name="FormBeanForm" property="hobby[1]"
            scope="request" ignore="true" />
</body>
</html:html>
※<bean:write>タグから数値型のプロパティを参照する際はformat属性、 もしくはformatKey属性を指定する必要があります。指定していない場合は、メッセージ・リソースファイルのorg.apache.struts.taglib.bean.format.int(整数型)、org.apache.struts.taglib.bean.format.float(浮動小数点型)のキーが参照されます。キーが指定されていない場合はエラーになります。
(例) org.apache.struts.taglib.bean.format.int=###

- 作者: 气度侠 2006年03月5日, 星期日 13:36  回复(0) |  引用(0) 加入博采

Struts(logicタグライブラリ)

ここでは、Strutsで用意されているカスタムタグライブラリのうち、logicタグライブラリについて解説します。logicタグライブラリには繰返し処理、条件分岐、リダイレクト処理などを行うタグが定義されています。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

使用例

前ページで値を入力し、次ページでその値の条件分岐、繰返し処理を行うプログラムを作成します。

【作成ファイル一覧】
ファイル名
内容
exLogic.jsp
値を入力するForm画面をhtmlタグライブラリで作成します。
exLogic2.jsp
前ページで入力された値の条件分岐、繰返し処理をlogicタグライブラリで行います。
LogicRegistrationForm.java
入力された値を保持するアクション・フォームBeanです。
LogicRegistrationAction.java
アクション・クラスです。遷移先のファイルとして、exLogic2.jspを指定します。
struts-config.xml
Strutsプログラムの定義ファイルです。

【exLogic.jsp】htmlタグライブラリを使用して、Form画面を作成します。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- ①タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>logicタグライブラリ</title></head>
<body>
logicタグライブラリ サンプル1
<html:form action="/LogicRegistration">
  IDコード
  <br>
  <%-- ②<html:text>タグの使用 --%>
  <html:text property="idCode" />
  <br><br>
  スポーツ
  <br>
  <%-- ③<html:multibox>タグの使用 --%>
  <html:multibox property="hobby" value="baseball"/>野球
  <html:multibox property="hobby" value="soccer"/>サッカー
  <html:multibox property="hobby" value="tennis"/>テニス
  <html:multibox property="hobby" value="golf"/>ゴルフ
  <br>
  <html:multibox property="hobby" value="pingpong"/>卓球
  <html:multibox property="hobby" value="basket"/>バスケット
  <html:multibox property="hobby" value="volley"/>バレー
  <html:multibox property="hobby" value="rugby"/>ラグビー
  <br><br>
  <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>

①.taglibディレクティブで使用するタグライブラリを指定します。
②.<html:text>タグを使用します。HTMLの<input type="text">とほぼ同様の動作をし、プロパティidCodeの値を入力します。
③.<html:multibox>タグを使用します。HTMLの<input type="checkbox">とほぼ同様の動作をします。

【exLogic2.jsp】logicタグライブラリを使用し、前ページで入力された値の条件分岐、繰返し処理を行うプログラムです。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- ①タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<html:html>
<head><title>logicタグライブラリ</title></head>
<body>

logicタグライブラリ サンプル1
<br><br>
実行結果
<br><br>
<%-- ②<logic:present>タグの使用 --%>
<logic:present name="LogicRegistrationForm" 
               property="idCode" scope="request">
  ・プロパティidCodeは存在しています。<br>
</logic:present>

<%-- ③<logic:notEmpty>タグの使用 --%>
<logic:notEmpty name="LogicRegistrationForm" 
                property="idCode" scope="request">
  ・プロパティidCodeは入力済みです。<br>
</logic:notEmpty>

<%-- ④<logic:equal>タグの使用 --%>
<logic:equal name="LogicRegistrationForm" property="idCode" 
             scope="request" value="Java">
  ・idCodeはJavaです。<br>
</logic:equal>
<br>
スポーツ
<br>
<%-- ⑤<logic:iterate>タグの使用 --%>
<logic:iterate id="element" name="LogicRegistrationForm"
               property="hobby" scope="request">
  ・<bean:write name="element"/><br>
</logic:iterate>

</body>
</html:html>

①.taglibディレクティブで使用するタグライブラリを指定します。
②.<logic:present>タグを使用します。属性で指定したプロパティ名、Cookie名、ヘッダ名、変数名が存在する場合、タグ内の処理を実行します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。
③.<logic:notEmpty>タグを使用します。属性で指定したプロパティ名、変数名の値がNullでない場合、タグ内の処理を実行します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。
④.<logic:notEmpty>タグを使用します。属性で指定したプロパティ名、Cookie名、ヘッダ名、変数名の値が特定のキーワードと同じ場合、タグ内の処理を実行します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。 value属性に比較する特定のキーワードを指定します。
⑤.<logic:iterate>タグを使用します。配列、コレクションの要素を順に繰返し処理を行います。id属性に、各要素が代入される変数を指定します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。
<bean:write>を使用してid属性で指定された変数の値を表示しています。

【LogicRegistrationForm.java】exLogic.jspで入力した値を保存、取得するメソッドを提供するアクション・フォームBeanを作成します。
package struts;

import org.apache.struts.action.*;

//①LogicRegistrationFormクラスの宣言
public final class LogicRegistrationForm extends ActionForm {

  //②プロパティ値を保持する変数の宣言
  private String idCode;
  private String[] hobby;

  //③プロパティ値のアクセスメソッドの宣言
  public void setIdCode(String idCode) {this.idCode = idCode;}
  public String getIdCode() {return idCode;}
  public void setHobby(String[] hobby) {this.hobby = hobby;}
  public String[] getHobby() {return hobby;}

}

①.ActionFormクラスをスーパークラスとして、LogicRegistrationFormクラスを宣言します。
②.exLogic.jspで入力した値を保存する変数を宣言します。
③.プロパティ値のアクセスメソッドを宣言します。setXxxメソッドでプロパティ値を保存します。getXxxメソッドでメソッドが呼ばれたとき、プロパティ値を返します。

【LogicRegistrationAction.java】今回のアクション・クラスでは特に何の処理も行わず、exLogic2.jspを呼び出します。
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

//①LogicRegistrationActionクラスの宣言
public final class LogicRegistrationAction extends Action {
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    //②exLogic2.jspの呼び出し
    return (mapping.findForward("success")); 
  }
}

①.Actionクラスをスーパークラスとして、LogicRegistrationActionクラスを宣言します。
②.findForwardメソッドを使用して、exLogic2.jspを呼び出します。"success"とexLogic2.jspのマッピングはstruts-config.xmlに定義します。

【struts-config.xml】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <!-- ①アクション・フォームBeanの指定 -->
  <form-beans>
    <form-bean
     name="LogicRegistrationForm"
     type="struts.LogicRegistrationForm"/>
  </form-beans>

  <!-- ②アクション・クラスの振る舞いを指定 -->
  <action-mappings>
    <action path="/LogicRegistration"
     type="struts.LogicRegistrationAction"
     name="LogicRegistrationForm"
     scope="request">
      <!-- ③アクション・クラス実行後の遷移先を指定 -->
      <forward name="success" path="/exLogic2.jsp"/>
    </action>
  </action-mappings>

</struts-config>

①.<form-beans>タグでアクション・フォームBeanを指定します。
②.<action-mappings>タグでアクション・クラス、関連するアクション・フォームBeanを指定します。
③.<forward>タグでアクション・クラス実行後に返された値"success"に合致する遷移先(exLogic2.jsp)を指定します。


【実行結果】Strutsの実行方法に関してはJavaの道:Struts(基本操作)を参照してください。

Javaの道_Struts_6_実行結果

Javaの道_Struts_6_実行結果2

logicタグライブラリ一覧

logicタグライブラリで定義されているタグの一覧です。詳細な使用方法に関しては、以下のJakarta Projectのドキュメントをご参照ください。

Strutsドキュメント(logicタグライブラリ):http://struts.apache.org/userGuide/struts-logic.html

タグ
内容
empty
指定したBeanのプロパティ、変数がNullかどうかを判別します。
notEmpty
指定したBeanのプロパティ、変数がNullでないかを判別します。
equal
指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値と同一かどうかを判別します。
notEqual
指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値と異なっているかどうかを判別します。
forward
struts-config.xmlの<global-forwards>エレメントに指定したページへフォワードを行います。
redirect
指定したページにリダイレクトを行います。
greaterEqual
指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値以上かどうかを判別します。
greaterThan
指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値より大きいかどうかを判別します。
lessEqual
指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値以下かどうかを判別します。
lessThan
指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値より小さいかどうかを判別します。
iterate
配列、コレクションの各要素の繰返し処理を行います。
match
指定したBeanのプロパティ、変数、ヘッダ、Cookieの値に指定した特定の値が含まれているかどうかを判別します。
notMatch
指定したBeanのプロパティ、変数、ヘッダ、Cookieの値に指定した特定の値が含まれていないかどうかを判別します。
messagesPresent
requestスコープ内に指定したActionErrorsオブジェクト、ActionMessagesオブジェクト、Stringオブジェクト、String配列が存在するかどうかを判別します。
messagesNotPresent
requestスコープ内に指定したActionErrorsオブジェクト、ActionMessagesオブジェクト、Stringオブジェクト、String配列が存在しないかを判別します。
present
指定したBeanのプロパティ名、変数名、ヘッダ名、Cookie名が存在するかどうかを判別します。
notPresent
指定したBeanのプロパティ名、変数名、ヘッダ名、Cookie名が存在しないかを判別します。

- 作者: 气度侠 2006年03月5日, 星期日 13:33  回复(0) |  引用(0) 加入博采

beanタグライブラリ

ここでは、Strutsで用意されているカスタムタグライブラリのうち、beanタグライブラリについて解説します。beanタグライブラリにはBeanのプロパティ、変数、cookie、ヘッダ情報、パラメータ情報などを取得するタグ、取得した情報を表示するタグなどが定義されています。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

使用例

ヘッダ情報、パラメータ情報を取得し、表示するプログラムを作成します。

【作成ファイル一覧】
ファイル名
内容
exBean.jsp
ヘッダ情報、パラメータ情報を取得する処理をbeanタグライブラリで作成します。
exBean2.jsp
アクション・フォームBeanに保存されたヘッダ情報、パラメータ情報を取得し、表示する処理をbeanタグライブラリで作成します。
BeanRegistrationForm.java
入力された値を保持するアクション・フォームBeanです。
BeanRegistrationAction.java
アクション・クラスです。遷移先のファイルとして、exBean2.jspを指定します。
application.properties
<bean:message>タグで表示するメッセージが記載されたメッセージ・リソースファイルです。
struts-config.xml
Strutsプログラムの定義ファイルです。

【exBean.jsp】beanタグライブラリを使用して、ヘッダ情報、パラメータ情報を取得し、表示するプログラムです。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- ①タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>beanタグライブラリ</title></head>
<body>
<%-- ②<bean:header>タグの使用 --%>
<bean:header id="param1" name="user-agent" value="no-header" />
<%-- ③<bean:parameter>タグの使用 --%>
<bean:parameter id="param2" name="name" value="no-name" />
beanタグライブラリ サンプル1
<html:form action="/BeanRegistration">

<%-- ④ヘッダ情報、パラメータ情報の表示 --%>
<%= param1 %>
<br><br>
<%= param2 %>
<br><br>
<%-- ⑤取得情報の送信 --%>
<html:hidden property="ua" value="<%= param1 %>" />
<html:hidden property="name" value="<%= param2 %>" />
<html:submit property="submit" value="送信"/>

</html:form>

</body>
</html:html>

①.taglibディレクティブで使用するタグライブラリを指定します。
②.<bean:header>タグを使用します。HTTPヘッダの情報を取得します。id属性に取得した値を代入する変数を指定します。name属性に取得するヘッダ名を指定します。value属性には、指定したヘッダ情報がない場合に取得される値を指定します。ヘッダ情報がなくvalue属性が指定されていない場合には例外が生成されます。
③.<bean:parameter>タグを使用します。リクエストパラメータの値を取得します。id属性に取得した値を代入する変数を指定します。name属性に取得するパラメータ名を指定します。value属性には、指定したパラメータ情報がない場合に取得される値を指定します。パラメータ情報がなくvalue属性が指定されていない場合には例外が生成されます。
④.変数param1、param2に代入されている値を表示します。
⑤.<html:form>タグ、<html:hidden>タグなどを使用し、取得した値をアクション・フォームBeanに送信します。

【exBean2.jsp】beanタグライブラリを使用し、アクション・フォームBeanに保存された情報を取得し、表示するプログラムです。また、メッセージ・リソースファイルから情報を取得し、表示を行います。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- ①タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>beanタグライブラリ</title></head>
<body>

beanタグライブラリ サンプル1
<br><br>
<%-- ②<bean:message>タグの使用 --%>
<bean:message key="title.msg" arg0="bean" />
<br><br>
<%-- ③<bean:write>タグの使用 --%>
<bean:write name="BeanRegistrationForm" property="ua" 
            scope="request" ignore="true" />
<bean:write name="BeanRegistrationForm" property="name" 
            scope="request" ignore="true" />

</body>
</html:html>

①.taglibディレクティブで使用するタグライブラリを指定します。
②.<bean:message>タグを使用します。メッセージ・リソースファイル内のメッセージを表示します。key属性には、メッセージ・リソースファイル内の表示したいメッセージのkeyを指定します。arg0属性にはメッセージに代入したい値を指定します。arg属性はarg0~arg4まで最大5つ指定できます。メッセージ・リソースファイル内では代入したい箇所を{0}~{4}で指定します。
③.<bean:write>タグを使用します。<bean:write>タグは指定した条件に合致する値を表示します。name属性でアクションフォーム・Beanを指定します。property属性でアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性でプロパティ値のスコープを指定します。ignore属性をtrueにすると、プロパティ値が存在しない場合、<bean:write>タグは何の動作も行いません。

【BeanRegistrationForm.java】exBean.jspで取得した値を保存し、値を取得するメソッドを提供するアクション・フォームBeanを作成します。
package struts;

import org.apache.struts.action.*;

//①BeanRegistrationFormクラスの宣言
public final class BeanRegistrationForm extends ActionForm {
  //②プロパティ値を保持する変数の宣言
  private String ua;
  private String name;

  //③プロパティ値のアクセスメソッドの宣言
  public void setUa(String ua) {this.ua = ua;}
  public String getUa() {return ua;}
  public void setName(String name) {this.name = name;}
  public String getName() {return name;}

}

①.ActionFormクラスをスーパークラスとして、BeanRegistrationFormクラスを宣言します。
②.exBean.jspで取得した値を保存する変数を宣言します。
③.プロパティ値のアクセスメソッドを宣言します。setXxxメソッドでプロパティ値を保存します。getXxxメソッドでメソッドが呼ばれたとき、プロパティ値を返します。

【BeanRegistrationAction.java】今回のアクション・クラスでは特に何の処理も行わず、exBean2.jspを呼び出します。
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

//①BeanRegistrationActionクラスの宣言
public final class BeanRegistrationAction extends Action {
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    //②exBean2.jspの呼び出し
    return (mapping.findForward("success")); 
  }
}

①.Actionクラスをスーパークラスとして、BeanRegistrationActionクラスを宣言します。
②.findForwardメソッドを使用して、exBean2.jspを呼び出します。"success"とexBean2.jspのマッピングはstruts-config.xmlに定義します。

【application.properties<bean:message>タグで表示するメッセージ・リソースファイルのメッセージを記載します。メッセージは日本語(タグライブラリ実行結果)を表示させるために、native2asciiコマンドで日本語をASCIIコードに変換しています。{0}には、<bean:messages>タグのarg0属性で指定された値が入ります。
title.msg={0}\u30bf\u30b0\u30e9\u30a4(本来は改行無し)
\u30d6\u30e9\u30ea\u5b9f\u884c\u7d50\u679c

【struts-config.xml】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <!-- ①アクション・フォームBeanの指定 -->
  <form-beans>
    <form-bean
     name="BeanRegistrationForm"
     type="struts.BeanRegistrationForm"/>
  </form-beans>

  <!-- ②アクション・クラスの振る舞いを指定 -->
  <action-mappings>
    <action path="/BeanRegistration"
     type="struts.BeanRegistrationAction"
     name="BeanRegistrationForm"
     scope="request">
      <!-- ③アクション・クラス実行後の遷移先を指定 -->
      <forward name="success" path="/exBean2.jsp"/>
    </action>
  </action-mappings>

  <!-- ④メッセージ・リソースファイルを指定 -->
  <message-resources parameter="resources.application"/>

</struts-config>

①.<form-beans>タグでアクション・フォームBeanを指定します。
②.<action-mappings>タグでアクション・クラス、関連するアクション・フォームBeanを指定します。
③.<forward>タグでアクション・クラス実行後に返された値"success"に合致する遷移先(exBean2.jsp)を指定します。
④.<message-resources>タグでメッセージ・リソースファイルの設置場所を指定します。メッセージ・リソースファイルの拡張子は記述しません。


【実行結果】Strutsの実行方法に関してはJavaの道:Struts(基本操作)を参照してください。以下のURLでアクセスするとuser-agentヘッダ情報と、パラメータnameの値aiueoが取得されているのが確認できます。

URL:http://localhost:8080/SExam/exBean.jsp?name=aiueo

Javaの道_Struts実行結果

Javaの道_Struts実行結果2

beanタグライブラリ一覧

beanタグライブラリで定義されているタグの一覧です。詳細な使用方法に関しては、以下のJakarta Projectのドキュメントをご参照ください。

Strutsドキュメント(beanタグライブラリ):http://struts.apache.org/userGuide/struts-bean.html

タグ
内容
cookie
cookieの値を取得します。
define
指定されたBeanプロパティ、変数の値を取得します。
header
HTTPヘッダの値を取得します。
include
属性に指定したファイル(HTML、Servlet、JSPなど)の実行結果を取得します。
message
メッセージ・リソースファイル内のメッセージを取得し、表示します。
page
属性に指定したJSPの暗黙オブジェクトを取得します。暗黙オブジェクトはresponse、request、session、application、configのいずれかを指定できます。
parameter
リクエストパラメータの値を取得します。
resource
Webアプリケーション内のファイルの内容を取得します。ファイル名は/から指定する必要があります。
size
配列、コレクションの要素数を取得します。
struts
Struts内の設定オブジェクトを取得します。ActionFormBean、ActionForward、ActionMappingのオブジェクトを指定できます。
write
指定したBeanプロパティ、変数の値を取得し、表示します。

- 作者: 气度侠 2006年03月5日, 星期日 13:31  回复(0) |  引用(0) 加入博采

Struts(htmlタグライブラリ)

ここでは、Strutsで用意されているカスタムタグライブラリのうち、htmlタグライブラリについて解説します。htmlタグライブラリは<form>、<input>などHTMLタグと同様の動作をするタグを提供します。HTMLタグでも記述できますが、Strutsを使用する場合はなるべくカスタムタグライブラリを使うことが推奨されています。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

使用例

前ページで入力された値を次ページで表示するプログラムを作成します。値を入力するフォーム画面をhtmlタグライブラリを使用して作成します。

【作成ファイル一覧】
ファイル名
内容
exHtml.jsp
値を入力するフォームをhtmlタグライブラリで作成します。
exHtml2.jsp
exHtml.jspで入力された値を表示します。
RegistrationForm.java
入力された値を保持するアクション・フォームBeanです。
RegistrationAction.java
アクション・クラスです。遷移先のファイルとして、exHtml2.jspを指定します。
struts-config.xml
Strutsプログラムの定義ファイルです。

【exHtml.jsp】htmlタグライブラリを使用して、値を入力するフォームを作成します。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- ①htmlタグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %> <html:html> <head><title>htmlタグライブラリ</title></head> <body> htmlタグライブラリ サンプル1 <%-- ②<html:form>タグの使用 --%>
<html:form action="/registration" focus="name"> <%-- ③<html:text>タグの使用 --%>
<html:text property="name" size="16"/> <br><br> <%-- ④<html:radio>タグの使用 --%> <html:radio property="address" value="tokyo"/>東京 <html:radio property="address" value="saitama"/>埼玉 <html:radio property="address" value="chiba"/>千葉 <html:radio property="address" value="kanagawa"/>神奈川 <br><br> <%-- ⑤<html:multibox>タグの使用 --%> <html:multibox property="hobby" value="shop"/>買物 <html:multibox property="hobby" value="car"/>車 <html:multibox property="hobby" value="travel"/>旅行 <html:multibox property="hobby" value="sports"/>スポーツ <br><br> <%-- ⑥<html:select>タグ、<html:option>タグの使用 --%> <html:select property="age"> <html:option value="10">0~10</html:option> <html:option value="20">11~20</html:option> <html:option value="30">21~30</html:option> <html:option value="40">31~40</html:option> </html:select> <br><br> <%-- ⑦<html:textarea>タグの使用 --%> <html:textarea property="other" rows="10" cols="50"/> <%-- ⑧<html:hidden>タグの使用 --%> <html:hidden property="id" value="12345" /> <br><br> <%-- ⑨<html:submit>タグの使用 --%> <html:submit property="submit" value="送信"/> <%-- ⑩<html:reset>タグの使用 --%> <html:reset value="リセット"/> </html:form> </body> </html:html>

①.taglibディレクティブでhtmlタグライブラリを指定します。
②.<html:form>タグを使用します。HTMLの<form>タグとほぼ同様の動作をします。action属性にはページの遷移先を指定します。遷移先の実ファイルはstruts-config.xmlで定義されています。focus属性にはページを開いたときに最初に選択可能になるフォーム項目を指定します。
③.<html:text>タグを使用します。HTMLの<input type="text">タグとほぼ同様の動作をします。property属性はアクション・フォームBeanで使用するプロパティ名です。name属性で、該当するアクション・フォームBeanを指定します。省略した場合は、<html:form>タグの遷移先(/registration)に該当するアクション・フォームBeanが適用されます。
④.<html:radio>タグを使用します。HTMLの<input type="radio">タグとほぼ同様の動作をします。value属性はプロパティ名に対するプロパティ値です。
⑤.<html:multibox>タグを使用します。HTMLの<input type="checkbox">タグとほぼ同様の動作をします。
⑥.<html:select>タグ、<html:option>タグを使用します。HTMLの<select>タグ、<option>タグとほぼ同様の動作をします。 <html:select>タグのproperty属性でアクション・フォームBeanのプロパティ名を指定し、<html:option>タグのvalue属性で選択された項目のプロパティ値を指定します。
⑦.<html:textarea>タグを使用します。HTMLの<textarea>タグとほぼ同様の動作をします。
⑧.<html:hidden>タグを使用します。HTMLの<input type="hidden">タグとほぼ同様の動作をします。
⑨.<html:submit>タグを使用します。HTMLの<input type="submit">タグとほぼ同様の動作をします。
⑩.<html:reset>タグを使用します。HTMLの<input type="reset">タグとほぼ同様の動作をします。

【exHtml2.jsp】exHtml.jspで入力した値を表示するプログラムです。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- ①タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<html:html>
<head><title>htmlタグライブラリ2</title></head>
<body>

htmlタグライブラリ サンプル1
<br><br>
実行結果
<%-- ②<bean:write>タグの使用 --%>
<bean:write name="RegistrationForm" property="name"
            scope="request" ignore="true" />
<bean:write name="RegistrationForm" property="address"
            scope="request" ignore="true" />
<logic:iterate id="element" name="RegistrationForm"
               property="hobby" scope="request">
  <bean:write name="element"/>
</logic:iterate>
<bean:write name="RegistrationForm" property="age"
            scope="request" ignore="true" />
<bean:write name="RegistrationForm" property="other"
            scope="request" ignore="true" />
<bean:write name="RegistrationForm" property="id"
            scope="request" ignore="true" />

</body>
</html:html>

①.taglibディレクティブで使用するタグライブラリを指定します。
②.<bean:write>タグを使用します。<bean:write>タグは指定したプロパティ名に合致するプロパティ値を表示します。name属性でアクションフォーム・Beanを指定します。property属性でアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性でプロパティ値のスコープを指定します。ignore属性をtrueにすると、プロパティ値が存在しない場合、<bean:write>タグは何の動作も行いません。

【RegistrationForm.java】exHtml.jspで入力した値を保存し、値を取得するメソッドを提供するアクション・フォームBeanを作成します。
package struts;

import org.apache.struts.action.*;

//①RegistrationFormクラスの宣言
public final class RegistrationForm extends ActionForm {

  //②プロパティ値を保持する変数の宣言
  private String name;
  private String address;
  private String[] hobby;
  private String age;
  private String other;
  private String id;

  //③プロパティ値のアクセスメソッドの宣言
  public void setName(String name) {this.name = name;}
  public String getName() {return name;}
  public void setAddress(String address) {this.address = address;}
  public String getAddress() {return address;}
  public void setHobby(String[] hobby) {this.hobby = hobby;}
  public String[] getHobby() {return hobby;}
  public void setAge(String age) {this.age = age;}
  public String getAge() {return age;}
  public void setOther(String other) {this.other = other;}
  public String getOther() {return other;}
  public void setId(String id) {this.id = id;}
  public String getId() {return id;}

}

①.ActionFormクラスをスーパークラスとして、RegistrationFormクラスを宣言します。
②.exHtml.jspで入力されたプロパティ値を保存する変数を宣言します。
③.プロパティ値のアクセスメソッドを宣言します。setXxxメソッドでプロパティ値を保存します。getXxxメソッドでメソッドが呼ばれたとき、プロパティ値を返します。

【RegistrationAction.java】今回のアクション・クラスでは特に何の処理も行わず、exHtml2.jspを呼び出します。
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

//①RegistrationActionクラスの宣言
public final class RegistrationAction extends Action {
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    //②exHtml2.jspの呼び出し
    return (mapping.findForward("success")); 
  }
}

①.Actionクラスをスーパークラスとして、RegistrationActionクラスを宣言します。
②.findForwardメソッドを使用して、exHtml2.jspを呼び出します。"success"とexHtml2.jspのマッピングはstruts-config.xmlに定義します。

【struts-config.xml】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <!-- ①アクション・フォームBeanの指定 -->
  <form-beans>
    <form-bean
     name="RegistrationForm"
     type="struts.RegistrationForm"/>
  </form-beans>

  <!-- ②アクション・クラスの振る舞いを指定 -->
  <action-mappings>
    <action path="/registration"
     type="struts.RegistrationAction"
     name="RegistrationForm"
     scope="request">
      <!-- ③アクション・クラス実行後の遷移先を指定 -->
      <forward name="success" path="/exHtml2.jsp"/>
    </action>
  </action-mappings>

</struts-config>

①.<form-beans>タグでアクション・フォームBeanを指定します。
②.<action-mappings>タグでアクション・クラス、関連するアクション・フォームBeanを指定します。
③.<forward>タグでアクション・クラス実行後に返された値"success"に合致する遷移先(exHtml2.jsp)を指定します。


【実行結果】Strutsの実行方法に関してはJavaの道:Struts(基本操作)を参照してください。

Javaの道_Struts実行結果

Javaの道_Struts実行結果2

htmlタグライブラリ一覧

htmlタグライブラリで定義されているタグの一覧です。詳細な使用方法に関しては、以下のJakarta Projectのドキュメントをご参照ください。

Strutsドキュメント(htmlタグライブラリ):http://struts.apache.org/userGuide/struts-html.html

タグ
内容
base
HTMLの<base>タグとほぼ同様の動作をします。ページの基準となるURLを指定します。
button
HTMLの<input type="button">タグとほぼ同様の動作をします。
cancel
HTMLの<input type="cancel">タグとほぼ同様の動作をします。値は送信されますが、validateメソッドなどによる値の検証は行われません。
checkbox
HTMLの<input type="checkbox">タグとほぼ同様の動作をします。multiboxとの違いは、checkboxはチェックのON、OFFを取得する際に適しています。
errors
ActionErrorsオブジェクト、Stringオブジェクト、String配列の内容を表示します。
file
HTMLの<input type="file">タグとほぼ同様の動作をします。
form
HTMLの<form>タグとほぼ同様の動作をします。
frame
HTMLの<frame>タグとほぼ同様の動作をします。
html
HTMLの<html>タグとほぼ同様の動作をします。
image
HTMLの<input type="image">タグとほぼ同様の動作をします。
img
HTMLの<img>タグとほぼ同様の動作をします。
javascript
Validatorによる値の検証で、javascriptを使用する際に使用します。
link
HTMLの<a>タグとほぼ同様の動作をします。
messages
ActionMessagesオブジェクト、ActionErrorsオブジェクト、Stringオブジェクト、String配列の内容を表示します。
multibox
HTMLの<input type="checkbox">タグとほぼ同様の動作をします。checkboxとの違いは、multiboxはチェック項目の値に任意文字列を指定する場合、複数のチェック項目を指定する場合に適しています。
option
HTMLの<option>タグとほぼ同様の動作をします。options、optionsCollectionとの違いは、optionは単一の選択要素を指定する場合に使用します。
options
HTMLの<option>タグとほぼ同様の動作をします。optionとの違いは、optionsは動的に変化する複数の選択要素を指定する場合に使用します。optionsCollectionとの違いは、optionsはBean自体が複数の選択要素を持っている場合に使用します。
optionsCollection
HTMLの<option>タグとほぼ同様の動作をします。optionとの違いは、optionsCollectionは動的に変化する複数の選択要素を指定する場合に使用します。optionsとの違いは、optionsCollectionはBean内のプロパティが複数の選択要素を持っている場合に使用します。
password
HTMLの<input type="password">タグとほぼ同様の動作をします。
radio
HTMLの<input type="radio">タグとほぼ同様の動作をします。
reset
HTMLの<input type="reset">タグとほぼ同様の動作をします。
rewrite
HTMLの<a>タグとほぼ同様の動作をします。linkとの違いは、rewriteはjavascript内でのリンク先を記述する場合に使用します。
select
HTMLの<select>タグとほぼ同様の動作をします。
submit
HTMLの<input type="submit">タグとほぼ同様の動作をします。
text
HTMLの<input type="text">タグとほぼ同様の動作をします。
textarea
HTMLの<textarea>タグとほぼ同様の動作をします。
xhtml
XHTMLとしてHTMLタグを生成するときに使用します。

- 作者: 气度侠 2006年03月5日, 星期日 13:28  回复(0) |  引用(0) 加入博采

Struts(Strutsカスタムタグ)

ここでは、Strutsで用意されているカスタムタグの概要について解説します。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

概要

カスタムタグとは、頻繁に実行されるプログラムコードをタグとして定義し、JSP内でプログラムを簡潔に記述するものです。Strutsでは、以下のカスタムタグが準備されています。

カスタムタグ
内容
htmlタグライブラリ
HTMLタグに加えて、Struts独自の動作を行うタグが定義されています。
beanタグライブラリ
Beanのプロパティ、変数、Cookie、ヘッダなどを取得、表示するタグが定義されています。
logicタグライブラリ
繰返し処理、条件分岐処理などを行うタグが定義されています。
tilesタグライブラリ
画面レイアウトを定義するタグが定義されています。
nestedタグライブラリ
ネストされたプロパティを参照するタグが定義されています。

構成

カスタムタグは以下の2つのファイルで構成されています。

・タグハンドラクラス
カスタムタグの動作を定義しているクラスファイルです。タグハンドラクラスを集めたものをタグライブラリといいます。Strutsでは、上記のhtmlタグライブラリ、beanタグライブラリなどがあり、各ライブラリはstruts.jarファイル内に含まれています。

・tldファイル
カスタムタグの使用方法を定義しているxml形式のファイルです。タグハンドラクラス名、タグ名、タグの属性名などが定義されています。Strutsでは、タグライブラリごとにstruts-html.tld、struts-bean.tldなどが用意されています。

利用方法

カスタムタグは以下の手順で利用します。

1.tldファイルを配置
利用するカスタムタグのtldファイルを配置します。配置は通常、WEB-INFディレクトリ配下に設定します。

2.web.xmlに設定
web.xmlの<taglib>タグに利用するタグライブラリを指定します。<taglib-uri>タグにはJSPからタグライブラリを指定するための論理名を指定します。<taglib-location>タグにはtldファイルが配置されている位置を指定します。

<taglib>
  <taglib-uri>/tags/struts-bean</taglib-uri>
  <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>

3.JSPに設定
JSPファイルのtaglibディレクティブで利用するタグライブラリを指定します。uri属性にweb.xmlの<taglib-uri>タグで指定した論理名を指定します。prefix属性で利用するタグのプレフィックス(<html:xxx>)を指定します。下の例は、htmlタグライブラリを利用して、入力値を送信するフォームを作成しています。

・・・・・・・・・・

<%@ taglib uri="/tags/struts-html" prefix="html" %>

・・・・・・・・・・

<html:form action="/xxx"> <html:text property="name" size="16"/> <html:submit property="submit" value="送信"/> </html:form> ・・・・・・・・・・

- 作者: 气度侠 2006年03月5日, 星期日 13:25  回复(0) |  引用(0) 加入博采

Struts(基本操作)

ここでは、Strutsの基本動作、サンプルプログラムの作成について解説します。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

基本動作

Strutsの主要構成要素として以下の要素があります。

  • アクション・サーブレット
    ブラウザからの要求を振り分ける制御機能を担っています。
  • アクション・コンフィギュレーション・ファイル
    アクション・サーブレットがどこに要求を振り分ければ良いかが記載されている設定ファイルです。
  • アクション・フォームBean
    ブラウザから送信されるデータを格納している領域です。
  • アクション・クラス
    ブラウザからの要求に基づき、処理を実行する機能を担っています。処理内容によってはStruts外のプログラム(JavaBeans、EJBなど)を呼び出します。
  • JSP
    ブラウザに実行結果を表示する機能を担っています。

    Javaの道_Struts_基本

    ①.ブラウザからの要求は、まずアクション・サーブレットで受信されます。
    ②.アクション・サーブレットはブラウザから送られたデータを該当するアクション・フォームBeanに格納します。
    ③.アクション・サーブレットは該当するアクション・クラスを呼び出します。
    ④.アクション・クラスは必要に応じてアクション・フォームBeanからデータを参照します。
    ⑤.アクション・クラスは実行結果をアクション・サーブレットに返します。
    ⑥.アクション・サーブレットは実行結果に応じ該当するJSPファイルを呼び出します。
    ⑦.JSPファイルが実行され、ブラウザに実行結果が返されます。
    ※1 アクション・サーブレットは適宜、アクション・コンフィギュレーション・ファイルを閲覧し、処理の振り先(どのアクション・フォームBean、どのアクションクラスに振り分けるかなど)を決定します。
    ※2 アクション・クラスは処理内容によっては、Struts外のプログラム(JavaBeans、EJBなど)を呼び出し、実行します。

サンプルプログラム

Strutsを使用したサンプルプログラムを作成します。サンプルプログラムはログイン画面を表示し、OKであればウェルカム画面を、NGであればエラーメッセージを表示するものです。サンプルプログラムは以下の手順で作成していきます。

  1. ブラウザに表示されるJSPファイルの作成。
  2. 入力されたID・パスワードを保持するアクション・フォームBeanの作成。
  3. ID・パスワードの認証処理を行うアクション・クラスの作成。
  4. Struts処理の振り先を決めるアクション・コンフィギュレーション・ファイルの作成。
  5. ファイルの配置。
  6. Tomcatの設定。

    ※アクション・サーブレットはStrutsであらかじめ用意されているものを使用します。

1.JSPファイルの作成

作成するJSPファイルはログイン画面(login.jsp)とウェルカム画面(welcome.jsp)の2つです。JSPファイルでは可読性を考慮し、Javaコードをじかに書くのではなく、可能な限りタグライブラリを使用します。

【login.jsp】
<%-- ① --%>
<%@ page contentType="text/html; charset=Shift_JIS"
         import="struts.*" %>
<%-- ② --%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<html>
<head><title>login画面</title></head>
<body>

<html:errors/>  <%-- ③ --%>

ID・パスワードを入力してください。
<html:form action="/authentication" focus="id">  <%-- ④ --%>
  <html:text property="id" size="16"/>  <%-- ⑤ --%>
  <br>
  <%-- ⑥ --%>
<html:password property="pass" size="16" redisplay="false"/> <br> <html:submit property="submit" value="送信"/> <html:reset value="リセット"/> </html:form> </body> </html>

①.pageディレクティブを使用し、JSPファイルの属性を指定します。
②.taglibディレクティブを使用し、JSPファイルで使用するタグライブラリを指定します。ここでは、Strutsであらかじめ用意されているStrutsタグライブラリのうち、struts-html.tldの使用を指定します。prefix属性により、struts-html.tldを使用する場合は、タグにhtmlを指定します。
③.<html:error/>タグはエラーが生成されている場合は、エラーメッセージを表示し、 エラーが生成されていない場合は、何も表示しないタグです。
④.<html:form>タグはHTMLの<form>タグとほぼ同様の振舞いをするタグです。action属性はsubmitボタンが押された時の遷移先を指定します。focus属性はこのJSPファイルが開かれた時にどのフォーム項目を初めに選択可能にするかを指定します。
⑤.<html:text>タグはHTMLの<input type=text>タグとほぼ同様の振舞いをするタグです。property属性はHTMLのname属性、size属性はHTMLのsize属性と同様の働きをします。
⑥.<html:pasword>タグはHTMLの<input type=password>タグとほぼ同様の振舞いをするタグです。redisplay属性は直前に入力した値を再表示するかどうかを指定します。 falseに設定した場合は再設定を行いません。

【welcome.jsp】
<%@ page contentType="text/html; charset=Shift_JIS"
         import="struts.*" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<logic:notPresent name="id" scope="session">  <%-- ① --%>
  <logic:redirect forward="fail"/>
</logic:notPresent>

<html>
<head><title>welcom画面</title></head>
<body>

ようこそ
<bean:write name="id" scope="session"/>  <%-- ② --%>
さん

</body>
</html>  

①.logicタグライブラリの<logic:notPresent>タグはname属性で指定したオブジェクトが生成されていない場合、<logic:redirect>タグで指定されたページへ遷移する処理を行います。 <logic:redirect>タグのforward属性で指定されたキーワードに合致する遷移先のページがアクション・コンフィギュレーション・ファイルに指定されます。 struts-config.xmlファイルので説明している個所です。
②.beanタグライブラリの<bean:write>タグはname属性で指定されたオブジェクトが生成されている場合、その値を表示します。ここでは、login.jspファイルので説明したフォームに入力された値が表示されます。

2.アクション・フォームBeanの作成

アクション・フォームBeanとしてAuthenticationForm.javaを作成します。login.jspで入力された値を保持するプログラムです。

【AuthenticationForm.java】
package struts;

import org.apache.struts.action.*;

public final class AuthenticationForm extends ActionForm {    //①

  //②値を保持する変数の宣言
  private String id;
  private String pass;

  //③値を操作するアクセスメソッドの宣言
  public void setId(String id) {this.id = id;}
  public String getId() {return id;}
  public void setPass(String pass) {this.pass = pass;}
  public String getPass() {return pass;}

}

①.ActionFormクラスをスーパークラスとして、AuthenticationFormクラスを宣言します。
②.login.jspから送信される値を保持する変数を宣言します。
③.値を操作するアクセスメソッドを宣言します。値を入力するアクセスメソッドはset+変数名(最初は大文字)、値を取り出すアクセスメソッドはget+変数名(最初は大文字)で宣言します。login.jspの<html:form>タグ内のproperty属性の値、AuthenticationFormクラスの変数名、アクセスメソッド名は統一する必要があります。

3.アクション・クラスの作成

アクション・クラスとしてAuthenticationAction.javaを作成します。login.jspで入力されたID・パスワードが正しいものか判別する処理を記載します。正しくない場合はエラーを生成します。生成されたエラーはlogin.jspファイルので説明した<html:errors/>タグに表示されます。エラーの表示に使用されるエラーメッセージをapplication.propertiesファイル(メッセージ・リソース・ファイル)に設定します。

【AuthenticationAction.java】
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

public final class AuthenticationAction extends Action {  //①
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    HttpSession session = req.getSession();  //②
    ActionMessages errors = new ActionMessages();  //③

    //④アクション・フォームBeanから値の取り出し
    AuthenticationForm authenticationForm 
    = (AuthenticationForm)form;
    String id = authenticationForm.getId();
    String pass = authenticationForm.getPass();


    if(!(id.equals("java") && pass.equals("road"))) { //⑤
      errors.add(ActionMessages.GLOBAL_MESSAGE, 
                 new ActionMessage("errors.login")); //⑥エラー生成
      saveErrors(req, errors); //⑦
      return (mapping.findForward("fail")); //⑧遷移先の指定
    } else {
      session.setAttribute("id", id); //⑨
      return (mapping.findForward("success"));  //⑩遷移先の指定
    }
  }
}

①.Actionクラスをスーパークラスに指定して、AuthenticationActionクラスを宣言します。
②.getSessionメソッドを使用し、HttpSessionオブジェクトを取得します。
③.ActionMessagesオブジェクトのerrosを生成します。
④.アクション・フォームBeanからID・パスワード情報を取り出し、それぞれ変数id・passに格納しています
⑤.if文により、IDがjava、パスワードがroadの場合は正常処理を行い、そうでない場合はエラー処理を行います。
⑥.addメソッドにより、エラーを生成します。第一引数にはエラーを識別する任意の文字列を、第二引数にActionMessageオブジェクトを指定します。ActionMessageクラスのコンストラクタに指定された"errors.login"は、 application.propertiesファイルに指定されるエラーメッセージを参照します。
⑦.saveErrorsメソッドを使用し、エラーメッセージを保存します。
⑧.エラー処理の場合の遷移先をreturnメソッドで指定します。 "fail"にマッピングした遷移先がアクション・コンフィギュレーション・ファイルに指定されています。
⑨.正常処理の場合、setAttributeメソッドを使用し正常処理されたID情報を保存します。welcome.jspファイルのの個所に値が表示されます。
⑩.正常処理の場合の遷移先をreturnメソッドで指定します。 "success"にマッピングした遷移先がアクション・コンフィギュレーション・ファイルに指定されています。

【application.properties】
# AuthenticationAction.javaの⑥で生成されるエラーの
# エラーメッセージを指定します。
errors.login=<font color="red">id password is invalid.</font><br>

4.アクション・コンフィギュレーション・ファイルの作成

アクション・コンフィギュレーション・ファイル(struts-config.xml)を作成します。login.jspファイルからの遷移情報、AuthenticationAction.javaファイルからの遷移情報など、Struts処理に関わる制御情報を指定します。

struts-config.xml
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <!-- ①アクション・フォームBeanの指定 -->
  <form-beans>
    <form-bean
     name="AuthenticationForm"
     type="struts.AuthenticationForm"/>
  </form-beans>

  <!-- ②JSPからの遷移先指定 -->
  <global-forwards>
    <forward name="fail" path="/login.jsp"/>
  </global-forwards>

  <!-- ③アクション・クラスの振る舞いを指定 -->
  <action-mappings>
    <action path="/authentication"
     type="struts.AuthenticationAction"
     name="AuthenticationForm"
     scope="session">
      <forward name="success" path="/welcome.jsp"/>
      <forward name="fail" path="/login.jsp"/>
    </action>
  </action-mappings>

  <!-- ④メッセージ・リソース・ファイルの指定 -->
  <message-resources parameter="resources.application"/>

</struts-config>  

①.アクション・コンフィギュレーション・ファイル内で使用されるアクション・フォームBeanの名前を指定します。name属性に使用される名前を、type属性にアクション・フォームBeanのクラス名を指定します。
②.JSPファイルから呼び出される、遷移先を指定します。name属性で指定される"fail"がJSPファイルから呼び出された場合、login.jspファイルに遷移します。welcome.jspファイルので"fail"を呼び出しています。
③.アクション・クラスが使用するアクション・フォームBeanの指定、アクション・クラスからの遷移先を指定します。
<action>タグのpath属性には各ファイルから呼び出される際のアクション・クラスの名前を指定します。login.jspファイルのでアクション・クラスauthenticationを呼び出しています。type属性にはアクション・クラスのクラス名を、name属性には関連するアクション・フォームBeanを指定します。ここでは、で指定したAuthenticationFormを指定しています。
<forward>タグでは、アクション・クラスから呼び出されるページの遷移先を指定します。name属性で指定された"success"がアクション・クラスから呼び出された場合welcome.jspファイルに遷移します。 AuthenticationAction.javaファイルので"success"を呼び出しています。"fail"はAuthenticationAction.javaファイルので呼び出されています。
④.
メッセージ・リソース・ファイル(application.properties)の配置先を指定しています。ディレクトリ情報を.(ピリオド)で指定します。拡張子のpropertiesは指定する必要はありません。

5.ファイルの配置

サーブレット/JSPコンテナで動作させるために作成したプログラムファイル、Strutsに必要なファイルを配置していきます。

1.コンテキストのルートディレクトリ作成
1-1.今回はサーブレット/JSPコンテナにTomcatを使用します。コンテキストのルートディレクトリSExamを、$CATALINA_HOME\webapps配下に作成します。$CATALINA_HOMEはTomcatのインストールディレクトリを表します。

2.Struts構成ファイルの設置
2-1.Strutsのダウンロードファイルに含まれるstruts-blank.warファイルをjarコマンドで解凍します。

E:\jakarta-struts-1.1\jakarta-struts-1.1\webapps>jar xvf struts-blank.war

2-2.解凍してできたWEB-INFディレクトリをコンテキストのルートディレクトリSExam配下に設置します。

3.プログラムファイルのコンパイル
3-1.作成したプログラムの内、AuthenticationForm.java、AuthenticationAction.javaをコンパイルします。コンパイルする際、CLASSPATHにservlet-api.jar、struts.jar、カレントディレクトリを設定します。servlet.jarはTomcatインストールディレクトリ配下に、struts.jarはstruts-blank.warを解凍したWEB-INFディレクトリ配下にあります。

D:\JAVA>javac -classpath "C:\java\Tomcat 5.0\common\lib\servlet-api.jar";"C:\java\Tomcat 5.0\webapps\SExam\WEB-INF\lib\struts.jar";. *.java

D:\JAVA>

4.作成したプログラムファイルの設置
4-1.以下の配置図に従い、今回作成したプログラムファイルなどを設置します。struts-blank.warのWEB-INFに含まれていたjarファイル、tldファイルなどはそのまま配置しておきます。
Javaの道_Struts_配置

6.Tomcatの設定

Tomcat上でプログラムを動作させるためにTomcatの設定ファイルweb.xml、コンテキスト.xmlを設定します。web.xml、コンテキスト.xmlの詳細についてはJavaの道:Tomcat(プログラム配置・実行)を参照してください。

1.web.xmlの設定
web.xmlにはコンテキストにアクセスした際、初めに表示されるファイルを指定します。<welcome-file>~</welcome-file>タグの要素としてlogin.jspを指定します。 web.xmlは$CATALINA_HOME\webapps\SExam\WEB-INFディレクトリ配下にあります。

【web.xml】
<welcome-file-list>
  <welcome-file>login.jsp</welcome-file>
</welcome-file-list> 

2.コンテキスト.xmlの設定
コンテキスト.xmlはコンテキストの設定を行うファイルです。ファイル名はコンテキスト名.xml(ここでは、SExam.xml)になります。<Context>タグのdocBase属性は$CATALINA_HOME\webapps\SExamの値です。$CATALINA_HOMEを実行環境に沿った値に置き換えて設定してください。SExam.xmlはデフォルトの設定では$CATALINA_HOME\conf\Catalina\localhostディレクトリ配下に設置します。

【SExam.xml】
<Context path="/SExam"
         docBase="docBase="C:\java\Tomcat 5.0\webapps\SExam"
         reloadable="false"/>

動作確認

Tomcatを起動させhttp://localhost:8080/SExamにアクセスします。以下のような画面が表示されれば、プログラムが正常に動作しています。ID「java」、パスワード「road」を入力し、正しくログイン処理が行われること、誤ったID・パスワードを入力しエラー処理が行われることなどを確認してください。
Javaの道_Struts_2_3

- 作者: 气度侠 2006年03月5日, 星期日 13:24  回复(0) |  引用(0) 加入博采

Struts(インストール)

ここでは、Strutsの概要、インストール方法について解説します。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4

概要

Struts(ストラッツ)とはWebアプリケーション開発のためのフレームワークです。フレームワーク とは頻繁に使用される機能を一まとめにしたソフトウェア基盤のようなものです。基本機能が 基盤にあらかじめ実装されているため、ソフトウェア開発者は独自機能のみを開発し 、基盤に組み込むことでアプリケーションを開発することができます。基本機能があらかじめ、フレームワークに実装されているため、開発期間を短縮することができます。また、洗練されたフレームワークを使用することにより、経験の少ないソフトウェア開発者であっても質の高いアプリケーションを開発することができます。

現在有償、無償を問わず、数多くのフレームワークが発表されています。Strutsは Apacheの開発で有名なApache Software FoundationのJakartaプロジェクトで開発さ れたもので、無償で公開されています。人気が高く、@ITによる第8回 読者調査結果 (http://www.atmarkit.co.jp/fjava/survey/survey0306/java0303.html)によると 、最も利用されているフレームワークとなっています。

インストール

Strutsはフレームワークのため、ソフトウェアのインストールというのとは異なります。Strutsと独自開発のプログラムをTomcatなどサーブレットコンテナに配置(デプロイ)することにより、Strutsは動作します。ここでは、Strutsで提供されているサンプルプログラムを動作させる方法を解説します。

事前設定
Strutsの執筆時点での最新版1.2を動作させるためには、J2SDK1.2以上が必要です。また、Servlet2.2以上、JSP1.1以上をサポートしたサーブレットコンテナが必要です。ここでは、サーブレットコンテナとしてTomcat5.0.18を使用します。J2SDKのインストールの詳細は、「Javaの道:Java 2 SDK実装方法」、Tomcatのインストールの詳細は「Javaの道:Tomcat(インストール(Windows環境))」を参照してください。

1.ダウンロード
Strutsの最新版を以下のURLからダウンロードします。執筆時点の最新版はVersion 1.2です。
http://struts.apache.org/download.cgi

Javaの道_Struts_download

2.Strutsの配置
ダウンロードしたファイルを解凍して、webappsディレクトリ配下にあるstruts-example.warファイルを$CATALINA_HOME\webapps配下に設置します。※$CATALINA_HOMEはTomcatのインストールディクトリを表します。

WARファイルとは、Webアプリケーションで使用されるファイルをコンテキストごと一まとめに圧縮したものです。jarコマンドで作成できます。WARファイルをアプリケーションベースディレクトリ(ここでは$CATALINA_HOME\webapps)に配置すると、自動的にWARファイルが展開されWebアプリケーションの配置(デプロイ)が行われます。

3.動作確認
Tomcatを起動させ、WARファイルの展開を行います。http://localhost:8080/struts-examples/にアクセスし、以下の画面が表示されたらStruts配置の成功です。リンクをたどり、いろいろなサンプルアプリケーションを試してみてください。

Javaの道_Struts_example

Struts 1.2には今回使用したサンプルプログラム以外にもいくつかのWARファイルが提供されています。
WARファイル
内容
struts-blank.war
Strutsベースのアプリケーションを作成する際、元となる手を加えられていないStrutsファイル群です。
struts-documentation.war
Strutsのドキュメント類が収められています。
struts-example.war
Strutsの主要機能を使用したサンプルプログラムが収められています。
struts-mailreader.war
Strutsの機能を駆使したサンプルプログラムが収められています。実行するためにはXML parserが必要です。
tiles-documentation.war
Tiles機能のドキュメント類が収められています。

- 作者: 气度侠 2006年02月26日, 星期日 21:16  回复(0) |  引用(0) 加入博采

Ant(Tomcat向けタスク)

Tomcatでは、Tomcatを操作できるAntタスクが用意されています。ここではそのAntタスクについて解説します。AntタスクはTomcatのWeb Application Managerの機能を通じてTomcatを操作します。Web Application Managerの詳細についてはJavaの道:Tomcat(Web Application Manager)を参照してください。

実行環境
・Windows2000 Professional
・J2SDK 1.4.1_05
・Ant 1.6.1
・Tomcat 5.0.18

事前準備

Tomcat向けAntタスクを使用するために、以下の設定をします。

1.catalina-ant.jarファイルの設置
$CATALINA_HOME\server\libディレクトリ配下にあるcatalina-ant.jarを$ANT_HOME\libディレクトリ配下に設置します。

2.ID、Passwordの設定
Web Application ManagerにログインするためのID、Passwordを設定します。ID、Passwordはmanagerロールに属している必要があります。デフォルトの設定では$CATALINA_HOME\confディレクトリ配下のtomcat-users.xmlに以下の設定をします。

【tomcat-users.xml】
<?xml version='1.0' encoding='utf-8'?>

<tomcat-users>
  <role rolename-"tomat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  ----------------------------------
  ----------------------------------
  <!-- username属性にID、password属性にPasswordを設定する。 -->
  <user username="admin" password="admin" roles="manager"/>
</tomcat-users>

3.<taskdef>タグの設定
Antにあらかじめ用意されていないタスクを使用する場合は、build.xmlに<taskdef>タグで使用するタスクを宣言する必要があります。

【build.xml】
----------------------------------
----------------------------------

<!-- taskdefタグでタスクを宣言する。 -->
<taskdef name="list" 
         classname="org.apache.catalina.ant.ListTask"/>
<taskdef name="install" 
         classname="org.apache.catalina.ant.InstallTask"/>
<taskdef name="remove" 
         classname="org.apache.catalina.ant.RemoveTask"/>
<taskdef name="start" 
         classname="org.apache.catalina.ant.StartTask"/>
<taskdef name="stop" 
         classname="org.apache.catalina.ant.StopTask"/>
<taskdef name="reload" 
         classname="org.apache.catalina.ant.ReloadTask"/>
<taskdef name="deploy" 
         classname="org.apache.catalina.ant.DeployTask"/>
<taskdef name="undeploy" 
         classname="org.apache.catalina.ant.UndeployTask"/>
<taskdef name="resources" 
         classname="org.apache.catalina.ant.ResourcesTask"/>
<taskdef name="roles" 
         classname="org.apache.catalina.ant.RolesTask"/>

----------------------------------
----------------------------------

4.Tomcatの起動
TomcatのWeb Application Manager経由でタスクを実行するため、タスクを実行する際はTomcatを起動しておく必要があります。

タスク一覧

Tomcat向けタスクで使用される属性について解説します。Tomcat向けタスクは以下に解説する属性を元に動作します。

【Tomcat向けタスクで利用する属性】
属性
内容
url
Web Application ManagerのURLを指定します。指定しない場合は、http://localhost:8080/managerが適用されます。
username
Web Application ManagerにログインするためのIDを指定します。IDはmanagerロールに属している必要があります。
password
Web Application ManagerにログインするためのPasswordを指定します。Passwordはmanagerロールに属している必要があります。
config
コンテキスト.xmlへのパスを指定します。デフォルト設定以外の方法でコンテキストをインストールする場合に指定します。
path
操作の対象となるコンテキストへのURLパス名を指定します。パス名は/から始まります。
war

コンテキストの構成要素をwarファイルもしくは、ディレクトリで指定します。指定フォーマットは以下のようになります。

・Tomcatサーバ上のディレクトリを指定する場合
構文:file:/該当ディレクトリへのパス
例:file:/C:\con

・Tomcatサーバ上のWARファイルを指定する場合
構文:file:/該当WARファイルへのパス
例:file:/C:\con.war

・リモート環境からWARファイルを指定する場合
構文:jar:file:/該当WARファイルへのパス!/
例:jar:file:/C:\con.war!/

・リモート環境からWARファイルをHTTP経由で指定する場合
構文:jar:http://hostname:port/該当WARファイルへのパス!/
例:jar:http://www.tomcat.com/con.war!/

以下にTomcat向けタスクについて解説します。

list
実行中のコンテキストの一覧を表示します。一覧は「コンテキスト名:ステータス:セッション数」のフォーマットで表示されます。

(listに設定できる属性)
url, username, password

(listの使用例)
<target name="list">
  <list url="http://localhost:8080/manager"
        username="admin"
        password="admin"/>
</target>

install
指定したコンテキストをTomcatにインストールします。一時的にインストールするだけであり、Tomcatを再起動するとインストールは無効になります。デバッグ作業時に使用します。完全にTomcatにインストールしたい場合はdeployタスクを使用します。

(installに設定できる属性)
url, username, password, config, path, war

(installの使用例)
<target name="install">
  <install url="http://localhost:8080/manager"
           username="admin"
           password="admin"
           path="/test"
           war="file:/C:\java\Tomcat_test"/>
</target>

remove
指定したコンテキストをTomcatからアンインストールします。コンテキストの情報をTomcatのメモリから削除するだけであり、コンテキスト構成ファイル、warファイルの削除は行いません。installタスクと逆の動作をします。コンテキスト構成ファイルの削除、コンテキスト.xmlの変更を行いたい場合はundeployタスクを使用します。

(removeに設定できる属性)
url, username, password, path

(removeの使用例)
<target name="remove">
  <remove url="http://localhost:8080/manager"
          username="admin"
          password="admin"
          path="/test"/>
</target>

start
指定したコンテキストを起動させます。コンテキストはpath属性で指定します。

(startに設定できる属性)
url, username, password, path

(startの使用例)
<target name="start">
  <start url="http://localhost:8080/manager"
         username="admin"
         password="admin"
         path="/test"/>
</target>

stop
指定したコンテキストを停止させます。コンテキストはpath属性で指定します。

(stopに設定できる属性)
url, username, password, path

(stopの使用例)
<target name="stop">
  <stop url="http://localhost:8080/manager"
        username="admin"
        password="admin"
        path="/test"/>
</target>

reload
指定したコンテキストを再起動させます。コンテキストはpath属性で指定します。サーブレットの変更、web.xmlの変更など変更内容を反映させるために再起動が必要な場合に使用します。

(reloadに設定できる属性)
url, username, password, path

(reloadの使用例)
<target name="reload">
  <reload url="http://localhost:8080/manager"
          username="admin"
          password="admin"
          path="/test"/>
</target>

deploy
指定したコンテキストをTomcatにデプロイします。installとの違いはTomcatを再起動した後もコンテキストがデプロイされたまま(コンテキストが利用可能)ということです。deployを実行した後はコンテキスト構成ファイルとwarファイルが$CATALINA_HOME\webappsディレクトリ配下に生成されます。deployタスクを使用する場合、war属性は「file:/該当WARファイルへのパス 」の構文を指定する必要があります。

(deployに設定できる属性)
url, username, password, config, path, war

(deployの使用例)
<target name="deploy">
  <deploy url="http://localhost:8080/manager"
          username="admin"
          password="admin"
          path="/test"
          war="file:/C:\java\test.war"/>
</target>

undeploy
指定したコンテキストをTomcatからアンデプロイします。removeとの違いはコンテキスト構成ファイル、warファイルも削除されることです。deployタスクと逆の動作をします。

(undeployに設定できる属性)
url, username, password, path

(undeployの使用例)
<target name="undeploy">
  <undeploy url="http://localhost:8080/manager"
            username="admin"
            password="admin"
            path="/test"/>
</target>

resources
使用可能なJNDIリソースの一覧を表示します。type属性を指定することにより、表示するJNDIリソースを制限することができます。

(resourcesに設定できる属性)
url, username, password, type

(resourcesの使用例)
<target name="resources">
  <resources url="http://localhost:8080/manager"
             username="admin"
             password="admin"
             type="javax.sql.DataSource"/>
</target>

roles
設定しているセキュリティロールの一覧を表示します。

(rolesに設定できる属性)
url, username, password

(rolesの使用例)
<target name="roles">
  <roles url="http://localhost:8080/manager"
         username="admin"
         password="admin"/>
</target>

- 作者: 气度侠 2006年02月26日, 星期日 21:10  回复(0) |  引用(0) 加入博采

Ant(基本操作)

ここでは、Antの基本操作について解説します。build.xmlの作成方法、antコマンドについて解説します。

実行環境
・Windows2000 Professional
・J2SDK 1.4.1_05
・Ant 1.5.4

build.xml

build.xmlはAntを実行する際に参照されるAntの振る舞いを記載した設定ファイルです。Antはこの設定ファイルに従い、javacの実行、jarファイルの作成などを行います。ここでは、build.xmlの作成方法について解説します。

build.xmlの構成
Javaの道_Ant_2_1

Antはプロジェクトと言う単位でbuild.xmlを管理します。プロパティにより、build.xmlで使用する変数を宣言することができます。ターゲットは一連の処理の一まとまりを言い、タスクはターゲット内の個々の処理を言います。ターゲット同士で依存関係を結ぶこともできます。依存したターゲットは依存されたターゲットが実行されるまで、実行されません。

プロジェクト

プロジェクトはbuild.xmlに1つだけ存在し、build.xmlを管理するものです。

属性
内容
必須
name
プロジェクト名を指定します。
No
default
antコマンドの引数にターゲットが指定されなかった時に実行されるターゲット名を指定します。
Yes
basedir
ビルド処理のベースとなるディレクトリを指定します。指定しない場合は、build.xmlが設置されているディレクトリになります。
No

【例1】exampleプロジェクトを定義した例です。
<project name="example" default="compile" basedir=".">
  --------------------
  <target name="compile">
    --------------------
    --------------------
  </target>
</project> 

プロパティ

プロパティはタスク内で使用できる変数を宣言します。変数値は${name}で参照できます。JavaAPIのシステムプロパティをあらかじめ設定された変数として参照することもできます。詳細はJa-JakartaプロジェクトのAnt日本語マニュアルの「Antの使い方」→「組込みプロパティ」を参照してください。

属性
内容
必須
name
プロパティ名を指定します。
Yes
value
プロパティ名に対する値を指定します。
Yes

【例2】プロパティ名dirAでディレクトリパスを指定した例です。
<property name="dirA" value="D:\Program Files\java" />

ターゲット

ターゲットはビルド処理で行われる一連の一まとまりの処理を管理します。

属性
内容
必須
name
ターゲット名を指定します。
Yes
depends
依存するターゲットのnameを指定します。指定したターゲットが実行されるまで、このターゲットが実行されません。,(カンマ)で複数指定することができます。
No
if
設定されていなければいけないプロパティ名を指定します。設定されていない場合はターゲットは実行されません。
No
unless
設定してはいけないプロパティ名を指定します。設定されている場合はターゲットは実行されません。
No
description
ターゲットの概要を記載します。
No

【例3】
ターゲットcompileでソースファイルをコンパイルし、ターゲットjarでコンパイルされたclassファイルをjarファイルに圧縮する例です。ターゲットjarはターゲットcompileに依存しており、ターゲットcompileが実行されないと実行されることはありません。
<target name="compile">
  <!-- コンパイル処理 -->
</target>

<target name="jar" depends="compile">
  <!-- jar処理 -->
</target>

タスク

タスクはターゲット内の個々の処理を表します。Antでは、非常に多くのタスクが定義されています。ここでは、そのうち主要なものを紹介します。詳細はJa-JakartaプロジェクトのAnt日本語マニュアルの「Antのタスク」を参照してください。

・javacタスク
名前のとおりjavacコマンドと同様の処理を行います。
属性
内容
必須
srcdir
javaソースファイルがあるディレクトリを指定します。
Yes
destdir
コンパイルしたclassファイルを出力するディレクトリを指定します。
No
classpath
classpathを指定します。
No
includes
コンパイルに含めたいファイルを指定します。
No
excludes
コンパイルから除きたいファイルを指定します。
No

・jarタスク
名前のとおり指定したファイルをjarファイルに圧縮する処理を行います。
属性
内容
必須
destfile
圧縮されるjarファイル名を指定します。
Yes
basedir
jarファイルに圧縮したいファイルのルートディレクトリを指定します。
No

・mkdirタスク
ディレクトリを作成する処理を行います。
属性
内容
必須
dir
作成するディレクトリ名を指定します。
Yes

・copyタスク

指定したファイルをコピーする処理を行います。
属性
内容
必須
dir
コピーしたいファイル名を指定します。
Yes
tofile
コピー先のファイル名を指定します。
Yes
(いずれかを指定)
todir
コピー先のディレクトリ名を指定します。

【例4】mkdirタスクを使用した例、javacタスクを使用した例を記載します。
<target name="compile">
  <!-- ディレクトリの作成 -->
  <mkdir dir="D:\classes"/>
  <!-- ソースファイルのコンパイル  -->
  <javac srcdir="D:\sources"
         destdir="D:\classes"
         includes="HelloWorld.java" />

</target>
antコマンド

Antで使用するいくつかの代表的なコマンド例を紹介します。

・ant
ビルド処理を行います。設定ファイルはカレントディレクトリにあるbuild.xmlを使用します。ターゲットはprojectタグのdefault属性で指定されたターゲットを実行します。

・ant ターゲット名
ターゲット名を指定してビルド処理を行います。

・ant -buildfile 設定ファイル
設定ファイル名がbuild.xmlでない場合、カレントディレクトリにbuild.xmlがない場合に、-buildfileオプションで設定ファイルを指定します。

・ant -version
現在使用しているAntのバージョンを表示します。

・ant -help
antコマンドで利用できるオプションを表示します。

使用例

Antの使用例を紹介します。C:\Javaディレクトリで作業をしており、ビルド処理後、コンパイルされたclassファイルをC:\Classesディレクトリへ配置する例です。

Javaの道_Ant_2_2

build.xmlは以下のようになります。
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="example" default="compile" basedir="C:\">

  <!-- propertyタグで変数source、compileを設定 -->
  <property name="source" value="./Java"/>
  <property name="compile" value="./Classes"/>

  <!-- ディレクトリClassesの作成 -->
  <target name="directory">
    <mkdir dir="${compile}"/>
  </target>

  <!-- ディレクトリJava内のソースファイルをコンパイル -->
  <!-- ターゲットdirectoryに依存しているため、
       ターゲットdirectoryを先に実行 -->
  <target name="compile" depends="directory">
    <javac srcdir="${source}"
           destdir="${compile}"
           excludes="build.xml" />
  </target>

</project>

antを実行します。

C:\Java>ant   ←antコマンドの実行
Buildfile: build.xml

directory:
  [mkdir] Created dir: C:\Classes   ←mkdirタスクの実行

compile:
  [javac] Compiling 2 source files to C:\Classes   ←javacタスクの実行

BUILD SUCCESSFUL   ←処理の成功
Total time: 15 seconds
C:\Java>

- 作者: 气度侠 2006年02月26日, 星期日 21:09  回复(0) |  引用(0) 加入博采

Ant(インストール)

ここでは、Antの概要、インストール方法について解説します。

実行環境
・Windows2000 Professional
・J2SDK 1.4.1_05
・Ant 1.5.4

概要

AntはJavaベースのビルドツールです。JavaソースコードをJavaVMが実行できるようにコンパイルすることをビルドと言います。通常Javaプログラムは複数のファイル、複数のクラスライブラリで構成されています。それらをビルドする際、1ファイルずつコンパイルし、コンパイルごとにクラスライブラリを指定してなどとすると大変手間がかかります。Antの定義ファイルにあらかじめ、どのファイルをどのタイミングで、どのクラスライブラリを使用して、と記載することでビルドの手間を大幅に削減することができます。

AntはJakartaプロジェクトの中でも人気のあるツールの1つです。また、ほとんどの商用のJava統合開発環境(IDE)と連携することができます。そのため、JBuilder、WebSphere StudioなどJava統合開発環境独自のビルドツールを使用するのではなく、Antを使用することにより、統合開発環境を選ばないビルド環境を作ることができます。

インストール

1.以下のURLよりAntの最新版をダウンロードします。執筆時点の最新版は1.5.4です。
http://ant.apache.org/bindownload.cgi
Javaの道_Ant_1_1

2.ダウンロードしたファイルを解凍し、任意のディレクトリに配置します。これでインストールの完了です。

3.環境変数の設定を行います。Antの実行に必要な環境変数は以下の通りです。

環境変数
JAVA_HOME
J2SDKインストールディレクトリ
E:\j2sdk1.4.1_052.2
ANT_HOME
ANTインストールディレクトリ
D:\Program Files\apache-ant-1.5.4
PATH
ANTインストールディレクトリ/bin
D:\Program Files\apache-ant-1.5.4\bin

4.動作確認を行います。MS-DOSプロンプトで「ant -version」と実行してください。Antのバージョンが表示されるとインストールの成功です。

D:\>ant -version
Apache Ant version 1.5.4 compiled on August 12 2003
D:\>

- 作者: 气度侠 2006年02月26日, 星期日 21:08  回复(0) |  引用(0) 加入博采

Eclipse(CVSの利用)

EclipseにはCVSクライアント機能が備わっています。ここでは、EclipseCVSクライアント機能の操作方法について解説します。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_03
・Eclipse 2.1.2
・Eclipse Language Pack 2.1.2
・CVSNT 2.0.18

CVS操作概要

ここでは、CVSの基本的な操作である以下の操作について、Eclipse上で行う手順について解説します。CVSの概要に関してはJavaの道:CVS(基本操作)を参照してください。

・import(開発ファイル群の登録)
・checkout(開発ファイル群をローカル開発環境へ取り込み)
・update(CVSサーバから最新開発ファイルを取得)
・commit(変更済み開発ファイルをCVSサーバへ登録)

CVSサーバにはWindows環境向けCVSサーバであるCVSNTを使用します。CVSサーバにはすでにレポジトリが作成済みであり、ユーザ(cvsuser)も登録済みであることとします。CVSNTのインストール方法、レポジトリ作成方法、ユーザ登録方法についてはJavaの道:CVS(インストール)を参照してください。

接続設定

EclipseからCVSサーバへ接続する方法について解説します。

1.「ウィンドウ」→「パースペクティブを開く」→「その他」を選択します。

2.「パースペクティブの選択」画面で「CVSレポジトリー・エクスプローラー」を選択し、「OK」ボタンを押します。

3.「CVSレポジトリー」上で右クリックし、「新規」→「レポジトリー・ロケーション」を選択します。
Javaの道_Eclipse_10_1

4.「CVSレポジトリーの追加」画面でレポジトリーへ接続する設定を行います。設定を行った後、「終了」ボタンを押しレポジトリーへ接続します。

・「ホスト」にはCVSサーバのホスト名もしくは、IPアドレスを入力します。ここでは、「localhost」と入力します。
・「レポジトリー・パス」にはCVSサーバで作成されたレポジトリーを指定します。ここでは、「C:\Java\cvsrep」と入力します。
・「ユーザー」にはCVSサーバにログインするユーザ名を入力します。ここでは、「cvsuser」と入力します。
・「パスワード」にはユーザのパスワードを入力します。今回はパスワードは設定していませんため、空白にします。
・「接続型」では、CVSサーバに接続する方式を選択します。ここでは、「pserver」を選択します。

Javaの道_Eclipse_10_2

5.正常にCVSサーバに接続されると「CVSレポジトリー」に接続レポジトリーが追加され、レポジトリー内を確認できます。
Javaの道_Eclipse_10_3

import

開発ファイル群をCVSサーバに登録するimport処理手順について解説します。

1.「Javaパースペクティブ」の「パッケージ・エクスプローラー」でCVSサーバにimportしたいプロジェクトを右クリックし、「チーム」→「プロジェクトの共有」を選択します。

2.「CVSレポジトリーとのプロジェクトの共有」画面で接続するレポジトリーを選択します。ここでは接続設定で設定したレポジトリー「C:\Java\cvsrep」を選択し、「次へ」ボタンを押します。
Javaの道_Eclipse_10_4

3.「モジュール名の入力」画面でCVSレポジトリーで使用するモジュール名を指定します。ここでは、「プロジェクト名をモジュール名として使用」にチェックを入れ、「次へ」ボタンを押します。

4.「プロジェクト共有可能」画面で、CVSレポジトリーにEclipseのプロジェクトをimportする旨のメッセージが出るため、「終了」ボタンを押します。

5.再度「パッケージ・エクスプローラー」でCVSサーバにimportしたいプロジェクトを右クリックし、「チーム」→「コミット」を選択します。

6.「CVSバージョン管理に追加」画面が起動し、CVSサーバにimportする内容の詳細が表示されるため、内容を確認し「はい」ボタンを押します。「詳細」ボタンを押すと、importするファイルの詳細が確認できます。
Javaの道_Eclipse_10_5

7.「コミット」画面でコメントの入力が求められるため、ここでは「ProjectAのimport」と入力し、「OK」ボタンを押します。これで、import処理の終了です。 「CVSレポジトリー・エクスプローラー」パースペクティブの「CVSレポジトリー」ビューでEclipseのプロジェクトがCVSサーバにimportされているのが確認できます。
Javaの道_Eclipse_10_6

checkout

CVSサーバからローカル開発環境へ開発ファイル群を取得するcheckout処理手順について解説します。

1. 「CVSレポジトリー・エクスプローラー」パースペクティブの「CVSレポジトリー」ビューでcheckout処理を行いたいプロジェクトを右クリックし、「プロジェクトとしてチェックアウト」を選択します。
Javaの道_Eclipse_10_7

2.実行環境によっては上書きの確認メッセージが表示される場合がありますため、「OK」ボタンを押します。これでcheckout処理の完了です。

update

作業前にCVSサーバから最新の開発ファイルを取得するupdate処理手順について解説します。

1.「Javaパースペクティブ」の「パッケージ・エクスプローラー」でupdateしたいファイルを右クリックし、「置換」→「HEADから最新」を選択します。これでupdate処理が行われます。プロジェクト全体をupdateしたい場合は、プロジェクトを右クリックし、「置換」→「HEADから最新」を選択します。

commit

作業後にCVSサーバに更新したファイルを登録するcommit処理手順について解説します。

1.「Javaパースペクティブ」の「パッケージ・エクスプローラー」でcommitしたいファイルを右クリックし、「チーム」→「コミット」を選択します。これでcommit処理が行われます。

実際の開発においてはupdate、commitを繰り返しながら開発作業を進めていきます。

- 作者: 气度侠 2006年02月26日, 星期日 15:08  回复(0) |  引用(0) 加入博采

Eclipse(JUnitの利用)

ここでは、Eclipse上でJUnitを使用する方法について解説します。

実行環境
・WindowsXP Home Edition
・J2SDK 1.5.0_03
・Eclipse 3.0.2
・Eclipse Language Pack 3.0.1
・JUnit 3.8.1

設定

EclipseでJUnitを使用するための設定方法について解説します。

1.JUnitインストール
JUnitの最新バージョンをインストールします。執筆時点の最新版はJUnit 3.8.1です。EclipseにもJUnitがあらかじめ含まれていますが、ソースコードやJavadocまでは含まれていません。ソースコードやJavadocはEclipseからJUnitのヘルプ、入力補助機能を使用したい時に利用できます。そのため、JUnitをダウンロードし、インストールすることとします。JUnitのインストール方法についてはJavaの道:JUnit(インストール)を参照してください。

2.Javaプロジェクトの作成
JUnitを関連づけるJavaプロジェクトをEclipseに作成します。「ファイル」→「新規」→「プロジェクト」を選択します。 「プロジェクト名」は「ExJUnit」とします。Javaプロジェクト作成の詳細はJavaの道:Eclipse(基本操作)を参照してください。

3.JUnitクラスパス変数の設定
Eclipseにjunit.jarへのクラスパス変数の設定を行います。クラスパス変数を設定することで、JUnitのバージョンアップの際にも簡易操作で対応できます。

3-1.「ウィンドウ」→「設定」を選択し、「設定」画面を開きます。「設定」画面で「Java」→「ビルド・パス」→「クラスパス変数」を選択します。

3-2.クラスパス変数内のJUNIT_LIBを選択し、「編集」ボタンを押します。「変数エントリーの編集」画面で、「パス」にインストールしたjunit.jarの参照パスを入力します。 「OK」ボタンを押します。
Javaの道_Eclipse_JUNIT_LIB設定

4.JUnitソースファイルのクラスパス変数の設定

3-1.クラスパス変数の設定画面で「新規」ボタンを押します。「名前」に「JUNIT_SRC」、「パス」にインストールしたJUnitソースファイル(src.jar)の参照パスを入力します。 「OK」ボタンを押します。「OK」ボタンを押し、「設定」画面を閉じます。

5.プロジェクトにJUnit関連ファイルの組み込み

5-1.JUnitを組み込みたいプロジェクト(ここでは「ExJUnit」)を右クリックし、「プロパティー」を選択します。

5-2.「プロパティー」画面で「Javaのビルド・パス」→「ライブラリー」タグを押します。

5-3.「変数の追加」を押し、「新規変数クラスパス・エントリー」画面でJUNIT_LIB変数を選択し、「OK」ボタンを押します。これで、プロジェクトにJUnitが組み込まれました。

5-4.追加したJUNIT_LIB変数を展開し、表示された「ソース添付:(なし)」をダブルクリックします。「ソース添付構成」画面が表示されます。

5-5.「ロケーション変数パス」に「変数」ボタンを押し、変数JUNIT_SRCを設定します。設定したら「OK」ボタンを押します。
Javaの道_Eclipse_JUNIT変数の設定

5-6.JUNIT_LIB変数を展開した中で、「Javadocロケーション:(なし)」をダブルクリックします。 「JUNIT_LIBのJavadoc」画面が表示されます。

5-7.「参照」ボタンを押して、JUnitのJavadocディレクトリを追加します。「OK」ボタンを押します。「OK」ボタンを押して、プロジェクトへのJUnit関連ファイルの組み込み設定を終了します。
Javaの道_Eclipse_javadocの設定

テストクラスの作成

Eclipseを使用し、JUnitのテストクラスを作成する方法について解説します。テスト対象のクラス、テストクラスはJavaの道:JUnit(基本操作)で解説したものを使用します。テスト対象のクラス、テストクラスの詳細は上記のページを参照してください。

1.テスト対象のクラスの作成

1-1.「ExJUnit」プロジェクトのソースファイルを保存するディレクトリ(ここでは、srcディレクトリ)を右クリックし、「新規」→「クラス」で新規クラスを作成します。「Javaクラス」画面での入力項目は、「ソース・フォルダー」に「ExJUnit/src」、「名前」に「ChangeNum」「public static void(String[] args)」「継承された抽象メソッド」にチェックを入れます。「終了」ボタンを押して新規クラスの雛形を作成します。
Javaの道_Eclipse_Javaクラス作成

テスト対象のクラス(ChageNum.java)の内容は以下のようになります。コマンドライン引数に指定された文字列を数値に変換するプログラムです。

【ChageNum.java】
public class ChangeNum {
  public static void main(String[ ] args) {
    //(1)オブジェクト生成
    ChangeNum cn1 = new ChangeNum();
    //(2)changeNumメソッド呼び出し
    cn1.changeNum(args[0]);
  }

  int changeNum(String s1) {
    //(3)数値に変換
    int n1 = Integer.parseInt(s1);
    return n1;
  }
}

2.テストクラスの作成
ChangeNum.javaをテストするJUnitのテストクラスを作成します。

2-1. パッケージ・エクスプローラーで「ChageNum.java」を右クリックし、「新規」→「その他」を選択します。

2-2.「選択」画面で、「Java」→「JUnit」→「JUnit テスト・ケース」を選択します。「次へ」ボタンを押します。

2-3.「名前」に「ChangeNumTest」、「テスト中のクラス」に「ChageNum」が入力されていることを確認し、「終了」ボタンを押します。テストクラスの雛形が作られます。
Javaの道_Eclipse_JUnitテスト・ケース

2-4.テストクラス(ChageNumTest.java)にテストプログラムを記載します。記載するテストプログラムは以下のようになります。テストプログラムの詳細はJavaの道:JUnit(基本操作)を参照してください。

【ChageNumTest.java】
import junit.framework.TestCase;

public class ChangeNumTest extends TestCase {
  public ChangeNumTest(String name) {
    super(name);
  }

  //(1)テストメソッドの宣言
  public void testChangeNum() {
    String ts1 = "100"; //(2)変換前の文字列
    int tn1 = 100; //(3)変換後の数値
    ChangeNum tcn1 = new ChangeNum(); //(4)オブジェクトの生成
    int test1 = tcn1.changeNum(ts1); //(5)changeNumメソッド呼び出し
    assertEquals("数値に変換されていない", tn1, test1); //(6)確認 
  }
}
JUnitの実行

EclipseからJUnitを実行する方法について解説します。

1-1.ChageNumTest.javaを右クリックし、「実行」→「JUnit テスト」を選択します。JUnitが起動し、テストが実行されます。

1-2.JUnitビューが起動し、JUnit実行結果が表示されます。緑のバーがJUnitビューに表示されるとテストの成功です。JUnitビューが起動しない場合は、「ウィンドウ」→「ビューの表示」→「その他」を選択し、「ビューの表示」画面で「Java」→「JUnit」を選択することで表示できます。
Javaの道_Eclipse_JUnit実行

複数のテストクラスの実行

通常テストクラスはテスト対象クラスごとに作成します。複数のテストクラスを同時に実行できると便利です。ここでは、複数のテストクラスを同時に実行する方法について解説します。

1.AllTestsテストクラスの作成

1-1. 複数のテストクラスが属するパッケージ(例えば、デフォルト・パッケージ)を右クリックし、「新規」→「その他」を選択します。

1-2.「選択」画面で、「Java」→「JUnit」→「JUnit テスト・スイート」を選択し、「次へ」ボタンを押します。

1-3.「JUnit テスト・スイート」画面で、「テスト・スイート」に「AllTests」と入力されていることを確認してください。

1-4.「スイートに含まれるテスト・クラス」でAllTestsテストクラスに含めたいテストクラスにチェックを入れてください。「終了」ボタンを押すとAllTestsテストクラスが作成されます。
Javaの道_Eclipse_JUnitテスト・スイート

2.AllTestsテストクラスの実行

2-1.AllTests.javaを右クリックし、「実行」→「JUnit テスト」を選択します。JUnitが起動し、テストが実行されます。

- 作者: 气度侠 2006年02月26日, 星期日 15:05  回复(0) |  引用(0) 加入博采

Eclipse(Tomcat向けデバッグ)

ここでは、EclipseとEclipseプラグインツールであるLombozを使用して作成されたTomcat向けアプリケーションEclipse上でデバッグする方法について解説します。この解説ではTomcatEclipseをインストールしているPCと同じPCにインストールしているものとします。

実行環境
・WindowsXP Home Edition
・J2SDK 1.5.0_03
・Eclipse 3.0.2
・Eclipse Language Pack 3.0.1
・Lomboz 2.0.2
・Tomcat 5.0.18

JSPデバッグの準備

JSPをデバッグするためにいくつかの設定をする必要があります。ここではその設定方法について解説します。

1.Tomcatの設定

EclipseではJSPファイルを直接デバッグすることはできず、JSPファイルから生成されたサーブレットソースファイルをデバッグします(JSPはもともとはサーブレットを非プログラマでもコーディングしやすいようにタグ化したものです。)。サーブレットソースファイルを生成するようにTomcatを設定します。

1-1.サーブレットソースファイルの生成はコンテキストの設定ファイルで行います。コンテキストの設定がTomcat5から変わりました。これまでは、$CATALINA_HOME\conf配下のserver.xmlで行いましたが、Tomcat5からは$CATALINA_HOME\conf\[engine name]\[host name]配下のコンテキスト名.xmlファイルで行います。[engine name]はデフォルトではCatalina、[host name]はデフォルトではlocalhostになっています。今回解説で使用するコンテキストはExLombozコンテキストのため、$CATALINA_HOME\conf\Catalina\localhost配下のExLomboz.xmlファイルに設定します。$CATALINA_HOMEはTomcatのインストールディレクトリを表します。

以下のExLomboz.xmlファイルを作成し、該当するディレクトリに設置します。docBaseはコンテキストのルートディレクトリを表します。ここでは、Eclipse上のワークプレイスに作成されたコンテキストのルートディレクトリExLombozを指定します。workDirはJSPファイルからサーブレットソースファイルを生成するディレクトリを指定します。ここでは、Eclipse上のJ2EEPJプロジェクトでサーブレットソースファイル生成場所と指定されているj2srcディレクトリを指定します。ExLomboz、j2src各ディレクトリまでのPATH名は利用環境に合わせて変更してください。コンテキスト設定ファイルの詳細はJavaの道:Tomcat(プログラム配置・実行)を参照してください。

【ExLomboz.xmlファイル】
<Context path="/ExLomboz"
docBase="C:\java\eclipse\workspace\J2EEPJ\ExLomboz"
workDir="C:\java\eclipse\workspace\J2EEPJ\j2src">
</Context>

1-2.JSPファイルからサーブレットソースファイルを生成する際、JSPファイルに日本語が含まれている場合は日本語が文字化けします。JSPのサーブレットソースファイルが生成されるとき、デフォルトでUTF-8でエンコードされるのに対し、EclipseではデフォルトでMS932(Windows環境の場合)でエンコードするためです。MS932でエンコードするために$CATALINA_HOME\conf\web.xmlに以下の青色の設定を追記します。設定しているWindows-31JはMS932の別名です。

【web.xmlファイル】
----------------------------------
----------------------------------
<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet
  </servlet-class>
  <init-param>
    <param-name>fork</param-name>
    <param-value>false</param-value>
  </init-param>
  <init-param>
    <param-name>xpoweredBy</param-name>
    <param-value>false</param-value>
  </init-param>
  <init-param>
    <param-name>javaEncoding</param-name>
    <param-value>Windows-31J </param-value>
  </init-param>
  <load-on-startup>3</load-on-startup>
</servlet>
----------------------------------
----------------------------------

2.サーブレットクラスファイルの移動

Eclipseのワークプレイスに作られたExLombozコンテキストのclassesディレクトリにはサーブレットクラスファイルが設置されていません。デバッグするJSPがサーブレットクラスファイルを参照する場合に備えて、サーブレットクラスファイルをclassesディレクトリに設置します。

2-1.「ウィンドウ」→「ビューの表示」→「Navigator」を選択します。

2-2.ナビゲーター画面で表示されるbinディレクトリ配下のサーブレットクラスファイルをパッケージも含めてすべて選択し、「右クリック」→「コピー」を選択します。

2-3.ナビゲーター画面のExLombozディレクトリ配下のclassesディレクトリを選択し、「右クリック」→「貼り付け」を選択します。これでサーブレットクラスファイルがclassesディレクトリに配置できました。

Javaの道_Eclipse_サーブレットクラスファイルコピー

3.jasper-runtime.jarファイルのクラスパスへの追加

jasper-runtime.jarファイルがクラスパスへ指定されていないため、JSPのサーブレットソースファイルを読み込む際にコンパイルエラーが出ます。そのため、クラスパスにjasper-runtime.jarファイルを指定します。

3-1.NavigatorビューでJ2EEPJを右クリックし、「プロパティー」を選択します。

3-2.「J2EEPJのプロパティー」画面を開き、「Java Build Path」を選択、「ライブラリー」タグを選択します。

3-3.「外部JARの追加」ボタンを押し、$CATALINA_HOME\common\libディレクトリ配下のjasper-runtime.jarファイルを追加します。

3-4.「OK」ボタンを押し、設定を終了します。

Javaの道_Eclipse_クラスパス指定

デバッグ

1.Tomcatをデバッグモードで起動

1-1.「Lomboz J2EE View」を表示し、「J2EEPJ」→「ExLomboz」→「Apache Tomcat v5.0x」を選択します。「Apache Tomcat v5.0x」を右クリックし、「Debug Server」を選択します。

2.サーブレットにブレークポイントを指定

2-1.「Package Explorer」を表示し、「J2EEPJ」→「src」→「packs」→「ShowDateServlet」を選択します。「ShowDateServlet」をダブルクリックしJavaエディタを表示します。
※「Package Explorer」は「ウィンドウ」→「ビューの表示」→「Package Explorer」で表示します。

2-2.ShowDateServlet.javaファイルの「out.println(new java.util.Date());」コードにブレークポイントを設定します。ブレークポイントはJavaエディタの枠(グレー)で、ブレークポイントを設定したい箇所をダブルクリックすることで設定します。

3.JSPにブレークポイントを設定

3-1.ブラウザからJSPにアクセスします。アクセス後、「Package Explorer」を表示し、「J2EEPJ」→「j2src」を右クリックし、「最新表示」を選択します。JSPからサーブレットソースファイルが生成されているのが確認できます。

JSP: http://localhost:8080/ExLomboz/ShowDateJSP.jsp

3-2.サーブレットソースファイルである「ShowDateJSP_jsp.java」をダブルクリックしJavaエディタを表示します。

3-3.ShowDateJSP_jsp.javaファイルの「out.print( new java.util.Date( ));」コードにブレークポイントを設定します。

4.デバッグの実行

4-1.ブラウザからサーブレット、JSPそれぞれのプログラムにアクセスします。アクセスするとEclipseのデバッグ画面が表示され、ブレークポイントが指定された箇所で実行が停止します。デバッグに必要なステップイン、ステップオーバー、変数の確認ができるようになります。

サーブレット: http://localhost:8080/ExLomboz/ShowDate
JSP: http://localhost:8080/ExLomboz/ShowDateJSP.jsp

5.Tomcatの停止

5-1.デバッグ作業が終了すると、「Lomboz J2EE View」を表示し、「J2EEPJ」→「ExLomboz」→「Apache Tomcat v5.0x」を右クリックし、「Stop Server」を選択します。Tomcatが終了します。

- 作者: 气度侠 2006年02月26日, 星期日 14:55  回复(0) |  引用(0) 加入博采