2003年度 データベース論

Jakarta Struts (2)
ソフトウェア特論
第11回
ここでの内容



Struts でのプログラミング手法について復習する。
Struts を使ったプログラムのコンパイル方法と実
行方法について学ぶ。
「図書検索アプリケーション」に機能を追加する。
Struts でのプログラミング(復習)
1.
2.
3.
4.
5.
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 への遷移が決
まる。
return(
mapping.findForward(“success”));
<action-mappings>
<action path="/searchBook"
type="SearchBookAction"
name="searchForm"
scope="request">
<forward name="success"
path="/list.jsp"/>
</action>
</action-mappings>
図書検索アプリケーションから (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 というツールを使うと楽になる。
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 を起動すると、自動的に librarystruts1.war が展開され、Webアプリケーションが
使えるようになる。
レポート課題


1月31日まで
2題のうちから、1題を選択して解答してください。
「図書検索アプリケーション」に
詳細表示機能を追加する


どのようなプログラムを追
加する必要があるのか?
特に、どのようにリンクを
貼ればよいのか?
Struts でのページ遷移の考え方


ページ遷移 = あるページ  他のページ
ページ遷移の2つの方法
–
–

リンクをクリック
フォームのボタンを押す (前回やりました)
Struts では、すべてActionクラスを通してから画面
の遷移を行う
–
それによって、遷移の情報を struts-config.xml に記述
できるから。
追加するプログラム



リスト表示をする JSP (list.jsp) から、詳細表示を
するプログラムに処理を移す。
まず、詳細表示をするための JSP が必要
list.jsp からの要求を処理するための Action クラ
スが必要
追加する設定



プログラムを追加したら、struts-config.xml の記述が必要
Action クラスを追加するので、action 要素の追加が必要
JSP上のリンクから Action クラスを呼ぶには、globalforwards 要素の追加が必要
<global-forwards>
<forward name=“search/detail” path=“/searchBookDetail.do” />
</global-forwards>
リンクの方法 (1)
本の特定



リンクのクリックによって、どの本の詳細データを
表示するか Web サーバ側に伝える必要あり。
どの本をクリックしたか特定できる情報をパラメー
タとして設定する必要がある。
この場合、テーブルの主キーは id であるので、パ
ラメータに id を追加
/searchBookDetail.do?id=12345
リンクの方法 (2)
モデルの変更


モデルには、mapping と
いうプロパティを用意する。
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>