講義で使用した PowerPoint ファイル

Download Report

Transcript 講義で使用した PowerPoint ファイル

WebアプリケーションとTomcat
― これまでの復習とこれからの予習 ―
データベース論
第9回
きょうの内容


Servlet の概要について学ぶ。特に、HTTPの要
求と応答との関係に着目する。
Servlet の動かし方を学ぶ。
Webアプリケーションの仕組み (1)
3層モデル

Webアプリケーション (J2EE) の基本パターン
Webアプリケーションの仕組み (2)
Servlet と JSP

Servlet
–
–

JSP
–
–


HttpServlet を継承する Javaプログラム。
HTML を埋め込める (あまり使わないけど)
ほとんどHTML
Javaプログラムを埋め込める (あまり使わないけど)
どちらも「Webコンテナ」で動く。
普通は Servlet と JSP を組み合わせて使う。
Webアプリケーションの仕組み (3)
データベースの必要性

Webアプリケーションは「データ」を処理する。
–
–
–


図書データ
在庫リスト
掲示板の記事
「データ」は保存される (= 永続性を持つ)
データベースを使うと面倒がなくて良い。
–
データをただのファイルで保存しておくと、遅いし面倒。
Tomcat





Jakarta Project が作成している Webコンテナ
オープンソース
Servlet や JSP を動かすために必要
Apache に組み込んで使える
Tomcat 単独でも Webサーバとして使える
Tomcat をインストールするときの
注意点

環境変数はセットしましたか?
–
–


JAVA_HOME と CATALINA_HOME
それぞれ、Java と Tomcat がインストールされている
フォルダを指定する
ポート番号は変更しましたか? (実習室の場合)
インストール時に「NTサービス」にチェックを入れ
ておくとはまりやすいかも。
TomcatにWebアプリケーションを置く


%CATALINA_HOME/webapps/ に配置
ひとつのファイル (war ファイル) にまとめても良い。
test/
|
|-- WEB-INF/ --- web.xml  必須
|
|- classes/
 Servlet ・Beanなどの
クラス
|
|- lib/
 使用するライブラリ
|-- loop.jsp
 JSP
Webアプリケーションへのアクセス




どこのホストで動いている?
どのポートで動いている?
どのWebアプリケーションを動かす?
この例では
http://localhost:8080/test/loop.jsp
JSP のサンプルから (1)
特殊なタグとJavaのプログラム
<%
for (int I = 1; I <=5; I++) {
%>
<p>サンプル <%= I %></p>
<%
}
%>
JSP のサンプルから (2)
for 文の対応関係
<%
for (int I = 1; I <=5; I++) {
%>
<p>サンプル <%= I %></p>
<%
}
%>
出力例)
サンプル 1
サンプル 2
サンプル 3
サンプル 4
サンプル 5
HTTP
JSPと要求・応答

要求の処理には、request という変数を使う。
–
–
–
–

request.getMethod()
request.getRequstURI()
request.getProtocol()
request.getRemoteAddr()
応答の処理には、response という変数を使う。
JSPを使ったクエリーの処理
<%= request.getParameter("familyName") %>


getParameter というメソッドを使う。
GET でも POST でも利用できる。
JavaBeansのルール
プロパティ


Bean の持つ「属性」のこと
本をあらわす Bean であれば、次のものがプロパ
ティ
–
–
–
–
タイトル
著者
出版社
など
「本」を表す Bean
public class Book implements Serializable {
private String title;
public Book() { …..}
public String getTitle() { return title;}
public void setTitle(String t) { title = t; }
…..
}
メソッドのネーミングルールとプロパティ

title というプロパティがある
–
–

setTitle() や getTitle() というメソッドがある
–

setTitle() や getTitle() というメソッドがある。
title というフィールドがあることを意味しない。
title というプロパティがある。
メソッドがあるから、プロパティが存在する
setter と getter

setter
–
–

getter
–
–

setTitle() というスタイルのメソッド
プロパティに値をセットする
getTitle() というスタイルのメソッド
プロパティの値を得る
どちらかが存在するだけでプロパティになりうる
setter と getter とプロパティ

setter  setTitle()
–

Getter  getTitle()
–

title というプロパティに値が設定できることを示す
title というプロパティの値を取得できることを示す
プロパティは “title”
–
–
setter と getter では、先頭が大文字になる
プロパティ名では、先頭が小文字
JSP から JavaBeans を呼び出す

JSPで3つのタグを使う
–
–
–

<jsp:useBean ….. />
<jsp:getProperty ….. />
<jsp:setProperty ….. />
タグだけで書けるので、スクリプトレットの量を減ら
せる。
Servlet とは



HttpServlet というクラスを継承したクラス。必要な
メソッドをオーバーライドする。
CGIと同じように、プログラムの中から HTML を出
力できる。
JSPも、Tomcatの内部では Servlet に変換される。
Servlet のメソッド


HTTPのGETメソッドに対して  doGet
public void doGet(HttpServletRequest req,
HttpServletResponse
res)
HTTPのPOSTメソッドに対して  doPost
public void doPost(HttpServletRequest req,
HttpServletResponse
res)
HttpServletRequest と
HttpServletResponse

HttpServletRequest
–

HTTPの「要求」に対応する
HttpServletResponse
–
HTTPの「応答」に対応する
Servlet のコンパイル

次のパッケージはJ2SEには入っていない。
–
–

javax.servlet パッケージ
javax.servlet.http パッケージ
Tomcat にはこのパッケージが含まれているので、
classpath に含めてコンパイル
Java –classpath
“%CATALINA_HOME%”\common\lib\servlet.jar”
LoopServlet.java
Tomcat への配置


Servlet はコンパイルしておくこと。
WEB-INF/classes フォルダに置く。
WEB-INF/ --- web.xml
|- classes/ --- LoopServlet.class
|
|- DateServlet.class
|- lib/
web.xml の編集


Servlet を置いただけでは動かない。
web.xml を編集する必要あり。
web.xml の例 (抜粋)
<servlet>
<servlet-name>loop</servlet-name>
<servlet-class>LoopServlet</servlet-class>
</servlet>
(中略)
<servlet-mapping>
<servlet-name>loop</servlet-name>
<url-pattern>/loop</url-pattern>
</servlet-mapping>
Servlet へのアクセス

web.xml の url-pattern 要素で指定した URL に
アクセスする。
http://localhost:8080/test/loop
http://localhost:8080/test/date
Servlet と JSP の使い分け

Servlet
–

Servlet から HTML を出力させると、プログラムの見通
しが悪くなる。 Servlet ではプログラムに専念するの
がよい。
JSP
–
JSP でスクリプトレットを使うと、読みにくい。 JSP で
は、できる限りタグを出力するのがよい。
タグライブラリ


JSPの中で定義できる独自のタグ。
スクリプトレットを減らすことができる。
タグライブラリの例
<ul>
<c:forEach var="book" items="${bookList.iterator}" >
<li>
<c:out value="${book.title}" />
/
<c:out value="${book.author}" />
</li>
</c:forEach>
</ul>
MVCモデル2

Servlet がHTTPの要求を処理する。
–



データベースへのアクセスなど
処理した結果を JavaBeans にまとめる。
Servlet は JavaBeans (または、Beans をまとめ
たコレクション) を JSP に渡す。
JSP はタグライブラリを駆使して処理結果を出力
する。
–
Bean のプロパティを出力する