• No results found

Java JSP JavaBeans MVC JSTL JSP 2.0 Expression Language

N/A
N/A
Protected

Academic year: 2019

Share "Java JSP JavaBeans MVC JSTL JSP 2.0 Expression Language"

Copied!
99
0
0

Loading.... (view fulltext now)

Full text

(1)

1 © Marty Hall, http://www.coreservlets.com

Java

サーバサイド

サーバサイド

サーバサイド

サーバサイド

特別技術セミナー

特別技術セミナー

特別技術セミナー

特別技術セミナー

JSP

Marty Hall

coreservlets.com, Inc.

CasaReal, Inc.

http://www.casareal.co.jp

Agenda

なぜ

なぜ

なぜ

なぜ

JSP

が必要なのか

が必要なのか

が必要なのか

が必要なのか

JSP

が動く仕組み

が動く仕組み

が動く仕組み

が動く仕組み

JSP

の利点

の利点

の利点

の利点

JSP

からの

からの

からの

からの

Java

コードの呼び出し

コードの呼び出し

コードの呼び出し

コードの呼び出し

JSP

から生成されるサーブレットの管理

から生成されるサーブレットの管理

から生成されるサーブレットの管理

から生成されるサーブレットの管理

ファイルのインクルード

ファイルのインクルード

ファイルのインクルード

ファイルのインクルード

JavaBeans

の使用

の使用

の使用

の使用

(2)

JSP 特別講座

3 www.coreservlets.com

なぜ

なぜ

なぜ

なぜ

JSP

が必要か

が必要か

が必要か

が必要か

The Need for JSP

サーブレットを使用すると以下の事が簡単

サーブレットを使用すると以下の事が簡単

サーブレットを使用すると以下の事が簡単

サーブレットを使用すると以下の事が簡単

Form

データの読み込み

HTTP

リクエストヘッダの読み込み

HTTP

ステータスコードとレスポンスヘッダの設定

クッキーとセッション管理の使用

サーブレット間でのデータ共有

リクエスト間のデータの記憶

しかし、以下のことは非常に面倒

しかし、以下のことは非常に面倒

しかし、以下のことは非常に面倒

しかし、以下のことは非常に面倒

HTML

を生成における

println

の使用

HTML

の保守

www.coreservlets.com

JSP

フレームワーク

フレームワーク

フレームワーク

フレームワーク

The JSP Framework

アイデア

アイデア

アイデア

アイデア

:

ページのほとんどで普通の

HTML

を使用

サーブレット・コードのみ特別タグで記述

JSP

ページ全体が

1

度だけサーブレットに変換され、

実際にリクエスト毎に実行されるのはそのサーブレ

ット

:

JSP

Thanks for ordering

<I><%= request.getParameter("title") %></I>

URL

http://host/OrderConfirmation.jsp

?title=Core+Web+Programming

結果

(3)

JSP 特別講座

5 www.coreservlets.com

JSP

の利点

の利点

の利点

の利点

Benefits of JSP

技術的に

技術的に

技術的に

技術的に

JSP

は、サーブレットができないこ

は、サーブレットができないこ

は、サーブレットができないこ

は、サーブレットができないこ

とはできない。しかし、

とはできない。しかし、

とはできない。しかし、

とはできない。しかし、

JSP

は以下のことを簡

は以下のことを簡

は以下のことを簡

は以下のことを簡

単にする。

単にする。

単にする。

単にする。

:

HTML

の記述

HTML

の読み込み、保守

JSP

は次のことを可能にする

は次のことを可能にする

は次のことを可能にする

は次のことを可能にする

:

Allaire HomeSite

Macromedia DreamWeaver

Adobe

GoLive

などの標準的な

HTML

ツールの使用

.

HTML

のレイアウトとプログラミングの分担

JSP

は以下のことを推奨する:

は以下のことを推奨する:

は以下のことを推奨する:

は以下のことを推奨する:

内容を作るコード(

Java

)と見せるコード(

HTML

)の分離

競合テクノロジーに対する

競合テクノロジーに対する

競合テクノロジーに対する

競合テクノロジーに対する

JSP の優位性

の優位性

の優位性

の優位性

Advantages of JSP Over Competing Technologies

ASP

または

または

または

または

ColdFusion

と比べて

と比べて

と比べて

と比べて

動的部分の言語が優れている

様々なサーバ、オペレーティング・システムに対し

可搬性がある

PHP

と比べて

と比べて

と比べて

と比べて

動的部分の言語が優れている

ツールのサポートが優れている

サーブレット単体利用と比べて

サーブレット単体利用と比べて

サーブレット単体利用と比べて

サーブレット単体利用と比べて

HTML

の生成が簡単

(4)

JSP 特別講座

7 www.coreservlets.com

JSP

の優位性(続き)

の優位性(続き)

の優位性(続き)

の優位性(続き)

Advantages of JSP (Continued)

Velocity

や、

や、

や、

や、

WebMacro

と比べて

と比べて

と比べて

と比べて

標準技術

ブラウザ内のクライアントサイド

ブラウザ内のクライアントサイド

ブラウザ内のクライアントサイド

ブラウザ内のクライアントサイド

JavaScript

と比べて

と比べて

と比べて

と比べて

JSP

の能力とほとんど重複しないが、

