LoginSignup
14
12

More than 5 years have passed since last update.

SAStrutsがもたらすもの

Posted at

SAStruts

Super Agile Struts という。 The Seasar Project のひとつ。
The Seasar Project は日本のオープンソースプロジェクト。

Struts を用いた開発の場合、設定の記述の多さ、修正毎のサーバ再起動などが開発速度を下げていた。
SAStruts では、スクリプト言語ライクに、保存(とコンパイル)を行えばすぐにアプリケーションに反映される。

「設定よりも規約」という概念がある。
例えば、特定のURLに対する実行内容を記述する際に、設定ファイルに実行対象を記述する代わりに、命名や配置の規則で実行対象を判別させる。

既存プロジェクトに参加する場合、実行対象の解決が重要な部分だと思うので、以下ではその部分に触れる。

SAStruts の恩恵

URLから実行対象を判定する上で、主に以下の「名前」が利用される。

  1. パッケージ名
  2. クラス名
  3. プロパティ/メソッド名
  4. (JSP は) ファイルパス

ルートパッケージの名前は、 convention.dicon というファイルで指定されている。詳細は参考文献を参照。

アクションやアクションフォームその他は、格納場所とクラスの命名規則が以下に示すように規約で定められている。

分類 格納パス 内容の命名
アクション ルートパッケージ.action AbcAction
アクションフォーム ルートパッケージ.form AbcForm
エンティティ ルートパッケージ.entity 任意
サービス ルートパッケージ.action AbcService
ユーティリティ ルートパッケージ.action 任意

以下では、Actionを扱う。

実行対象の決定

アプリケーションのルートを、 http://localhost:8080/example/ として解説する。

アプリケーションへアクセスがあった時、以下の手順でActionクラスを判別する。

  1. アプリケーション名の後ろのスラッシュ以降を取り出す。
  2. 最後のスラッシュまでを「パス」、それ以降を「メソッド名」とし、パスを次の手順で操作する。
    1. 最後のスラッシュを Action に置換する。
    2. 最後のスラッシュの直後を大文字にする。
    3. 全てのスラッシュを、ドットに置換する。
    4. ルートパッケージ名.action を先頭に付与する。このパスに対応するクラスが実行対象となる。
  3. メソッド名がある場合は該当のメソッドを、ない場合は 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 に記載がある)。

参考文献

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12