• 検索結果がありません。

project 2012 最近の更新履歴 Dr Hishiki's classroom (日紫喜研究室) project 2012

N/A
N/A
Protected

Academic year: 2018

シェア "project 2012 最近の更新履歴 Dr Hishiki's classroom (日紫喜研究室) project 2012"

Copied!
24
0
0

読み込み中.... (全文を見る)

全文

(1)

1

プロジェクト I/II (H グループ )

補足資料

はじめての Google App Engine for

Java  (きしだ なおき著)の活

日紫喜 光良

2011/11/25

2012/09/21  改訂

(2)

2

内容

• サーブレットと JSP (スライド4~7)

– 動的なページ作成が目的

• CGI との比較→利点

• データストア(スライド8~16)

– 保存できるオブジェクト: Entity 型

– DatastoreService インターフェースの使い方

登録 / 削除

取得 / 検索

1つ取ってくる / 同じ型のデータを丸ごと取ってくる

– サーブレットでの使い方

• サンプルプログラムの応用(スライド 17 ~ 19 )

• NetBeans に関しての注意

• Java, JSP に関しての注意

• テキストの間違いと考えられる箇所

(3)

3

目標

• 入力に応じた動的なページ生成(データベー

ス不使用)

教科書~89頁

スライド6~9枚目

• 入力に応じた動的なページ生成(データベー

ス使用) – 教科書90~133頁

– スライド10~16枚目

• 習得した技術に応じた仕様立案と実装。仕様

の図示。 – スライド17~19枚目

(4)

4

CGI( Common Gateway

Interface )による動的なページ

の作成

HTTP サー

バプロセス HTTP の

GET リクエ スト

HTML/XML

HTTP の

GET/POST リク エスト

HTML/XML

リクエス トが CGI

に対する ものでな

かった場 合

リクエス トが CGI

に対する ものであ

る場合

外部プロセス

が起動される

CGIプログラム

標準入力

標準出力

環境変数 GET/POST の判断

パラメータ の読み取り 処理

出力 終了 ブラウザ

(5)

5

