SpringMVCでは、Web.xmlのディレク
ティブで指定した文字列-servlet、以下の例では
bookmng-2-servlet.xml
がSpringMVCの読み込む
ファイルになります。マッピングする訳ですね。。


Web.xml
----------------------------------------------------------------------------


'-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'

'http://java.sun.com/dtd/web-app_2_3.dtd'>

bookmng-2

org.springframework.web.servlet.DispatcherServlet

1

bookmng-2

*.html

----------------------------------------------------------------------------


以下の設定ファイルですべてbeanインスタンスの設定は解決されます。

bookDaoはdataSourceを参照し、bookCatalogはbookDaoを参照します。そして
indexControllerはbookCatalogを参照します。このようにして参照の連鎖ができます。


bookmng-2-servlet.xml
----------------------------------------------------------------------------

class='org.springframework.jdbc.datasource.DriverManagerDataSource'>

org.postgresql.Driver

jdbc:postgresql://192.168.1.11:5432/BookMng

postgres

c079388a


----------------------------------------------------------------------------


BookCatalog型(インターフェース)にDIコンテナからで実際にはdao.BookDaoImplクラス
のオブジェクトが代入されることに注目してください。

このようにインターフェースを介して実装(bean)をインジェクションすることでコードには
実装の型を記述しません。実装型ではなくインターフェースにインスタンスを代入する
メリットは読者の方はお分かりでしょう!

下記のIndexControllerの例では、BookCatalog型に対してBookCatalogImplインスタンス
を代入しています。(SpringMVCによって自動的にセットされます)

package controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.BookCatalog;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import model.Book;

public class IndexController implements Controller{

private BookCatalog bookCatalog;

//セッタインジェクション用
public void setBookCatalog(BookCatalog bookCatalog) {
this.bookCatalog = bookCatalog;
}

public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {

// 書籍一覧情報を取得(入力されたisbn番号を指定する)
//→現在Web入力画面がないのではとりあえず固定
List itemList = this.bookCatalog.getBookList('4797311126');


//Listに追加してみる。
itemList.add(new Book('4756100503' , 'オブジェクト指向入門')) ;


// モデルの作成
Map model = new HashMap();
model.put('itemList', itemList);

// 戻り値となるModelAndViewインスタンスを作成
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName('/WEB-INF/jsp/index.jsp');
modelAndView.addAllObjects(model);

return modelAndView;
}
}
 

package model ;

import java.util.List;

public interface BookCatalog {

List getBookList(String isbn);
}

 

package model ;

import dao.BookDao;
import java.util.List;

public class BookCatalogImpl implements BookCatalog{

private BookDao bookDao;

public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public List getBookList(String isbn) {
return this.bookDao.getBookList(isbn);
}
}


※プロジェクト構成ファイルについては専用HPを参照ください。

さて、Webシステムになるとやはり便利なJAVA IDEを利用した方が効率的です。
等連載ではとりあえずEclipse3.2を使っていくことにします。

WebフレームワークはSpringMVC、Struts、Struts+Springサポート等を考えています。

次回は入力画面を作っていくことにします。