Seasar2 徹底入門 〜SAStruts/S2JDBC 対応〜
https://www.seshop.com/original/images/product/12039/L.png
感想
今から新たに Seasar2 を使うという人はそうそう居ないと思うが、既存プロジェクトで Seasar2 を使ってる、というような人が Seasar2 を学ぶにはちょうどよい本だと思う
Seasar Project のサイト () を見ても、プロジェクト間の関係性などがわかりにくかった (「Seasar2 と SAStruts の関係ってどういう感じ……?」 「S2Container と Seasar2 は同じもの……?」 となる) のが、本書を読むとすっきり理解できた ちょっとぶ厚めだけど、概念の説明などの重要なところを拾いながら読んでいき、後から必要に応じて詳細を読んでいく、というような使い方が良さそう
内容メモ
フレームワークの標準機能だけでなく、使いこなすための拡張の方法まで説明
2 章 : S2Container
dicon ファイルでは、OGNL 式を利用できる include タグで別の dicon ファイルをインクルードできる
JAR ファイル内の dicon ファイルを WEB-INF/classes で上書きできる
それ以外に、XInclude (S2Container ではなく XML の標準の仕組み) によるインクルードも可能 名前空間の概念 : 複数の dicon ファイルでコンポーネント名が重複する可能性がある場合は名前空間を別にして対応
外部バインディング : リクエストパラメータなどをバインディングできる
S2AOP : S2Container で管理されているコンポーネントに対して AOP を適用する機能 DependencyLookupInterceptor とか、AOP の範囲を超えてる気がする…… nobuoka.icon
Seasar2 の AOP では、インターセプターだけでなくインタータイプによってクラスの静的な構造を変更できる
クラスにフィールドやメソッドを追加
dicon ファイルで登録するのは大変 → 自動登録の仕組みもある (ComponentAutoRegister)
AspectAutoRegister によるアスペクトの登録も
DI の設定にアノテーションも利用可能
Web アプリケーションで S2Container を使うには web.xml でいくつかの設定が必要
環境によるアプリケーションの挙動の変更 : env.txt を利用
3 章 : SAStruts 入門
4 章 : アクションとアクションフォーム
アクションクラスには、URL に対応するメソッドを複数定義可能
通常、1 つのユースケースを 1 つのアクションとして実装する
アクションは実行メソッドを複数持てるが、アクションフォームは 1 つしか持てないので、アクションフォームを共用できない処理は別アクションにした方がよい
外部コンテキスト : アプリケーションサーバーから提供されるオブジェクトを S2Container 上で扱うための機能
アクションフォーム
リセットメソッド : 下記のような問題を避けるための、アクションフォームを初期化するメソッド
チェックボックスやセレクトボックスは値が選択されていた場合だけリクエストパラメータが送信されるため、セッションスコープのアクションフォームの場合、チェックボックスやセレクトボックスをすべて解除してフォームを送信しても元の状態が残ってしまうという問題が発生します。
こういう仕組みになってるの、辛すぎでは…… nobuoka.icon
アノテーションによる入力値チェックをしている場合、同じチェックを JS 側でも行わせることができる
便利やん nobuoka.icon
アクションのフィールドとしてアクションフォームを定義しない場合、SAStruts はアクション自体をアクションフォームのように扱う
5 章 : ビュー
src/main/webapp 直下に JSP ファイルを配置すると、ブラウザから直接見れてしまうが、それは避けるべき
フィルタでアクセス禁止にする
共通のヘッダやフッタなどの実現 : Struts の Tiles という機能を SAStruts でも使える
Mayaa という Seaser2 プロジェクト独自の HTML テンプレートエンジンも利用できる 6 章 : SAStruts 応用編
フィルタ利用時には HOT deploy との関係に注意
認証機能
ロール認証 : サーブレットの認証機能と、アクションの @Execute アノテーションに指定可能な role 属性で認証 アプリケーションでの認証 : 普通のやつ
エラー処理
全体の処理の流れ
https://gyazo.com/f39a62f75526cddead61513b9f0f39e4
例外処理の方法
web.xml でのエラーページ指定
設定しないと例外のスタックトレースが表示されるため、何かしらは設定したほうが良い
フィルタで処理
Struts の例外ハンドラ : struts-config.xml で指定
AOP でのエラー処理
エラー処理を行なうインターセプターは TxAttributeCustomizer の外側で実行されるようにすること
ポートレット : ポータルアプリケーションにおいて利用される小さなコンポーネント 7 章 : S2JDBC 入門 / 8 章 : エンティティ / 9 章 : JdbcManager
10 章 : S2JDBC-Gen
11 章 : SAStruts と S2JDBC の連携
アクションに JdbcManager を注入してアクション内で DB アクセス
サービスクラスを作成し、サービスクラスに JdbcManager を注入して DB アクセス
サービスクラスの基底クラスとして使える S2AbstractService クラスが提供されている
S2JDBC がサービスクラスの基底クラスを提供するのは微妙だよなぁ、という気がする nobuoka.icon
実装のための継承やん
S2JDBC-Gen の gen-service タスクで、エンティティごとに S2AbstractService を継承したサービスクラスのひな形を生成可能
トランザクション制御
AOP により、アクションやサービスのメソッドをトランザクション境界にできる
12 章 : Seasar2 が提供するユーティリティ
Servlet 関係の情報を取得するユーティリティや、文字列や配列、コレクションのユーティリティ、入出力のユーティリティなど
13 章 : ユニットテスト
14 章 : その他のプロジェクト
The Seasar Project の中のいろいろなプロジェクトを紹介する章
mobylet : Java による携帯電話向け web アプリケーション開発のためのフレームワーク 日本国内の 3 大キャリアに対応