SAStruts
Super Agile Struts という。 The Seasar Project のひとつ。
The Seasar Project は日本のオープンソースプロジェクト。
Struts を用いた開発の場合、設定の記述の多さ、修正毎のサーバ再起動などが開発速度を下げていた。
SAStruts では、スクリプト言語ライクに、保存(とコンパイル)を行えばすぐにアプリケーションに反映される。
「設定よりも規約」という概念がある。
例えば、特定のURLに対する実行内容を記述する際に、設定ファイルに実行対象を記述する代わりに、命名や配置の規則で実行対象を判別させる。
既存プロジェクトに参加する場合、実行対象の解決が重要な部分だと思うので、以下ではその部分に触れる。
SAStruts の恩恵
URLから実行対象を判定する上で、主に以下の「名前」が利用される。
- パッケージ名
- クラス名
- プロパティ/メソッド名
- (JSP は) ファイルパス
ルートパッケージの名前は、 convention.dicon
というファイルで指定されている。詳細は参考文献を参照。
アクションやアクションフォームその他は、格納場所とクラスの命名規則が以下に示すように規約で定められている。
分類 | 格納パス | 内容の命名 |
---|---|---|
アクション | ルートパッケージ.action |
AbcAction |
アクションフォーム | ルートパッケージ.form |
AbcForm |
エンティティ | ルートパッケージ.entity |
任意 |
サービス | ルートパッケージ.action |
AbcService |
ユーティリティ | ルートパッケージ.action |
任意 |
以下では、Actionを扱う。
実行対象の決定
アプリケーションのルートを、 http://localhost:8080/example/
として解説する。
アプリケーションへアクセスがあった時、以下の手順でActionクラスを判別する。
- アプリケーション名の後ろのスラッシュ以降を取り出す。
- 最後のスラッシュまでを「パス」、それ以降を「メソッド名」とし、パスを次の手順で操作する。
2. 最後のスラッシュを Action に置換する。
3. 最後のスラッシュの直後を大文字にする。
4. 全てのスラッシュを、ドットに置換する。
5.ルートパッケージ名.action
を先頭に付与する。このパスに対応するクラスが実行対象となる。 - メソッド名がある場合は該当のメソッドを、ない場合は
index()
メソッドを呼び出す。
これらの手順による例を示す。
なお、アプリケーション名は「example」、ルートパッケージ名は「jp.co.myproject」とする。
手順 | http://localhost:8080/example/add/ |
http://localhost:8080/example/add/submit |
http://localhost:8080/example/list/name/ |
---|---|---|---|
1 | /add/ |
/add/submit |
/list/name/ |
2 | パス: /add/ 、メソッド名: なし |
パス: /add/ 、メソッド名: submit
|
パス: /list/name/ 、メソッド名: なし |
2-1 | /addAction |
/addAction |
/list/nameAction |
2-2 | /AddAction |
/AddAction |
/list/NameAction |
2-3 | .AddAction |
.AddAction |
.list.NameAction |
2-4 | jp.co.myproject.action.AddAction |
jp.co.myproject.action.AddAction |
jp.co.myproject.action.list.NameAction |
4 | jp.co.myproject.action.AddAction#index() |
jp.co.myproject.action.AddAction#submit() |
jp.co.myproject.action.list.NameAction#index |
実行対象の関数に関する規則
URLに対して実行される関数には以下の規則がある。
-
@Execute
アノテーションが付与されていること - 戻り値は String 、引数なしの関数であること
- 戻り値が示すものは遷移先のパスであり、遷移が必要ない場合には null を返すこと
JSPが遷移先になっている場合、その探索パスがhttpやスラッシュ以外から始まるならば、Actionに対応するディレクトリから探索される。
例えば、 jp.co.myproject.action.AddAction#submit()
が "success.jsp"
を返すならば、 /WEB-INF/view/add/success.jsp
が参照される。接頭の /WEB-INF/view
は、プロジェクトの設定による(web.xml
に記載がある)。