Webアプリケーションの方向性 データベース論 第13回
きょうの内容 JDBC を使った Servlet について学ぶ。 タグライブラリについて学ぶ。 「MVCモデル2」について学ぶ。
JDBC を使った Servlet のコンパイル 次のパッケージはJ2SEには入っていない。 javax.servlet パッケージ javax.servlet.http パッケージ Tomcat にはこのパッケージが含まれているので、classpath に含めてコンパイル Java –classpath “%CATALINA_HOME%\common\lib\servlet.jar; %HSQLDB_HOME%\lib\hsqldb.jar” JDBCTestServlet.java
TomcatにWebアプリケーションを置く %CATALINA_HOME/webapps/ に配置 ひとつのファイル (war ファイル) にまとめても良い。 test/ | |-- WEB-INF/ --- web.xml 必須 | |- classes/ Servlet ・Beanなどの クラス | |- lib/ 使用するライブラリ |-- loop.jsp JSP
Tomcat への配置 Servlet はコンパイルして、WEB-INF/classes に置く。 JDBCドライバを WEB-INF/lib に置く。 WEB-INF/ --- web.xml |- classes/ --- LoopServlet.class |- lib/ --- hsqldb.jar JDBCドライバ
Servlet と JSP の使い分け Servlet JSP Servlet から HTML を出力させると、プログラムの見通しが悪くなる。 Servlet ではプログラムに専念するのがよい。 JSP JSP でスクリプトレットを使うと、読みにくい。 JSP では、できる限りタグを使うのがよい。
MVCモデル2 (1) 概要 Webアプリケーションを構成する要素を3つに分ける。 Model View Controller
MVCモデル2 (2) Model アプリケーションのデータと必要な処理(=ビジネスロジック)をまとめたもの JavaBeansを使う
MVCモデル2 (3) View Model を表示させる部分 JSPを使う
MVCモデル2 (4) Controller Model と View を制御する Servletを使う
MVCモデル2 (5) 処理の流れ Servlet がHTTPから要求を受け取り、必要な処理をする。 データベースへのアクセスなど 処理した結果を JavaBeans にまとめる。 Servlet は JavaBeans (または、Beans をまとめたコレクション) を JSP に渡す。 JSP はタグライブラリを駆使して処理結果を出力する。 Bean のプロパティを出力する
サンプルプログラム 図書の検索を行うプログラム まずユーザがWebブラウザに検索したい本の情報を入力する。 その情報をもとに Servlet が検索処理をする。 JSPが検索結果を表示する。
JavaBeans この例では2つのBeanを用意している。 Bean には setter, getter を用意する。 複数の図書データを格納する BookList 1冊の図書データを格納する BookData Bean には setter, getter を用意する。
Servlet の処理 // データベースから検索して、結果をBeanに格納 BookList list = search(ndc, tyosya_hyouji, id, title, author, publisher); // HttpSession を取り出し、Beanを登録 HttpSession session = request.getSession(); session.setAttribute("bookList", list); // 後の処理をJSPに任せる context.getRequestDispatcher(jspFile) .forward(request, response);
JSP の処理 // HttpSession で登録した JavaBeans <jsp:useBean id="bookList" class="jp.ac.wakhok.library.BookList" scope="session" /> // タグライブラリの利用を宣言 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
タグライブラリ JSPの中で定義できる独自のタグ。 スクリプトレットを減らすことができる。
タグライブラリの例 <ul> <c:forEach var="book" items="${bookList.iterator}" > <li> <c:out value="${book.title}" /> / <c:out value="${book.author}" /> </li> </c:forEach> </ul>
Struts このプログラムに1冊の本の詳細を表示させるとしたら、どう改造したらよいのか? Struts Servlet を増やす? WebアプリケーションのController と View を担当するフレームワーク Controller がはじめから1つだけ用意されており、データの流れをXMLで記述する。