minimize

簡易Webライブラリ

巷の面倒なWebフレームワークを使うのに疲れた人は、
是非使ってみて下さい。
Tomcat上からしか確認していませんが、
おそらく他のWeb Applicationサーバでも動くはずです。

web.xmlの設定

設定は、ここだけです。

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
  
  <servlet>
    <servlet-name>Command</servlet-name>
    <servlet-class>org.limy.web.VelocityCommandServlet</servlet-class>
    <init-param>
      <!-- コマンドクラスを配置したパッケージ名 -->
      <param-name>commandPackageName</param-name>
      <param-value>sample.command</param-value>
    </init-param>
    <init-param>
      <!-- vmファイルを配置したディレクトリ名 -->
      <param-name>baseResourcePath</param-name>
      <param-value>WEB-INF/vm</param-value>
    </init-param>
    <init-param>
      <!-- 開発モードにする場合はtrue -->
      <param-name>development</param-name>
      <param-value>true</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>Command</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>
  
</web-app>

こんな感じにします。

commandPackageName

コマンドクラスを配置するパッケージ名を指定します。
省略した場合は、org.limy.web.command になります。

baseResourcePath

VM(Velocity)ファイルを配置するディレクトリ名を
アプリケーションのルートディレクトリからの相対パスで記述します。
省略すると、アプリケーションルート直下になります。

development

true を指定すると、開発モードになります。
省略または false を指定すると、サーバモードになります。

  • 開発モード

    毎回VMファイルのパースを行います。
    処理はやや遅くなりますが、VMファイルの修正がすぐさま反映されます。
    処理中に例外(Exception)が発生した場合、スタックトレースが画面上に表示されます。

  • サーバモード

    1時間に1回、VMファイルのパースを行います。
    その間、VMファイルの修正は反映されなくなりますが
    このときの処理速度はまさにVelocity(高速)です。
    処理中に例外(Exception)が発生した場合、画面上には簡易エラーのみ表示され
    スタックトレースは標準出力に吐き出されます。

servlet-mapping 要素は、作成するコマンドの数だけ定義する必要があります。

コマンドクラス名

コマンドクラス名は、servlet-mapping 要素で定義した url-pattern によって決まります。
今回の例ならば、TestCommand です。

url-pattern とコマンドクラス名の対応は以下のようになっています。

/test      -> TestCommand
/user_list -> UserListCommand
/          -> IndexCommand

ちなみに、コマンドクラスを配置するパッケージは
web.xmlで定義した commandPackageName に合わせる必要があります。
今回ならば、sample.command.TestCommand という事です。

コマンドクラスの作成

コマンドクラスは POJO を採用しています。
特定のインターフェイスを実装したりする必要はありません。

簡単な例を挙げます。

public class TestCommand {
    public String cmdEnter(WebResource resource) {
        resource.setAttribute("number", 50);
        resource.setAttribute("string", "abc");
        TestBean bean = new TestBean();
        bean.setV(100);
        bean.setName("jon");
        resource.setAttribute("bean", bean);
        return "test/index";
    }

}

cmdEnter メソッドは、デフォルトのエントリメソッドです。
GET/POST 形式のどちらにも対応しています(違いはありません)。
流れとしては以下のようになります。

簡単ですね。
WebResource は ServletRequest/Response をラップした作りになっています。

resource
|-- number = 50
|-- string = "abc"
`-- bean = TestBean
           |-- v = 100
           `-- name = "jon"

ツリー構造で値を格納することが出来ます。

VMファイルの作成

表示側のVMファイルは以下のようになります。
VM構文の詳細に関しては、VTL Reference Guide を参考にして下さい。
非常にシンプルなので、誰でも2〜3時間あれば使えるようになるはずです。

<html><body>
number = ${number} <br />
string = ${string} <br />
bean = { ${bean.v}, ${bean.name} } <br />
</body></html>

表示結果は以下のようになります。

number = 50
string = abc
bean = { 100, jon }

VMファイルの作成場所は、コマンドメソッドの戻り値そのままです。
今回の例ならば、次のようなイメージになります。

アプリケーションルート
`-- WEB-INF
    `-- vm
        `-- test
            `-- index.vm

拡張子は .vm で固定となっています。

コマンドに別のエントリメソッドを登録する

コマンドには複数のエントリメソッドを登録することが出来ます。
入力したURLに応じて、以下のようにエントリメソッド名が変化します。

http://sample.com/test -> cmdEnter
http://sample.com/test?__cmd__=regist -> cmdRegist
http://sample.com/test?__cmd__=deleteAll -> cmdDeleteAll
http://sample.com/test?param1=a -> cmdEnter

このように、__cmd__ パラメータで指定されたモード名称によって
エントリメソッドが自動的に決まります。
今のところ、この __cmd__ という文字列は固定です。
そのうち変えられるようにする予定ですが。

POSTにも対応しているので、以下のようなHTMLがあった場合…

<form action="test" method="post">
  <input type="hidden" name="__cmd__" value="send">
  <input type="submit" value="送信">
</form>

「送信」ボタンを押したときに呼び出されるメソッド名は、cmdSend になります。

[コメント(0)]