概要
SAStrutsの理解を少しでも深められればと思っていたら公式のチュートリアルがあったのでやってみました
大変なのはコーディングより環境構築かもしれません
環境
- Windows7 64bit
- Eclipse Luna 4.4.1
- Apache Tomcat 7.0.56(設定はデフォルト)
- JDK 1.8.0_25
設定
環境構築
過去の記事で紹介しているのでそれを参考に構築してみてください
ポイントはプラグインのインストールの部分です
Eclipseのバージョンよってはエラー地獄にハマるかもしれません
一応環境に記載されているバージョンでは問題なくインストールできました
サラーっと流していますがたぶんここが一番大変です。。。
サンプルを動かしてみる
基本はチュートリアルのページを参考に進めていきます
チュートリアルのソースコードのダウンロードとEclipseへのインポート
http://sastruts.seasar.org/download/2011-08-13/sa-struts-tutorial-1.0.4-sp9.zip
をダウンロードします
ダウンロードできたらEclipseに解凍したプロジェクトをインポートします
PackageExplorerから
Import -> Existing Projects into Workspace -> Select root directory -> Projects > Finish
と必要な箇所を入力してインポートします
「Select root directory」はダウンロードして解凍したディレクトリを選択します
インポートが完了したらTomcatを起動します
起動が完了したらプロジェクトをTomcatに認識させます
Properties -> Tomcat -> Tomcatプロジェクトにチェック -> Apply -> OK
認識されるとEclipseのコンソールにデプロイされたログが出ると思います
この状態で http://localhost:8080/sa-struts-tutorial/ にアクセスするとサンプルを確認することができます
インポートが完了してサンプルが動作した状態のPackage Explorerは以下のような感じです
サンプルの簡単な説明
まず http://localhost:8080/sa-struts-tutorial/ にアクセスするとtutorial.action.IndexAction.java
が実行されます
src/main/resources/convention.dicon
というファイルがありここにルートパッケージと呼ばれる宣言がされています
<initMethod name="addRootPackageName">
<arg>"tutorial"</arg>
</initMethod>
tutorialをルートパッケージとしてその配下にあるactionパッケージがアクセスしたURIに合わせて自動的に呼び出されます
例えば/sa-struts-tutorial/add
にアクセスするとtutorial.action.AddAction.javaが実行されます
そしてこのActionクラスの中で@Execute
アノテーションがついたメソッドが自動で呼ばれます
@Execute
がついたメソッドは引数なしの戻り値がStringでなければなりません
この動きがSAStrutsのアクセスしてからレスポンスが返却されるまでの王道的な一連の流れになります
パッケージの命名規則はその他の機能にも紐付いておりdtoやentityパッケージを使うとモデルデータへの自動バインドみないなことをやってくれます
またアノテーションも@ActionFrom
や@Resource
などがありこれらを駆使することでコーディング量を大幅に削減することができます
では、一応サンプルは動くようになったのサンプルの話はこれくらいにして実際に自分でサンプルを作ってみたいと思います
簡単な自作アプリを作ってみる
受け取ったデータを表示する簡単なアプリを作ってみます
データ表示するためにDtoという仕組みがあります
DtoはData Transfer Objectの略でサブシステム間でデータを転送するのに使うデザインパターンです(Wikipediaより)
SAStrutsでDtoを使うとレスポンスのデータが簡単に作成できます
(今回の例だとそこまで恩地を受けれている感がありませんが、せっかくなんで使ってみます)
まずDto用のクラスを作成します
Dtoはtutorial.dto
配下に作成する必要があります
今回はTestDto.javaというファイルを作成してください
クラスの内容は以下の通りです、メッセージを表示するためのフィールドと値をセットするためのコンストラクタ
それとをメッセージを表示するためのメソッドを用意します
package tutorial.dto;
public class TestDto {
public String message;
public TestDto() {
}
public TestDto(String message) {
super();
this.message = message;
}
public String showMessage() {
return "<h3>" + message + "</h3>";
}
}
次にリクエストのデータを受け取るためのクラスを準備します
データ受け取るための仕組みはform
という仕組みがありこれを利用します
Formはtutorial.form
配下に作成する必要があります
FormTest.javaというクラスを作成してください、内容は以下の通りです
リクエストのmessageを受けとるためのフィールドを用意します
あとで説明しますが、このフィールドにリクエストされたデータが勝手にバインドされます
package tutorial.form;
import org.seasar.struts.annotation.Required;
public class TestForm {
@Required
public String message;
}
次にこれらのFormとDtoを使うためのActionを作成します
tutorial.action.TestActoin.java
を作成してください
内容は以下の通りです
package tutorial.action;
import javax.annotation.Resource;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;
import org.seasar.struts.util.ResponseUtil;
import tutorial.dto.TestDto;
import tutorial.form.TestForm;
public class TestAction {
@ActionForm
@Resource
protected TestForm testForm;
public TestDto testDto;
@Execute(validator=false)
public String index() {
TestDto dto = new TestDto(testForm.message);
ResponseUtil.write("message is " + dto.showMessage());
return null;
}
}
Fromは@ActionFrom
と@Resource
アノテーションが必要です
レスポンス用のTestDtoのオブジェクトをフィールドとして管理します
そしてアクセスが来た時に処理を開始するindexメソッドを@Execute
アノテーション付きで作成します
ここでポイントなのがTestFormのオブジェクトで
Servletのrequestオブジェクトを操作していないのにTestFormのフィールドにリクエストされた値をバインドしてくれます
これがSAStrutsを使うと嬉しい点でリクエストのパラメータ名とFormクラスのフィールド名を紐付けて勝手にオブジェクトを作成してくれます
なのでソースコード中でいきなりtestForm.message
とやっても怒られないのです
実行してみる
Tomcatを再起動してもいいですが、SAStrutsはソースコードを書き換えるとそのままデプロイしてくれます
http://localhost:8080/sa-struts-tutorial/test?message=hello
にアクセスしてみましょう
message is <h3>aaa</h3>
と表示されると思います、HTMLがうまく解釈されていません
TestAction.javaのwriteしている部分を以下に修正してください
ResponseUtil.write("message is " + dto.showMessage(), "text/html");
再度URLにアクセスするとうまくHTMLが解釈されていると思います
?message=hogehoge
の部分を変更するとブラウザに表示されるメッセージも変わると思います
だいぶ簡単なアプリでしたが紹介は以上です
最近はPlayとかSpring.ioとかもうちょっとモダンなフレームワークがあり同じようなことができます
SAStruts自体はまだStruts1を使っているようです
Struts自体はまだメンテされていて2.3まで進んでいるようです
触ってみて感じましたが構築が大変なのと仕組みも複雑でブラックボックスな部分が多い印象です(OSSなんでソース読めって感じですが。。)
あとはドキュメントがもう少し充実していると嬉しいかなと思いました
ググればある程度情報は出ましたが昔の記事が多かったかな
Tips
- src/main/webapp/WEB-INF/classes/log4j.properties のDEBUGをINFOにするとEclipseのコンソールに表示されていたログが表示されなくなります
0 件のコメント:
コメントを投稿