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サポート等を考えています。
次回は入力画面を作っていくことにします。