EclipseでHello Struts

Eclipse上でStruts開発を行いながら、 さらにEclipseにハマってみましょう。

準備として、まずTomcatプラグインは設定されてますね? 設定されていない人は、してくださいませ。

なお、ここからの(操作)説明は、メニュー等は日本語化でいきます (うちのeclipse環境が日本語になってしまったもので。。。)。

Strutsを導入しよう

ここでは、struts1.0.2を使います。 以下から、バイナリファイルをダウンロードしましょう。

Strutsのダウンロード

簡単EclipseでStruts入門

ダウンロードした、jakarta-struts-1.0.2.zipの中に、 struts-blank.warというファイルが入っています。 このファイルは、strutsを使う場合の最低限のファイルが含まれた、 warファイルです。 このファイルをもとに、簡単なWebアプリケーションを作ってみましょう。

プロジェクトの作成

まず、EclipseでTomcatプロジェクトを作ります。 ここでは、struts-test01という名前で作ります。 "server.xmlを更新する"をチェックするを忘れないように。

struts-blankで上書き

先ほどの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アプリの作成

Struts上で、Webアプリケーションを作ります。 では、とりあえず、Hello Strutsを作ってみましょう。

Hello Strutsのために作成するものは、

の3点です。

クラスパスの設定

プロジェクトを右クリック->プロパティー->Javaのビルド・パスを選択

ライブラリータブを選択して、Jarの追加ボタンを押す。

strut.jarを選択しOK。

クラスパスの設定は、コンパイルのために必要です(実行時はTomcatが勝手に読む)。

Actionクラスの作成

せっかくなので、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...というのもイヤなので、気分で引数名を変えました。

遷移先のJSPを作成

以下の内容で、hello.jspというファイルを作成し、
<html>
<body>

<h2>hello</h2>

</body>
</html>
struts-test01直下におきます。

struts-config.xmlの編集

次は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 Strutsまとめ

「"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)


もどる