SpringフレームワークではWebフレームワークとして独自のSpringMVCが
ありますが、WebフレームワークのデファクトスタンダードのStrutsもサポート
しています。
Strutsの次のスタンダードとしてJSFやStruts2があげられるなど、Web
フレームワークでもJ2EEは今、変動期にあるといってもいいのではない
でしょうか?
ですが既存ソフト資産や安定性、技術情報量の多さもあってStrutsは
まだまだ使い続けられるでしょう。
書籍の一覧検索をSpring + Strutsに移植してみましょう。
ポイントはActionSupportクラスです。
ではコードいってみよう!
package action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.context.ApplicationContext;
import org.springframework.web.struts.ActionSupport;
import model.BookCatalog;
import action.form.BookCatalogForm;
public class BookCatalogAction extends ActionSupport{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
BookCatalogForm bookCatalogForm = (BookCatalogForm)form;
// AppricationContex取得
ApplicationContext applicationContext = getWebApplicationContext();
BookCatalog bookCatalog = (BookCatalog)applicationContext.getBean('bookCatalog');
// 書籍一覧情報の取得
List bookList = bookCatalog.getBookList('1234567890') ;
// ActionFormクラスにデータを設定する。
bookCatalogForm.setBookList(bookList);
return mapping.findForward('success');
}
}
このクラスがStrutsの場合のActionクラスに相当します。executeメソッドのシグニチャ
も全く同じです。
BookCatalogFormkクラスはStrutsのActionFormです。
前回記事でapplicationContextを切り分けたので、getWebApplicationContext()関数
でApplicationContext を生成し、DIコンテナからbookCatalogクラスを取得しています。
bookCatalog型(インターフェース)変数にはbookCatalogImplクラスのインスタンスが
入ります。この辺はSpringMVCでの場合と同じです。
※実装型に直接代入するのではなく、インターフェースに代入します。
SpringMVCの場合と異なるのはBookCatalogFormkクラス(ActionFormクラス)を
利用してJSPにデータを渡す部分です。
※BookCatalogFormkクラスはgetBookList()関数の結果のList
使用するList
こうすることでJSPにてBookCatalogFormkクラスのインスタンスからisbn番号とタイトルを
取得することが出来ます。
一覧結果を出力するJSP
------------------------------------------------------------------------
<html:html>
<head>
<title>書籍一覧(strutsバージョン)title>
head>
<body>
<div align='center' class='body'>
<h2>書籍一覧h2>
<table border='1'>
<tr class='header'>
<th align='center' width='80'>iabn番号th>
<th align='center' width='320'>タイトルth>
tr>
<logic:iterate id='item' name='bookCatalogForm' property='bookList'>
<tr class='record'>
<td align='center'>
<bean:write name='item' property='isbn' />
td>
<td align='left'>
<bean:write name='item' property='title' />
td>
tr>
logic:iterate>
table>
div>
body>
html:html>
------------------------------------------------------------------------
Strutsカスタムタグを使っていますが、JSTLの場合とほぼ同じです。
※Eclipseプロジェクトのファイル構成は専用HPに掲載してあります。