ディレクトリ構成
全体構成
パス | 説明 |
---|---|
src/main/java/ | javaのソースファイルが保存されているソースフォルダ |
src/main/resources/ | 設定ファイル等が保存されているソースフォルダ |
src/main/webapp | 公開用のファイルを保存するためのフォルダ(配下のWEB-INFを除く) |
src/main/webapp/WEB-INF/view/ | jspを保存するためのフォルダ |
Javaフォルダ構成(src/main/java/)
パッケージ名 | 説明 |
---|---|
action | Actionクラスを保存するためのパッケージ |
service | Serviceクラスを保持するためのパッケージ |
dto | Dtoクラスを保存するためのパッケージ |
entity | entityクラスを保存するためのパッケージ |
form | ActionFormクラスを保持するためのパッケージ |
utill | utillクラスを保持するためのパッケージ |
リソースフォルダ構成(src/main/resources/)
ファイル名 | 説明 |
---|---|
app.dicon | 他のdiconファイルをコンテナに登録するために読まれるファイル |
application_ja.properties | アプリケーション内で使用するメッセージ等を保存するファイル(日本語ロケーション) |
application.properties | アプリケーション内で使用するメッセージ等を保存するファイル |
convention.dicon | アプリケーションのネーミング規約を定義するファイル |
creator.dicon | ネーミング規約に基づいてコンポーネント定義を作成するCreatorを定義するファイル |
customizer.dicon | Creatorが作成したコンポーネント定義をカスタマイズするCustomizerを定義するファイル |
env_ut.txt | S2Unitを使った単体テスト用の環境を定義するファイル |
env.txt | 実行環境を定義するためのファイル |
jdbc.dicon | DBの接続先等の設定を記載するためのファイル |
log4j.properties | ログの出力を設定するためのファイル |
s2container.dicon | S2コンテナをカスタマイズするための設定を定義するファイル |
s2jdbc.dicon | S2JDBCの設定を記載するためのファイル |
URLとActionの関係
・URLに紐づくActionクラスのメソッドが自動で実行される。
例.http://localhost:8080/sa-struts-tutorial/addの場合
⇒「AddAction」クラスの「index()」メソッドが実行される
例.http://localhost:8080/sa-struts-tutorial/add/testの場合
⇒「AddAction」クラスの「test()」メソッドが実行される
・実行するメソッドには「@Execute」をつける。
パラメータのバリデータを実行する場合
⇒@Execute(validator = true, input = "index.jsp")
※inputにはエラー時に遷移する画面を指定。validator = trueは省略可能
パラメータのバリデータを実行しない場合
⇒@Execute(validator = false)
・メソッドは引数は設定せず、戻り値は「String」で定義して遷移先のパスを返す。
http://localhost:8080/sa-struts-tutorial/add/で実行したメソッドの戻り値がresult.jspの場合
⇒「WEB-INF->view->add->result.jsp」が開く
値の受け渡し
・画面のFormの値は「@ActionForm」をつけたフォームで受け取る。
・Formの変数はpublicで宣言する。getter/setterは不要。(privateでgetter/setterにしても良い)
・変数にアノテーションをつけてバリデータを実行(@Executeで指定)可能。
@Required ⇒ 必須チェック
@IntegerType ⇒ 数字チェック
DI
・クラス全般に「@Resource」をつける。@ResourceはDIする意味。
・コンポーネントスキャン(DIコンテナに登録すること)の範囲は「convention.dicon」で管理。
・シングルトン?
⇒ SAStrutsはリクエスト単位で管理。問題なくクラス変数を使用できる
サンプル
Action
public class AddAction { public Integer result; @ActionForm // Formにはこれをつける @Resource // クラスはDIして使用する protected AddForm addForm; @Execute(validator = false) public String index() { return "index.jsp"; } @Execute(input = "index.jsp") // バリデータを実行する。エラー時にindex.jspを開く public String submit() { result = Integer.valueOf(addForm.arg1) + Integer.valueOf(addForm.arg2); return "result.jsp"; } }
Form
public class AddForm { @Required @IntegerType public String arg1; @Required @IntegerType public String arg2; }
jsp(入力画面)
<%@page pageEncoding="UTF-8"%> <html> <head> <title>Tutorial: Add</title> <link rel="stylesheet" type="text/css" href="${f:url('/css/sa.css')}" /> </head> <body> <h1>Tutorial: Add</h1> <html:errors/> <s:form> <html:text property="arg1"/> + <html:text property="arg2"/> <input type="submit" name="submit" value="サブミット"/> </s:form> </body> </html>
jsp(結果画面)
<%@page pageEncoding="UTF-8"%> <html> <head> <title>Tutorial: Add</title> <link rel="stylesheet" type="text/css" href="${f:url('/css/sa.css')}" /> </head> <body> <h1>Tutorial: Add</h1> <html:errors/> ${f:h(arg1)} + ${f:h(arg2)} = ${f:h(result)}<br /> </body> </html>