• クライアントではなく、サーバを管理する

• 豊富な言語

サーバサイド

サーバサイド

サーバサイド

サーバサイド

JavaScript

と比べて

と比べて

と比べて

と比べて

(

LiveWire

BroadVision

JRun)

豊富な言語

静的

静的

静的

静的

HTML

に対して

に対して

に対して

に対して

動的機能

動的な表現は“全部か全くなし”だけではなくなった。(静

的部分を残してほんの一部を動的に表現する事が可能となっ

た)

www.coreservlets.com

環境の設定

環境の設定

環境の設定

環境の設定

Setting Up Your Environment

以下設定は不要

以下設定は不要

以下設定は不要

以下設定は不要

CLASSPATH

の設定

の設定

の設定

の設定

コードのコンパイル

コードのコンパイル

コードのコンパイル

コードのコンパイル

名称の衝突を避けるためのパッケージ名の使用

名称の衝突を避けるためのパッケージ名の使用

名称の衝突を避けるためのパッケージ名の使用

名称の衝突を避けるためのパッケージ名の使用

特別なディレクトリへの

特別なディレクトリへの

特別なディレクトリへの

特別なディレクトリへの

JSP

ページの配置

ページの配置

ページの配置

ページの配置

install_dir

\webapps\ROOT\ (HTML

and

JSP -- Tomcat)

install_dir

\servers\default\default-app (JRun)

サーバによっては

JSP

ページ用の

Web

階層を用意しているも

のもある。ただし、

Tomcat

3、スタンドアロンの

Jrun

には

ない。

JSP

ページを動かすための特別な

ページを動かすための特別な

ページを動かすための特別な

ページを動かすための特別な

URL

の使用

の使用

の使用

の使用

注意

注意

注意

注意

JSP

ページによって使用される通常の

Java

クラスでは、

CLASSPATH

、インストール・ディレクトリ等の規則は当て

(5)

JSP 特別講座

9 www.coreservlets.com

Example

<!DOCTYPE HTML PUBLIC

"-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML>

<HEAD>

<TITLE>JSP Expressions</TITLE>

<META NAME="author" CONTENT="Marty Hall"> <META NAME="keywords"

CONTENT="JSP,expressions,JavaServer,Pages,servlets"> <META NAME="description"

CONTENT="A quick example of JSP expressions."> <LINK REL=STYLESHEET

HREF="JSP-Styles.css" TYPE="text/css">

</HEAD>

例(続き)

例(続き)

例(続き)

例(続き)

Example (Continued)

<BODY>

<H2>JSP Expressions</H2>

<UL>

<LI>Current time: <%= new java.util.Date() %>

<LI>Your hostname: <%= request.getRemoteHost() %>

<LI>Your session ID: <%= session.getId() %>

<LI>The <CODE>testParam</CODE> form parameter:

<%= request.getParameter("testParam") %>

</UL>

(6)

JSP 特別講座

11 www.coreservlets.com

例(結果)

例(結果)

例(結果)

例(結果)

Example Result

配置場所が以下である場合

配置場所が以下である場合

配置場所が以下である場合

配置場所が以下である場合

C:\jakarta-tomcat-4.0\webapps\ROOT\Expressions.jsp

または

C:\Program Files\Allaire\JRun\servers\default\

default-app\Expressions.jsp

URL

は以下のようになる

は以下のようになる

は以下のようになる

は以下のようになる

http://localhost/Expressions.jsp

www.coreservlets.com

一番多い勘違い:

一番多い勘違い:

一番多い勘違い:

一番多い勘違い:

JSP

がサーバサイド技術であることを忘れ

がサーバサイド技術であることを忘れ

がサーバサイド技術であることを忘れ

がサーバサイド技術であることを忘れ

Most Common Misunderstanding::::Forgetting JSP is Server-Side Technology

良くある質問

良くある質問

良くある質問

良くある質問

HTML

でコレコレができないが、

JSP

ならできる?

なぜこの質問は意味がないのか?

なぜこの質問は意味がないのか?

なぜこの質問は意味がないのか?

なぜこの質問は意味がないのか?

JSP

は完全にサーバ上で動作する

クライアント

(

ブラウザ

)

で扱えるコンテンツを返るわけでは

ない

同じような質問

同じような質問

同じような質問

同じような質問

どうやって通常のアプレットを

JSP

ページに入れるのか?

答え

:

クライントに

<APPLET…>

タグを送信する

どうやって

JSP

ページに画像を入れるのか?

答え

:

クライアントに

<IMG …>

タグを送信する

JavaScript

Acrobat

Shockwave

などをどうやって使うか?

(7)

JSP 特別講座

13 www.coreservlets.com

2

番目に多い勘違い:

番目に多い勘違い:

番目に多い勘違い:

番目に多い勘違い:

サーブレットへの変換

サーブレットへの変換

サーブレットへの変換

サーブレットへの変換

/

リクエスト時の混同

リクエスト時の混同

リクエスト時の混同

リクエスト時の混同

2nd Most Common Misunderstanding::::Translation/Request Time Confusion

JSP

ページからサーブレットへの変換時にページは

ページからサーブレットへの変換時にページは

ページからサーブレットへの変換時にページは

ページからサーブレットへの変換時にページは

どうなっているのか?

