Eclipse上でStruts開発を行いながら、 さらにEclipseにハマってみましょう。
準備として、まずTomcatプラグインは設定されてますね? 設定されていない人は、してくださいませ。
なお、ここからの(操作)説明は、メニュー等は日本語化でいきます (うちのeclipse環境が日本語になってしまったもので。。。)。
ここでは、struts1.0.2を使います。 以下から、バイナリファイルをダウンロードしましょう。
ダウンロードした、jakarta-struts-1.0.2.zipの中に、 struts-blank.warというファイルが入っています。 このファイルは、strutsを使う場合の最低限のファイルが含まれた、 warファイルです。 このファイルをもとに、簡単なWebアプリケーションを作ってみましょう。
まず、EclipseでTomcatプロジェクトを作ります。 ここでは、struts-test01という名前で作ります。 "server.xmlを更新する"をチェックするを忘れないように。
先ほどのstruts-blank.warを解凍します(jarコマンドか、warをzipにして解凍ツールを使ってください)。解凍されたファイルの中の、WEB-INFディレクトリとindex.jspを、 先ほど作ったstruts-test01フォルダに上書きします(META-INFは不要です)。
WEB-INFの下にweb.xmlや.tldファイルがあり、WEB-INF/libの下にstruts.jarが ありますね。
Tomcatを起動してください。 うだうだ、Strutsのログメッセージが出てきたら、たぶん正常です。
一応、ブラウザで、
http://localhost:8080/struts-test01/index.jsp
にアクセスしてindex.jspが動くかどうか確認しましょう。
ここで、不幸にもindex.titleなどのリソースが見つからない、といったエラー が出る人は、index.jsp自体を
<html> <body> <h2>hoge</h2> </body> </html>とかに変えて試してください。とりあえずここでは、それでOKです。
Struts上で、Webアプリケーションを作ります。 では、とりあえず、Hello Strutsを作ってみましょう。
Hello Strutsのために作成するものは、
プロジェクトを右クリック->プロパティー->Javaのビルド・パスを選択
ライブラリータブを選択して、Jarの追加ボタンを押す。
strut.jarを選択しOK。
クラスパスの設定は、コンパイルのために必要です(実行時はTomcatが勝手に読む)。
せっかくなので、Eclipseの機能を使いながら作っていきます。
作るクラスはただ1つ。hoge.HelloActionです。 まずはクラスを作ります。
package hoge; public class HelloAction { }このクラスはorg.apache.struts.Actionを継承したクラスにしたいので、 extends Actionを追加します(手書き)。
package hoge; public class HelloAction extends Action{ }
構文エラーを示す赤線がActionの下に表示されます。 import文を書いていないからです。
Actionの上で右クリックし、ソース->インポートの追加 を選択します。 org.apache.struts.action.Actionを選択し、OKします。 import文が追加されましたね?
次は、Actionクラスにperformメソッドを追加します。
クラスの中身あたりで、右クリック->ソース->メソッドのオーバーライド
を選択します。
performが4つぐらいありますが、
引数を確認して、
perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse)、引数にActionServletがなく、HttpServletRequestがあるもの、にチェックを入れ、OKしてください。
メソッドが追加されましたね。
次は、メソッドの中身を変更します。
/** * @see org.apache.struts.action.Action#perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) */ public ActionForward perform( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { System.out.println("hello"); return mapping.findForward("hoge"); }
System.outを追加し、returnの行を変更しました。 ついでにメソッド引数がarg...というのもイヤなので、気分で引数名を変えました。
<html> <body> <h2>hello</h2> </body> </html>struts-test01直下におきます。
次はWEB-INF直下にあるstruts-config.xmlを編集します。 先ほど作ったActionクラスにアクションマッピングを行います。
ここで、編集時にただのテキストエディタだと見にくいなぁって人は、 SolarEclipseプラグインを入れときましょう。xmlやjsp編集時にハイライト機能がつきます。
<action-mappings>タグの中(下)に以下のactionを追加します。
logoff actionのところをコピーして、値を書き換えても可。
<action path="/hello" type="hoge.HelloAction"> <forward name="hoge" path="/hello.jsp"/> </action>
Tomcatを再起動して、以下のURLにアクセスします。
http://localhost:8080/struts-test01/hello.do
コンソールに"hello"が表示され、ブラウザにもhello.jspが表示されましたね。
「"hello.do"にリクエストして、HelloActionが呼ばれて、遷移先のページが表示された」ってことは分かりますね?
ちなみに、hello.jspに直接アクセスしても、今回の例では同じ動作をさせる ことができます(System.outはされないけど)。 なんでこんなめんどくさいことをするのでしょう?
ここで注意すべきは、struts-config.xmlで画面遷移を管理している ということです。 以下のように、Strutsくんがちょくちょく間に入って働いています。
hello.do→Strutsくん→HelloAction(結果hoge)→Strutsくん→hello.jsp
Strutsくんが、hello.doをHelloActionに、結果hogeをhello.jspにマッピングしています。 つまり、ビュー(JSP)とモデル(Actionクラス) を切り離し、その間の取り持ちをコントローラ(Strutsくん)が行っているわけです。 MVCってやつですね。
そうすることで、JSPを作る人とモデル(ロジック)を作る人が、
平行して作業することができ、機能が明確に分かれることで
後からわけわからんソースだ状態になることもないわけです。
(2002/10/3)