N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

最小Webアプリ2

2004-05-21 02:14:52 | オープンソース
続きです。

xwork.xmlの作成
以下の通りXWorkの設定ファイルを作成します。

<xwork>

  <include file="webwork-default.xml"/>

  <package name="default" extends="webwork-default">

    <default-interceptor-ref name="defaultStack"/>

    <action name="Hello" class="wwstudy.HelloAction">
      <result name="success" type="velocity">
        <param name="location">/WEB-INF/vm/hello.vm</param>
      </result>
      <interceptor-ref name="defaultStack"/>
    </action>
  </package>
</xwork>

include要素で指定しているwebwork-default.xmlはWebWorkが提供するデフォルトのXWorkの設定ファイルで、WebWorkが提供するインターセプタなどが定義されております。XWorkではこのように他の設定ファイルを設定のベースラインにすることができます。
キモになるのはaction要素で、ここで自分で作ったActionの設定を行います。result要素のname属性は先程のActionのexecuteメソッドの戻り値と整合性がとれている必要があります。intercepter-ref要素で参照しているのはincludeしているWebWorkの設定で定義されているデフォルトのインターセプタスタックです。

デプロイ
これらのファイルを必須ライブラリと共にWebアプリケーションの形にまとめます。ディレクトリ構造は以下の様になります。
`-- WEB-INF
    |-- classes
    |   |-- wwstudy
    |   |   `-- HelloAction.class
    |   `-- xwork.xml
    |-- lib
    |   |-- commons-logging-1.0.3.jar
    |   |-- ognl-2.6.3-modified.jar
    |   |-- oscore-2.2.1.jar
    |   |-- velocity-dep-1.3.1.jar
    |   |-- webwork-2.0.jar
    |   `-- xwork-1.0.jar
    |-- vm
    |   `-- hello.vm
    `-- web.xml


動かしてみる
さあ、それでは早速動かしてみましょう。今回は、jdk1.4.2_04とTomcat 5.0.24を使います。Tomcatを起動して、ブラウザで

http://localhost:8080/wwblog/Hello.action?name=Nose

を表示すると、ちゃんと

こんにちは! Nose さん.

と表示されます。

気になること
これでWebWorkを使ったWebアプリの概要は大体分かったのですが、細かい所がまだまだ不明です。検証や、型変換のときにエラーがおこったらどう処理するのでしょうか?セッションの扱いは?共通のデータ構造を複数のActionで使いたい時は?などなど。
これからはそういう細かい所をすこしづつ調べて行こうと思います。

あと、今回WebWorkの挙動で気になったのは、executeの戻り値の文字列がxwork.xmlの該当Actionの設定に存在しないと、ブラウザにレスポンスが永遠に戻ってこなくなることです。ログに警告ログははかれるのですがね。。。これって挙動としてはすこしおかしい気がします。
このへんについてももう少し突っ込んで原因をさぐっていきたいです。

ではまた。

最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
Unknown (ikkoan)
2004-05-24 02:12:30
はやりのIoCコンテナの機能を採り入れてる

のは確かにXWorkの面白いところですよね。セッションとのやりとりにしてもActionが自分でセッションからとってくるというよりはInterceptorにセットさせた方がすっきりしそうです。
返信する
初コメント (shida)
2004-05-22 12:14:57
最初からざっと目を通させていただきました。

実装するインターフェイスがexecute()だけで良いってのは、かなり熱いっすねぇ。

某自動化ツールのような印象を受けました。



検証にはValidate機能でバリデーションの設定を書いて、Interceptorでセット

セッションは、IoCコンテナに共有サービスとして登録してInterceptorでセット、という形になるらしいです

#オープンソースJavaプロダクツからの引用



Interceptorマンセーな作りっぽいですねぇ。。





返信する