CGIの問題点(と言われている

もの

• プロセス起動のためパフォーマンスが悪

• ステートレス(複数のリクエストにまた

がってメモリ上でデータを維持できない

(6)

6

サーブレットによる動的なページ

作成

ブラウザ

HTTP サー バプロセス

サーブレット・エンジンのプロ セスから起動される

派生クラスのインスタンスのス レッド

Servlet クラ スと派生ク ラス(常駐)

派生クラスの インスタンス doGet/doPost メソッド

リダイレクト 呼出し HTTP の

GET/POST リクエスト

HTML/XML

起動

参考:(1)「はじめての Google App Engine for Java 」 79~81, 101~106, 118~119 頁 http://www.atmarkit.co.jp/fjava/keyword/jkey/jkey01.html

(2) Java を紐解くための重点キーワード  Java Servlet ( サーブレット ) それぞれGET/POST リ クエストを 担当

(7)

7

JSP も用いた動的なページ作成

ブラウザ

HTTP サー バプロセス

Servlet クラ スと派生ク ラス(常駐)

派生クラスのインスタン ス doGet/doPost メソッ

ド リダイレクト

呼出し GET/POST

リクエスト

HTML/XML

起動 JSP: JavaServer Page

JSP ファイ ル

RequestDispatcher 型のオブジェク ト

レスポンス処理を委 譲する( forward )

JSP エンジ

ン 実行時に処理

(b) JSP を呼び出す サーブレット

生成

(a)

(a) の例:「はじめて の・・・」 160 頁 (b) の例:「はじめて

の・・・」 39, 82~83 ( 39 頁の 解説)

JSP ファイルの書き方:「は じめての・・・」 35~36, 81~86 頁

(a) :ページを直接生成

(8)

8

Datastore に保存できるオブジェ

Entity 型・・・「プロパティと値」のペアの集合 クト

Kind Xxx

Kind Yyy

Kind Zzz

Property_A←Value_A Property_B←Value_B Property_C←Value_C

各オブジェクトの Key と ID は省略してある。

その他のデータ型は「はじめての・・・」 99,100 頁を見よ

92 頁も読むこと

同じ属性セットをも つ Entity を Kind と いう( 92 頁参照)

(9)

9

Entity 型オブジェクトの生成方

• 1.プログラムの中で必要になるたびに Kind を定義

– 例: Entity member = new Entity("Member");

• 2. Class の定義と継承

例:

98 頁など参照

EntityBase.java package db;

...

public class EntityBase { protected Entity entity;

public EntityBase(Entity entity){ ...

}

public Entity getEntity(){ ...

} ... }

Member.java package db;

...

public class Member extends EntityBase { public Member(Entity entity){

super(entity); }

... }

134 頁~参照

MemberListServelet.java ...Entity m;

db.Member member = new db.Member(m);

(10)

10

Datastore へのオブジェクトの登録

1. DatastoreService 型

のオブジェクトを生成 2. Entity 型のオブジェ

クトを生成

3. ds を通じてオブ

ジェクトを登録

ds

Datastore

Entity 型オブジェ

クト member

ds.put(member);

DatastoreService ds = DatastoreS

erviceFactory.getDatastoreServic

e();

Entity member = new Entity("Member");

member.setProperty...

ds: DatastoreService 型

のオブジェクト

98 頁参照 Datastore でのオブジェクト

の ID とキーは登録時に自動 生成される

(11)

11

Datastore からのオブジェクトの

取得 / 削除: ID が既知の場合

ds

Datastore

Kind と ID

Entity 型オブジェクト

member

Entity member = ds.get(key);

データの削除は

ds.delete(key);

3.データの取得

1. DatastoreService 型オブジェクトを生成(前スライ

ド参照)

2.取得するオブジェクトのキーを取

得 KeyFactory イン

ターフェース Key オブジェクト k

Key key = KeyFactory.createKey("Member",id); ey

103 頁参照

(12)

Datastore からのオブジェクトの取得:

プロパティによる検索の場合

1. DatastoreService 型オブジェクト ds を生成

2. Query 型オブジェクトを生成(取得 Entity の Kind

を指定)

Query q = new Query(“Member”);

3. Query 型オブジェクトへのフィルターを定義する

。 キーの値による並べ替えフィルター

プロパティの値による抽出フィルター

4.以上のクエリーを、 ds を通じて実行し、結果を

PreparedQuery 型オブジェクトに収納する。

q.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);

q.addFilter(“screenName”,Query.FilterOperator.EQUAL,screenName); 110 頁参照

119 頁参照

PreparedQuery pq = ds.prepare(q);

(13)

13

Datastore からのオブジェクトの取得:

検索結果のリスト化と利用

Entity 型オブジェクト member

Entity 型オブジェクト member

Entity 型オブジェクト member

List<Entity> 型の

オブジェクト

members

1.リスト化

List<Entity> members =

pq.asList(FetchOptions.Builder.withLimit(20));

2.リストの処理

for (Entity m : members) { ….

m.getKey().getId();

m.getProperty(“xxx”).toString(); ……

}

108 頁等参照

110 頁参照

(14)

14

Datastore の使い方(1)

DBに登録する場合

HttpServlet クラスの

派生クラスのオブジェク ト doGet/doPost メソッ

ド request

response

パラメータの値の取得(囲み参照) DatastoreService 型オブジェクト ds の 生成登録する Entity 型オブジェクト xxx の 生成xxx の各プロパティに値を設定

ds を介して xxx を登録

「はじめて

の・・・」 95, 97~101 頁など参照

リクエストからのパラ メータの値の取得方法 getParameter を用いる (POST の場合 )

getPathInfo() を用いる (GET の場合 )

104 頁等

(15)

15

Datastore の使い方(2)

キーでデータを取得する場合

HttpServlet クラスの

派生クラスのオブジェク ト doGet/doPost メソッ

ド request

response

パラメータ、とくに ID の取得(囲み参照) DatastoreService 型オブジェクト ds の

生成

Key 型オブジェクト key の生成

ds を介して Entity 型オブジェクト xxx を取得

「はじめて

の・・・」 103, 104

~ 106 頁など参照 リクエストからのパラ メータの値の取得方法 getParameter を用いる (POST の場合 )

getPathInfo() を用いる (GET の場合 )

104 頁等

(16)

16

Datastore の使い方( 3 )

クエリーで取得(検索)する場

HttpServlet クラスの

派生クラスのオブジェク ト doGet/doPost メソッ

ド request

response

パラメータの値の取得(囲み参照) DatastoreService 型オブジェクト ds の 生成

Query 型オブジェクト q の生成 q にフィルターを設定

PreparedQuery 型オブジェクト pq の生 成pq による ds からのリスト型オブジェ クトの取得

「はじめて

の・・・」 107 ~ 108 頁 , 109 ~ 111 頁など参 照

リクエストからのパラ メータの値の取得方法 getParameter を用いる (POST の場合 )

getPathInfo() を用いる (GET の場合 )

104 頁等

(17)

17

サンプルプログラムのアレンジに向けて

収納するデータ構造を考える (1)

→ 複雑なものは避ける

ID key Restaurant Reviewer Review

(18)

18

サンプルプログラムのアレンジに向けて

( 2 )

データの処理の種類を決める

→ どのサンプルプログラムと似ている

か?

(例2)

Register a restaurant

Delete a restaurant

List all the restaurants

Search for restaurants

Edit a review about a restaurant

95 ~ 96 頁 132 ~ 133 頁

107 ~ 108 頁 , 131 頁 109~120 頁

124 ~ 131 頁 登録

削除 一覧表示

検索 変更

(19)

19

サンプルプログラムのアレンジに向けて

( 3 )

データの処理の流れを決める

→ どの画面がどのプログラムの入力あ

るいは出力か?その画面は動的か静的

か?

(例3)

List all the

restaurants

Delete a

restaurant

Edit a review

Register a

restaurant

List of the restaurants

Review(s) of a restaurant

Select a

restaurant

動的な画面はサーブレット から直接出力するか、 JSP を用いるかによって作る。

Start

(20)

20

NetBeans についての注意(1)

• 配布 USB には ver. 6.9.x と 7.1.x が入ってい

ますが ver. 6.9.x のほうを使ってください

• 起動するために USB の中にショートカッ

トを用意しました。

• 起動にはかなり時間がかかります。

(21)

21

NetBeans についての注意(2)

• マルチメディアスタジオ備え付けのノートPCのディ

スクはシャットダウン時にクリーンアップされること

に注意

• (初回のみ) Google App Engine SDK for Java をUSBメ

モリ上にダウンロードすること( 28 頁)。

– まずデスクトップに落としてから USB にコピーするとよい。

• 毎回の実習において、プラグインのインストール( 24

~ 28 頁)、サーバーの追加( 29 ~ 31 頁)を行うこと

• (初回のみ)プロジェクトの作成( 32 頁)時に、保存

場所として USB メモリ上の /work を使うとよい。

• プログラムやファイルの名前や URL マッピングを間違

ったときは、 web.xml ファイルのGUIをもった設定

画面から訂正もしくは削除する( 89 頁参照)。

(22)

22

Java, JSP についての注意

• 関数やクラスを使うために必要なパッケ

ージをインポートするのを忘れないこと

– 例: Date クラスを使うには java.util.Date を。

• 変数やメソッドの名前にはローマ字の日

本語ではなく英語を使うことが望ましい

(23)

23

テキストのコードで変えたほうがいいとこ

• 36 頁  <c:out value=" →   <c:out valu

e='

閉じるほうも同様に。

• 102 頁本文 クラス名「 MemberIdSerlve

t 」→クラス名「 MemberIdServlet 」

• 131 頁  > 削除 </a></td>“,  → > 削除 </

a></td></tr>",

(24)

スケジュール

• 最終回( 11/2 )は最終発表会のみ

• 中間( 10/12 または 10/19 )に、制作物の

仕様発表会をおこなう。

– 何を作るのか(ユースケースの図示)

どのように作るのか

• プログラムの構成の図示

– どのようなクラスが含まれるか(図に含める)

必要なメソッドの概要

• プログラムの動作の図示

24

参照

関連したドキュメント

現実感のもてる問題場面からスタートし,問題 場面を自らの考えや表現を用いて表し,教師の

水道水又は飲用に適する水の使用、飲用に適する水を使

納付日の指定を行った場合は、指定した日の前日までに預貯金口座の残

を受けている保税蔵置場の名称及び所在地を、同法第 61 条の5第1項の承

駐車場  平日  昼間  少ない  平日の昼間、車輌の入れ替わりは少ないが、常に車輌が駐車している

高(法 のり 肩と法 のり 尻との高低差をいい、擁壁を設置する場合は、法 のり 高と擁壁の高さとを合

汚染水の構外への漏えいおよび漏えいの可能性が ある場合・湯気によるモニタリングポストへの影

電子式の検知機を用い て、配管等から漏れるフ ロンを検知する方法。検 知機の精度によるが、他