どうなっているのか?

どうなっているのか?

どうなっているのか?

JSP

構造はサーブレットコードに変換される

リクエスト時に何が起こるのか?

リクエスト時に何が起こるのか?

リクエスト時に何が起こるのか?

リクエスト時に何が起こるのか?

サーブレットコードが実行される。リクエスト時に

JSP

の変

換は行われない。リクエスト時にオリジナルの

JSP

ページは

完全に無視される。つまり、変換結果のサーブレットのみが

使用される。

JSP

ページからサーブレットへの変換は

ページからサーブレットへの変換は

ページからサーブレットへの変換は

ページからサーブレットへの変換は

いつ行われるか?

いつ行われるか?

いつ行われるか?

いつ行われるか?

典型的には、変更後に

JSP

ページが初めてアクセスされた時

。実際にはインストール時にデベロッパーが全ての

JSP

ペー

ジをテストしているので、実ユーザからのアクセス時に変換

されることがあってはならない。

ページ変換はリクエスト毎には行われない。

JSP

のライフサイクル

のライフサイクル

のライフサイクル

のライフサイクル

The JSP Lifecycle

Yes Yes Yes Yes Yes Yes

doGet ((((またはまたはまたはまたは 同等の

同等の同等の

同等の) 呼び出し呼び出し呼び出し呼び出し

No Yes No Yes No Yes

init (または同等または同等または同等または同等 の

のの

) 呼び出し呼び出し呼び出し呼び出し

No Yes No Yes No Yes

サーブレット サーブレットサーブレット サーブレット のののの インスタンス化 インスタンス化インスタンス化 インスタンス化 およびサーバの およびサーバのおよびサーバの およびサーバの メモリへのロー メモリへのローメモリへのロー メモリへのロー ド

ドド ド

No Yes No No No Yes

サーブレットの サーブレットのサーブレットの サーブレットの コンパイル終了 コンパイル終了コンパイル終了 コンパイル終了

No Yes No No No Yes

JSP ページがページがページがページが サーブレットに サーブレットにサーブレットに サーブレットに 変換

変換変換 変換

Request #6 Request

#5

Request #4 Request

#3

Request #2 Request

#1

(8)

JSP 特別講座

15 www.coreservlets.com

JSP/

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

JSP/Servlets in the Real World

ofoto.com:

デジタル写真と

デジタル写真と

デジタル写真と

デジタル写真と

フィルム写真の

フィルム写真の

フィルム写真の

フィルム写真の

印刷と管理

印刷と管理

印刷と管理

印刷と管理

www.coreservlets.com

JSP/

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

JSP/Servlets in the Real World

First USA Bank:

世界最大のクレジットカード発行元

世界最大のクレジットカード発行元

世界最大のクレジットカード発行元

世界最大のクレジットカード発行元

(9)

JSP 特別講座

17 www.coreservlets.com

JSP/

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

JSP/Servlets in the Real World

デルタ航空

デルタ航空

デルタ航空

デルタ航空

: Web

サイト全体(リアルタイムなスケジ

サイト全体(リアルタイムなスケジ

サイト全体(リアルタイムなスケジ

サイト全体(リアルタイムなスケジ

ュール情報も含む)

ュール情報も含む)

ュール情報も含む)

ュール情報も含む)

JSP/

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

JSP/Servlets in the Real World

American Century Investments: 200

万人の投資家を

万人の投資家を

万人の投資家を

万人の投資家を

持ち、

持ち、

持ち、

持ち、

900

億ドルの管理する

億ドルの管理する70

億ドルの管理する

億ドルの管理する

70

70

70以上のミューチュア

以上のミューチュア

以上のミューチュア

以上のミューチュア

(10)

JSP 特別講座

19 www.coreservlets.com

JSP/

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

サーブレットの実際の使用例

JSP/Servlets in the Real World

Excite:

インターネット・ポータルのトップ5の一つ

インターネット・ポータルのトップ5の一つ

インターネット・ポータルのトップ5の一つ

インターネット・ポータルのトップ5の一つ

(インターネットで最も混雑しているサイトのトップ

(インターネットで最も混雑しているサイトのトップ

(インターネットで最も混雑しているサイトのトップ

(インターネットで最も混雑しているサイトのトップ

10に入る)

10に入る)

10に入る)

10に入る)

© Marty Hall, http://www.coreservlets.com

JSP

スクリプト要素

スクリプト要素

スクリプト要素

スクリプト要素

(11)

JSP 特別講座

21 www.coreservlets.com

JSP

構成の使い方

構成の使い方

構成の使い方

構成の使い方

Uses of JSP Constructs

スクリプト要素が直接サーブレットコー

スクリプト要素が直接サーブレットコー

スクリプト要素が直接サーブレットコー

スクリプト要素が直接サーブレットコー

ドを

ドを

ドを

ドを

呼ぶ

呼ぶ

呼ぶ

呼ぶ

スクリプト要素がサーブレットコードを

スクリプト要素がサーブレットコードを

スクリプト要素がサーブレットコードを

スクリプト要素がサーブレットコードを

間接的に呼ぶ

間接的に呼ぶ

間接的に呼ぶ

間接的に呼ぶ

(ユーティリティークラスを通して)

(ユーティリティークラスを通して)

(ユーティリティークラスを通して)

(ユーティリティークラスを通して)

Beans

カスタムタグ

カスタムタグ

カスタムタグ

カスタムタグ

Bean

もしくはカスタムタグを含む

もしくはカスタムタグを含む

もしくはカスタムタグを含む

もしくはカスタムタグを含む

サーブレット

サーブレット

サーブレット

サーブレット

/JSP

の組み合わせ

の組み合わせ

の組み合わせ

の組み合わせ

(MVC)

単純な 単純な 単純な 単純な アプリケーション アプリケーション アプリケーション アプリケーション

複雑な 複雑な複雑な 複雑な アプリケーション アプリケーション アプリケーション アプリケーション

設計のストラテジー:

設計のストラテジー:

設計のストラテジー:

設計のストラテジー:

JSP

ページ内の

ページ内の

ページ内の

ページ内の

Java

コードを制限す

コードを制限す

コードを制限す

コードを制限す

Design Strategy: Limit Java Code in JSP Pages

2つのオプション

つのオプション

つのオプション

つのオプション

JSP

ページに直接

25

行の

Java

コードを記述する

25

行の

Java

コードを別の

Java

クラスに記述し、

JSP

ページに

はそのクラスを起動する

1

行を記述する

なぜ

なぜ

なぜ

なぜ

2

番目のオプションの方が良いのか?

番目のオプションの方が良いのか?

番目のオプションの方が良いのか?

番目のオプションの方が良いのか?

開発:

開発:

開発:

開発:

HTML

環境ではなく、

Java

環境 (エディタや

IDE

)で

別のクラスを記述する

デバッグ:

デバッグ: 構文が間違っていれば、コンパイル時に判明する

デバッグ:

デバッグ:

簡単な

print

文で確認可能

テスト:

テスト:

テスト:

テスト:

1

万回のテストをするループのテストルーチンを記

述し、

(12)

JSP 特別講座

23 www.coreservlets.com

JSP

JSP Expressions

フォーマット

フォーマット

フォーマット

フォーマット

<%=

Java Expression

%>

結果

結果

結果

結果

式が評価され、文字列に変換され、

JSP

ページ内で発生した

場所で

HTML

ページに配置される

つまり、

out.print

内の

_jspService

に配置された式

現在時間

: <%= new java.util.Date() %>

ホスト名

: <%= request.getRemoteHost() %>

XML-

対応の構文

対応の構文

対応の構文

対応の構文

<jsp:expression>

Java Expression

</jsp:expression>

Tomcat

3 では

XML

バージョンはサポートされていない。

JSP 1.2

サーバ以前では、サーバはサポートする必要がなかっ

た。

一つのページに異なるバージョンを混用することはできない

JSP 特別講座

24 www.coreservlets.com

JSP

と サーブレットの対応

サーブレットの対応

サーブレットの対応

サーブレットの対応

JSP/Servlet Correspondence

オリジナル

オリジナル

オリジナル

オリジナル

JSP

<H1>A Random Number</H1>

<%= Math.random() %>

結果として生成されるサーブレットコードの一

結果として生成されるサーブレットコードの一

結果として生成されるサーブレットコードの一

結果として生成されるサーブレットコードの一

public void _jspService(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");

HttpSession session = request.getSession(true); JspWriter out = response.getWriter();

out.println("<H1>A Random Number</H1>");

out.println(Math.random());

...

(13)

JSP 特別講座

25 www.coreservlets.com

JSP

式の使用例

式の使用例

式の使用例

式の使用例

Example Using JSP Expressions

<BODY>

<H2>JSP Expressions</H2> <UL>

<LI>Current time: <%= new java.util.Date() %> <LI>Your hostname: <%= request.getRemoteHost() %> <LI>Your session ID: <%= session.getId() %>

<LI>The <CODE>testParam</CODE> form parameter: <%= request.getParameter("testParam") %> </UL>

</BODY>

定義済み定数

定義済み定数

定義済み定数

定義済み定数

Predefined Variables

request

リクエストを表す

HttpServletRequest (service/doGet

の第

1

引数

)

response

レスポンスを表す

HttpServletResponse (service/doGet

の第

2

)

out

出力をクライアントに送る

Writer

JspWriter

タイプのバッファバージョン)

session

リクエストに関連付けられている

HttpSession

(ただし、ペー

(14)

JSP 特別講座

27 www.coreservlets.com

JSP

スクリプレット

スクリプレット

スクリプレット

スクリプレット

JSP Scriptlets

フォーマット

フォーマット

フォーマット

フォーマット

<%

Java Code

%>

結果

結果

結果

結果

Java

コード がサーブレットの

_jspService

に挿入され

<%

String queryData = request.getQueryString();

out.println("Attached GET data: " + queryData);

%>

<% response.setContentType("text/plain"); %>

XML

対応の構文

対応の構文

対応の構文

対応の構文

<jsp:scriptlet>

Java Code

</jsp:scriptlet>

JSP 特別講座

28 www.coreservlets.com

JSP

とサーブレットの対応

とサーブレットの対応

とサーブレットの対応

とサーブレットの対応

JSP/Servlet Correspondence

オリジナル

オリジナル

オリジナル

オリジナル

JSP

<%= foo() %>

<% bar(); %>

結果として生成されるサーブレットコードの一

結果として生成されるサーブレットコードの一

結果として生成されるサーブレットコードの一

結果として生成されるサーブレットコードの一

public void _jspService(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");

HttpSession session = request.getSession(true); JspWriter out = response.getWriter();

out.println(foo());

bar();

...

(15)

JSP 特別講座

29 www.coreservlets.com

JSP

スクリプレットの使用例

スクリプレットの使用例

スクリプレットの使用例

スクリプレットの使用例

Example Using JSP Scriptlets

<!DOCTYPE HTML PUBLIC

"-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML>

<HEAD>

<TITLE>Color Testing</TITLE>

</HEAD>

<%

String bgColor = request.getParameter("bgColor"); boolean hasExplicitColor;

if (bgColor != null) { hasExplicitColor = true; } else {

hasExplicitColor = false; bgColor = "WHITE";

} %>

JSP

スクリプレットの使用例(続

スクリプレットの使用例(続

スクリプレットの使用例(続

スクリプレットの使用例(続

き)

き)

き)

き)

Example Using JSP Scriptlets (Continued) <BODY BGCOLOR="<%= bgColor %>">

<H2 ALIGN="CENTER">Color Testing</H2>

<%

if (hasExplicitColor) {

} else {

} %>

</BODY>

(16)

JSP 特別講座

31 www.coreservlets.com

JSP

スクリプレット:結果

スクリプレット:結果

スクリプレット:結果

スクリプレット:結果

JSP Scriptlets: Results

JSP 特別講座

32 www.coreservlets.com

スクリプレットを使用して、

スクリプレットを使用して、

スクリプレットを使用して、

スクリプレットを使用して、

JSP

ファイルの一部を条件つきにする

ファイルの一部を条件つきにする

ファイルの一部を条件つきにする

ファイルの一部を条件つきにする

Using Scriptlets to Make Parts of the JSP File Conditional

ポイント

ポイント

ポイント

ポイント

スクリプレットは、記述のとおりサーブレットに

挿入される

完全な

Java

の表現である必要はない

ただし、完全な表現であれば、判りやすく、保守が

<% if (Math.random() < 0.5) { %> Have a <B>nice</B> day!

<% } else { %>

Have a <B>lousy</B> day! <% } %>

変換された結果

変換された結果

変換された結果

変換された結果

if (Math.random() < 0.5) {

out.println("Have a <B>nice</B> day!");

} else {

out.println("Have a <B>lousy</B> day!");

(17)

JSP 特別講座

33 www.coreservlets.com

JSP

宣言

宣言

宣言

宣言

JSP Declarations

フォーマット

フォーマット

フォーマット

フォーマット

<%!

Java Code

%>

結果

結果

結果

結果

サーブレットのクラス定義にコードが書き込まれる。

既存のメソッド外。

<%! private int someField = 5; %>

<%! private void someMethod(...) {...} %>

設計の考慮

設計の考慮

設計の考慮

設計の考慮

フィールドは明らかに便利。メソッドは通常別の

Java

クラス

の中で定義する方が良い。

XML-

対応の構文

対応の構文

対応の構文

対応の構文

<jsp:declaration>

Java Code

</jsp:declaration>

JSP

とサーブレットの対応

とサーブレットの対応

とサーブレットの対応

とサーブレットの対応

JSP/Servlet Correspondence

オリジナル

オリジナル

オリジナル

オリジナル

JSP

<H1>Some Heading</H1>

<%!

private String randomHeading() {

return(

"

<H2>

"

+ Math.random() +

"

</H2>

"

);

}

%>

(18)

JSP 特別講座

35 www.coreservlets.com

JSP

とサーブレットの対応

とサーブレットの対応

とサーブレットの対応

とサーブレットの対応

JSP/Servlet Correspondence

結果として生成されるサーブレットコードの一

結果として生成されるサーブレットコードの一

結果として生成されるサーブレットコードの一

結果として生成されるサーブレットコードの一

public class xxxx implements HttpJspPage {

private String randomHeading() {

return("<H2>" + Math.random() + "</H2>"); }

public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");

HttpSession session = request.getSession(true); JspWriter out = response.getWriter();

out.println("<H1>Some Heading</H1>");

out.println(randomHeading());

... } ... }

www.coreservlets.com

JSP

宣言の使用例

宣言の使用例

宣言の使用例

宣言の使用例

Example Using JSP Declarations

<!DOCTYPE HTML PUBLIC

"-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE>JSP Declarations</TITLE>

<LINK REL=STYLESHEET

HREF="JSP-Styles.css" TYPE="text/css">

</HEAD>

<BODY>

<H1>JSP Declarations</H1>

<%! private int accessCount = 0; %>

<H2>Accesses to page since server reboot:

<%= ++accessCount %></H2>

(19)

JSP 特別講座

37 www.coreservlets.com

JSP

宣言:結果

宣言:結果

宣言:結果

宣言:結果

JSP Declarations: Result

任意の異なるクライアントが計

任意の異なるクライアントが計

任意の異なるクライアントが計

任意の異なるクライアントが計

15

回訪問した後

回訪問した後

回訪問した後

回訪問した後

JSP page

ディレクティブ:

ディレクティブ:

ディレクティブ:

ディレクティブ:

生成されるサーブレットの

生成されるサーブレットの

生成されるサーブレットの

生成されるサーブレットの

構造を指定する

構造を指定する

構造を指定する

構造を指定する

(20)

JSP 特別講座

39 www.coreservlets.com

インポート属性

インポート属性

インポート属性

インポート属性

The import Attribute

フォーマット

フォーマット

フォーマット

フォーマット

<%@ page import="package.class" %>

<%@ page import="package.class1,...,package.classN" %>

目的

目的

目的

目的

サーブレット定義の先頭にインポート文を生成する

注意

注意

注意

注意

JSP

ページはサーバのどこにでも配置できるが、

JSP

ページが使用するクラスは通常のサーブレットのデ

ィレクトリに配置する必要がある。

Tomcat

の場合、如何に配置する:

install_dir\webapps\ROOT\WEB-INF\classes or

...\ROOT\WEB-INF\classes\directoryMatchingPackage

• JSP が使用するユーティリティなどは、パッケージにいれる!

www.coreservlets.com

インポート属性の例

インポート属性の例

インポート属性の例

インポート属性の例

Example of import Attribute

...

<BODY>

<H2>The import Attribute</H2> <%-- JSP page directive --%>

<%@ page import="java.util.*,coreservlets.*" %>

<%-- JSP Declaration --%> <%!

private String randomID() {

int num = (int)(Math.random()*10000000.0); return("id" + num);

}

(21)

JSP 特別講座

41 www.coreservlets.com

インポート属性の例(続き)

インポート属性の例(続き)

インポート属性の例(続き)

インポート属性の例(続き)

Example of import Attribute (cont)

<%-- JSP Scriptlet --%> <%

Cookie[] cookies = request.getCookies(); String oldID =

ServletUtilities.getCookieValue(cookies, "userID", NO_VALUE); String newID;

if (oldID.equals(NO_VALUE)) { newID = randomID();

} else {

newID = oldID; }

LongLivedCookie cookie = new LongLivedCookie("userID", newID); response.addCookie(cookie);

%>

<%-- JSP Expressions --%>

This page was accessed at <%= new Date() %> with a userID cookie of <%= oldID %>.

</BODY></HTML>

インポート属性の例:結果

インポート属性の例:結果

インポート属性の例:結果

インポート属性の例:結果

Example of import Attribute: Result

最初のアクセス

最初のアクセス

最初のアクセス

最初のアクセス

(22)

JSP 特別講座

43 www.coreservlets.com

contentType

属性

属性

属性

属性

The contentType Attribute

フォーマット

フォーマット

フォーマット

フォーマット

<%@ page contentType="MIME-Type" %>

<%@ page contentType="MIME-Type;

charset=Character-Set" %>

目的

目的

目的

目的

JSP

ページの結果のサーブレットから生成されるペ

ージの

MIME

タイプを指定する

注意

注意

注意

注意

属性値をリクエスト時に処理できない

レスポンスヘッダ セクションの

「良く使われる

MIME

タイプの表」を参照

www.coreservlets.com

contentType

を使用してテキスト・

を使用してテキスト・

を使用してテキスト・

を使用してテキスト・

ドキュメントを生成する

ドキュメントを生成する

ドキュメントを生成する

ドキュメントを生成する

Using contentType to Generate Plain Text Documents

<!DOCTYPE HTML PUBLIC

"-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML> <HEAD>

<TITLE>The contentType Attribute</TITLE>

</HEAD> <BODY>

<H2>The contentType Attribute</H2>

<%@ page contentType="text/plain" %>

This should be rendered as plain text, <B>not</B> as HTML.

</BODY>

(23)

JSP 特別講座

45 www.coreservlets.com

ネットスケープ内のテキスト・ドキ

ネットスケープ内のテキスト・ドキ

ネットスケープ内のテキスト・ドキ

ネットスケープ内のテキスト・ドキ

ュメント

ュメント

ュメント

ュメント

Plain Text Documents in Netscape

Excel

スプレッドシートを生成す

スプレッドシートを生成す

スプレッドシートを生成す

スプレッドシートを生成す

Generating Excel Spreadsheets

<%@ page contentType="application/vnd.ms-excel" %>

<%-- Note that there are tabs,

not spaces, between columns. --%>

1997 1998 1999 2000 2001 (Anticipated)

(24)

JSP 特別講座

47 www.coreservlets.com

条件付きで

条件付きで

条件付きで

条件付きで

Excel

スプレッドシート

スプレッドシート

スプレッドシート

スプレッドシート

を生成する

を生成する

を生成する

を生成する

Generating Excel Spreadsheets Conditionally

Excel

HTML

の表を解釈できる

の表を解釈できる

の表を解釈できる

の表を解釈できる

リクエストパラメータに基づいて

MIME

タイプを変

page

ディレクティブは使用不可

ディレクティブは使用不可

ディレクティブは使用不可

ディレクティブは使用不可

リクエスト時の値を使用しない

ソリューション

ソリューション

ソリューション

ソリューション

定義済みのリクエスト変数を使用し、

setContentType

を呼ぶ

<%

if (someCondition) {

response.setContentType("type1");

} else {

response.setContentType("type2");

}

%>

www.coreservlets.com

条件付きで

条件付きで

条件付きで

条件付きで

Excel

スプレッドシー

スプレッドシー

スプレッドシー

スプレッドシー

トを生成する

トを生成する

トを生成する

トを生成する

Generating Excel Spreadsheets Conditionally

<%

String format = request.getParameter("format");

if ((format != null) && (format.equals("excel"))) { response.setContentType("application/vnd.ms-excel"); }

%>

<!DOCTYPE ...> <HTML><HEAD>

<TITLE>Comparing Apples and Oranges</TITLE> <LINK REL=STYLESHEET

HREF="JSP-Styles.css"

TYPE="text/css"> </HEAD>

<BODY> <CENTER>

(25)

JSP 特別講座

49 www.coreservlets.com

条件付きで

条件付きで

条件付きで

条件付きで

Excel

スプレッドシー

スプレッドシー

スプレッドシー

スプレッドシー

トを生成する(続き)

トを生成する(続き)

トを生成する(続き)

トを生成する(続き)

Generating Excel Spreadsheets Conditionally (Continued)

<TABLE BORDER=1>

<TR><TH></TH><TH>Apples<TH>Oranges

<TR><TH>First Quarter<TD>2307<TD>4706 <TR><TH>Second Quarter<TD>2982<TD>5104

<TR><TH>Third Quarter<TD>3011<TD>5220 <TR><TH>Fourth Quarter<TD>3055<TD>5287

</TABLE>

</CENTER>

</BODY> </HTML>

Apples

Orages

:デフォルト

デフォルト

デフォルト

デフォルト

結果

結果

結果

結果

(26)

JSP 特別講座

51 www.coreservlets.com

Apples

Orages

フォーマット

フォーマット

フォーマット

フォーマット

= Excel

の結果

の結果

の結果

の結果

Apples and Oranges: Result with format=excel

www.coreservlets.com

isThreadSafe

属性

属性

属性

属性

The isThreadSafe Attribute

フォーマット

フォーマット

フォーマット

フォーマット

<%@ page isThreadSafe="true" %> <%-- Default --%>

<%@ page isThreadSafe="false" %>

目的

目的

目的

目的

コードがスレッドセーフでないことをシステムに伝え、同時

アクセスを防ぐ

注意

注意

注意

注意

デフォルトは

true

:システムはフィールドと他の共有データ

に対する処理の同期が取れていることを前提とする

値を

false

にすると、パフォーマンスが低下する場合がある

シリアルにサーブレットクラスが呼ばれている限り、システ

ムは複数のインスタンスを作ることができる。

(27)

JSP 特別講座

53 www.coreservlets.com

スレッドセーフではないコードの例

スレッドセーフではないコードの例

スレッドセーフではないコードの例

スレッドセーフではないコードの例

ID

はユニークである必要がある)

はユニークである必要がある)

はユニークである必要がある)

はユニークである必要がある)

Example of Non-Threadsafe Code (IDs Must Be Unique)

このコードのどこがいけないのか

このコードのどこがいけないのか

このコードのどこがいけないのか

このコードのどこがいけないのか

?

<%! private int idNum = 0; %>

<%

String userID = "userID" + idNum;

out.println("Your ID is " + userID + ".");

idNum = idNum + 1;

%>

この場合、

この場合、

この場合、

この場合、

isThreadSafe

は必要

は必要

は必要

は必要

Is isThreadSafe Needed Here?

No

<%! private int idNum = 0; %>

<%

synchronized(this) {

String userID = "userID" + idNum;

out.println("Your ID is " + userID + ".");

idNum = idNum + 1;

}

%>

高トラフィック環境で完全に安全でパフォーマ

高トラフィック環境で完全に安全でパフォーマ

高トラフィック環境で完全に安全でパフォーマ

高トラフィック環境で完全に安全でパフォーマ

(28)

55 © Marty Hall, http://www.coreservlets.com

JSP

ドキュメントにファ

ドキュメントにファ

ドキュメントにファ

ドキュメントにファ

イルをインクルードする

イルをインクルードする

イルをインクルードする

イルをインクルードする

Including Files in JSP Documents

www.coreservlets.com

リクエスト時にファイルをインクルー

リクエスト時にファイルをインクルー

リクエスト時にファイルをインクルー

リクエスト時にファイルをインクルー

ドする

ドする

ドする

ドする

Including Files at Request Time

フォーマット

フォーマット

フォーマット

フォーマット

<jsp:include page="Relative URL" flush="true" />

目的

目的

目的

目的

JSP

HTML

、テキストのコンテンツの再利用

JSP

のコンテンツはメインページに影響がない:

インクルードされた

JSP

ページの出力だけが使用さ

れる

メインの

JSP

ページを変更することなく、インクル

ードされたコンテンツのアップデートを可能にする

注意

注意

注意

注意

JSP 1.1

以前では、

flush

属性を

false

にする事はでき

ない

(29)

JSP 特別講座

57 www.coreservlets.com

ファイルのインクルード:コード

ファイルのインクルード:コード

ファイルのインクルード:コード

ファイルのインクルード:コード

Including Files: Example Code

... <BODY> <CENTER>

<TABLE BORDER=5>

<TR><TH CLASS="TITLE">

What's New at JspNews.com</TABLE> </CENTER>

<P>

Here is a summary of our four most recent news stories: <OL>

<LI><jsp:include page="news/Item1.html" flush="true" />

<LI><jsp:include page="news/Item2.html" flush="true" />

<LI><jsp:include page="news/Item3.html" flush="true" />

<LI><jsp:include page="news/Item4.html" flush="true" />

</OL>

</BODY></HTML>

ファイルのインクルード:例の結果

ファイルのインクルード:例の結果

ファイルのインクルード:例の結果

ファイルのインクルード:例の結果

(30)

JSP 特別講座

59 www.coreservlets.com

ページ変換時にファイルをインクルードす

ページ変換時にファイルをインクルードす

ページ変換時にファイルをインクルードす

ページ変換時にファイルをインクルードす

Including Files at Page Translation Time

フォーマット

フォーマット

フォーマット

フォーマット

<%@ include file="Relative URL" %>

目的

目的

目的

目的

JSP

コンテンツを複数のページで再利用する(

JSP

コンテンツがメインページに影響を与える時)

注意

注意

注意

注意

仕様上サーバはインクルードされたファイルの変更

を検知する必要がなく、実際にもされていない。

よって、インクルードされたファイルが変更された

場合、

JSP

ファイルも更新する必要がある。

Unix

の“

touch

”コマンドや、以下のような

OS

特有

の仕組みを使用することもできる。

<%-- Navbar.jsp modified 3/1/00 --%>

<%@ include file="Navbar.jsp" %>

JSP 特別講座

60 www.coreservlets.com

jsp:include

@include

の違い

の違い

の違い

の違い

Differences Between jsp:include and @include

jsp:include

では、指定したページの出力を含

では、指定したページの出力を含

では、指定したページの出力を含

では、指定したページの出力を含

@include

では実際のコードが含まれる

jsp:include

はリクエスト時に実行される

はリクエスト時に実行される

はリクエスト時に実行される

はリクエスト時に実行される

@include

はページ変換時に実行される

jsp:include

では、メインページとインクルー

では、メインページとインクルー

では、メインページとインクルー

では、メインページとインクルー

ドされたページは二つの異なるサーブレットに

ドされたページは二つの異なるサーブレットに

ドされたページは二つの異なるサーブレットに

ドされたページは二つの異なるサーブレットに

なる

なる

なる

なる

@include

では、一つのサーブレットの一部となる

jsp:include

では、インクルードされたファイ

では、インクルードされたファイ

では、インクルードされたファイ

では、インクルードされたファイ

ルの変更を自動的に処理する

ルの変更を自動的に処理する

ルの変更を自動的に処理する

ルの変更を自動的に処理する

@include

では自動ではない場合があり、大きな保守

(31)

JSP 特別講座

61 www.coreservlets.com

再利用できる

再利用できる

再利用できる

再利用できる

JSP

コンテンツ:

コンテンツ:

コンテンツ:

コンテンツ:

ContactSection.jsp

Reusable JSP Content: ContactSection.jsp

<%@ page import="java.util.Date" %>

<%-- The following become fields in each servlet that

results from a JSP page that includes this file. --%> <%!

private int accessCount = 0;

private Date accessDate = new Date();

private String accessHost = "<I>No previous access</I>"; %>

<P> <HR>

This page &copy; 2000

<A HREF="http//www.my-company.com/">my-company.com</A>. This page has been accessed <%= ++accessCount %>

times since server reboot. It was last accessed from <%= accessHost %> at <%= accessDate %>.

<% accessHost = request.getRemoteHost(); %> <% accessDate = new Date(); %>

JSP

コンテンツの使用

コンテンツの使用

コンテンツの使用

コンテンツの使用

Using the JSP Content

...

<BODY>

<TABLE BORDER=5 ALIGN="CENTER"> <TR><TH CLASS="TITLE">

Some Random Page</TABLE> <P>

Information about our products and services. <P>

Blah, blah, blah. <P>

Yadda, yadda, yadda.

(32)

JSP 特別講座

63 www.coreservlets.com

JSP

コンテンツの使用:結果

コンテンツの使用:結果

コンテンツの使用:結果

コンテンツの使用:結果

Using the JSP Content: Result

© Marty Hall, http://www.coreservlets.com

JSP

上での

上での

上での

上での

JavaBeans

の利用

の利用

の利用

の利用

References

Related documents

The fre- quency of these subjective symptoms appeared to decrease dose-dependently, and the frequency of asymptomatic ECGs (asymptomatic PAF/PAFL) was higher (over 30% of total

•• IIf f tth he e ttiig gh ht t ssp po ot t h haass N NOT OT moved up hole, then genuine tight moved up hole, then genuine tight hole is likely (key. hole is likely (key

To understand students’ experience with the Pitt Summer Science Outreach, a qualitative program evaluation was completed. Previous evaluations demonstrated disappointing

In all country groups (with much smaller effects in Mediterranean countries) before the crisis, young people living in work-poor households presented a higher unemployment

1. Operate by the stick switch of chair manual operation to set up chair height and reclining angle of backrest. Upon deciding of the desired direction 0, keep

The study suggests that greater dialogue within school communities could help teachers develop a shared understanding of information literacy as a whole, for example: the

The Division for Public Administration and Development Management of the United Nations Department of Economic and Social Affairs has been engaged in a multiyear