Jakarta Struts (2) ソフトウェア特論 第11回
ここでの内容 Struts でのプログラミング手法について復習する。 「図書検索アプリケーション」に機能を追加する。
Struts でのプログラミング(復習) Webブラウザからの要求は、すべて「ActionServlet」が受け取る。(用意されている) パラメータは「ActionForm Bean」へ (作成する) ビジネスロジックは「Actionクラス」で (作成する)。処理結果は Model に格納。 表示は JSP で。Strutsのタグライブラリを使う。 Action クラスやJSPを呼び出す順序やタイミングは「アクションコンフィグレーションファイル」で。
図書検索アプリケーションから (1) 検索語入力画面 タグライブラリを使って、JSP で記述する。 検索したい言葉を入力して、ボタンを押すと、“/searchBook” に処理が移る。 <html:form action="/searchBook"> <html:text property="ndc" size="20“ /> <html:submit property=“submit” value=“Go” /> </html:form>
図書検索アプリケーションから (2) 検索処理の呼び出し “/searchBook” では、まず “ActionServlet” に。 入力フィールドにある検索語は、ActionFormBean である searchForm に入る。 検索処理は SearchBookAction という Actionクラスに。 <action-mappings> <action path="/searchBook" type="SearchBookAction" name="searchForm" scope="request"> <forward name="success" path="/list.jsp"/> </action> </action-mappings>
図書検索アプリケーションから (3) 検索処理の実行 Actionクラスの execute メソッドで検索を実行 結果は Bean に格納して HttpSession に このメソッドの返値によって、list.jsp への遷移が決まる。 <action-mappings> <action path="/searchBook" type="SearchBookAction" name="searchForm" scope="request"> <forward name="success" path="/list.jsp"/> </action> </action-mappings> return( mapping.findForward(“success”));
図書検索アプリケーションから (4) 検索結果の表示 JSP の役割 タグライブラリを使って検索結果を繰り返し表示する。 <ul> <logic:iterate id="book" name="bookList" scope="session"> <li> <bean:write name="book" property="title" /> / <bean:write name="book" property="author" /> </li> </logic:iterate> </ul>
Struts と Ant Struts を動かしたり、コンパイルしたりするには、たくさんのライブラリや設定ファイルが必要になる。
Ant Java でできているビルドツール。Unix で言えばmakeのようなもの。 Javaでできているので、環境に依存しない。 標準で多くの処理が組み込みに。コンパイル、パッケージングなどが手軽に行える。 処理内容の記述は “build.xml” というXMLファイルに。
Ant の使い方 Ant の zip ファイルを開く。 環境変数 ANT_HOME を設定する。 %ANT_HOME%\bin にパスを通す。 build.xml があるフォルダに移動して、次のコマンドを実行する。 ant compile あるいは ant war
図書検索アプリケーションを動かす (1) library-struts1.jar という Jar ファイルを取得する。このファイルには、必要なソースファイルやライブラリが入っている。 Jar ファイルを開く jar xvf library-struts1.jar Ant を実行 ant compile ant war
図書検索アプリケーションを動かす (2) Ant の実行によって、build.xml があるフォルダの1つ上の階層に、 library-struts1.war というファイルができる。 このファイルに、必要なクラスやライブラリが含まれている。 このファイルを Tomcat (%CATALINA_HOME%\webapps) に置く。 Tomcat を起動すると、自動的に library-struts1.war が展開され、Webアプリケーションが使えるようになる。
レポート課題 1月31日まで 2題のうちから、1題を選択して解答してください。
「図書検索アプリケーション」に 詳細表示機能を追加する どのようなプログラムを追加する必要があるのか? 特に、どのようにリンクを貼ればよいのか?
Struts でのページ遷移の考え方 ページ遷移 = あるページ 他のページ ページ遷移の2つの方法 ページ遷移 = あるページ 他のページ ページ遷移の2つの方法 リンクをクリック フォームのボタンを押す (前回やりました) Struts では、すべてActionクラスを通してから画面の遷移を行う それによって、遷移の情報を struts-config.xml に記述できるから。
追加するプログラム リスト表示をする JSP (list.jsp) から、詳細表示をするプログラムに処理を移す。 list.jsp からの要求を処理するための Action クラスが必要
追加する設定 プログラムを追加したら、struts-config.xml の記述が必要 Action クラスを追加するので、action 要素の追加が必要 JSP上のリンクから Action クラスを呼ぶには、global-forwards 要素の追加が必要 <global-forwards> <forward name=“search/detail” path=“/searchBookDetail.do” /> </global-forwards>
リンクの方法 (1) 本の特定 リンクのクリックによって、どの本の詳細データを表示するか Web サーバ側に伝える必要あり。 どの本をクリックしたか特定できる情報をパラメータとして設定する必要がある。 この場合、テーブルの主キーは id であるので、パラメータに id を追加 /searchBookDetail.do?id=12345
リンクの方法 (2) モデルの変更 モデルには、mapping というプロパティを用意する。 Name = “id” Value = “12345” public class BookData { private Map mapping; public void setId(String id) { this.id = id; setMapping(); } public Map getMapping() { return mapping; public void setMapping() { mapping.put(“id”, id);
java.util.Map (1) 「キー」と「値」がペアになっているコレクション キーの重複はない。 実装クラスには java.util.HashMap java.util.WeakHashMap java.util.Hashtable HashMap や WeakHashMap は同期化されていない。
java.util.Map (2) // 生成 Map map = new HashMap(); // 登録 (“1000” がキー、“夏目漱石” が値) map.put(“1000”, “夏目漱石”); // キーから値を取得 String value = (String)map.get(“1000”);
リンクの方法 (3) リンクの作成 mapping の指定によって、この部分をクリックすると、自動的に id=12345 といったパラメータが付加される。 <html:link forward="search/detail" name="book" property="mapping"> <bean:write name="book" property="title" /> / <bean:write name="book" property="author" /> </html:link>