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

目次

N/A
N/A
Protected

Academic year: 2021

シェア "目次"

Copied!
37
0
0

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

全文

(1)

ウエブアプリケーション 2015

第15回 PHP その3

2016/1/14

海谷 治彦

1

http://www0.info.kanagawa-u.ac.jp/~kaiya/wa/

dotcampus ショートコード 179067

(2)

目次

• フレームワークについて CakePHP • 全体のまとめ

(3)

フレームワーク

• 別にウエブアプリに特化した概念ではない. • ライブラリと同様,再利用のためのコード群. • ライブラリと違い(というか逆に),全体の枠組みは, ほぼできており,利用者は,一部,クラスやメソッド のみ記述することで,アプリが完成する. • 一般に,全体の作業(業務)の流れは既に作成され ており,個々のステップでの処理をカスタマイズす る感じ. • フレームワークの使い方を知るのにとても時間が かかる.(実際に書くコードは少なくても) 3

(4)

CakePHP

• PHP用のフレームワーク.

• JavaのSpring/Struts等に比べればマイナーだが PHPではそこそこメジャー.

• RDBの表から,Model, Controller, View を対話的 に生成する機能を有する. • 要は,業務モデル(DBの表)を作れば,ウエブアプ リに必要な入出力処理や画面を生成してくれる. • 本授業では,以下のバージョンを使う. • cakePHP 2.5.8 • PHP 5.2.8でも動くため,授業でのバージョンは 5.3.3 4

(5)

ダウンロード

• http://cakephp.jp/

• この授業では2.5.8をつかってください.

(6)

アプリ作成の流れ

• 図中,○は処理,□はデータをあらわす. • 手作業で作成しなければいけないのは,スキーマ ファイルのみ. • 他は,多少のy/n指定がいるが,基本,自動生成さ れる. 6 テキスト エディタ スキーマ ファイル テーブル 生成 RDBの テーブル モデル の生成 コントローラー の生成 ビュー の生成 モデルの PHPソース コントローラーの PHPソース ビューの PHPソース

(7)

データの概要

• スキーマファイル • 基本,ER図をPHPの配列を用いて,記述したもの. • 要はデータ構造. • 例は後述. • モデルのPHPソース • スキーマファイルをアプリ中で実際に使うPHPクラスに 変換したもの. • コントローラーのPHPソース • モデルに対する処理を実装したPHPクラス. • 通常,CRUD(後述)の処理が実装されている. • ビューのPHPソース • ブラウザに表示される見た目の部分のクラス. 7

(8)

MVCについて

• Model-View-Controller の略. • オブジェクト指向プログラミングで習ったかもしれない. • アプリケーションを作る際に上記の三つに分けて設計すると良い という指針. • Model • アプリで扱う業務や活動のみを扱う部分. • ショッピングサイトの業務なら商品,注文,顧客等がコレに相当. • 基本,システムとは関係ない業務依存の部分. • 主に普通のクラスやJavaBeans等で実現される. • View • システムとしてユーザーと相互作用する部分.入出力. • ウエブアプリならウエブページに相当し,主にJSPが担当. • Controller • ModelとViewを関連付け,業務の進行を制御する部分. • 主にServletが担当. 8 復習

(9)

MVCのメリット

• 特にModelと他を分離することで,実現方法を簡単 に変更できる. • 例えば,ウエブアプリをやめて,アンドロイドの専用アプ リを作ろうという時にも,Modelはそっくりそのまま流用 できる.(Javaの場合,特に) • Modelで表現される業務は往々にして類似したも のが多いので,再利用ができる. • 我々が想像する以上に業務というのはワンパターン • アマゾンも楽天もやってることはほぼ同じ. • 吉野家,松屋,すき家もほぼ同じ. • アプリケーションフレームワーク等. 9 復習

(10)

スキーマファイルの例

• 下記の例では,id, name, age を持つデータ $users が定義されている. • 複数のデータを定義してもよい.

• スキーマとはデータ構造のことと考えてもよい.

10

<?php

class AppSchema extends CakeSchema { public $users = array(

'id' => array('type'=>'integer', 'key'=>'primary', 'null'=>false, 'default'=>null),

'name' => array('type'=>'string', 'length'=>255, 'null'=>false, 'default'=>''), 'age' => array('type'=>'integer', 'null'=>false, 'default'=>0), 'indexes' => array('PRIMARY'=>array('column'=>'id', 'unique'=>1)), 'tableParameters' => array() ); } ?>

(11)

CRUD

• Create, Read, Update, Delete の接頭語 (Acronym). • データに対する最も一般的な処理群を表す.

• これに加えて,一覧(Index)の処理も実装する場合 がある.

(12)

モデル等の生成

• 以下のような対話的なツールで生成できる. • 基本,y/nやdefault値を選べばよい.

• 無論,凝ったことをするにはそれなりの設定が必要.

(13)

作成された画面例

• ユーザーのCRUD+Iが実行可能となっている.

• 以下を作るのに実際に書いたのはスキーマのみ.

(14)

エピローグ

(15)

本講義の目的・手段・顛末

• ウエブアプリケーションの仕組みを理解し,将来の 技術革新に追従できる素養を身に着ける. • 現時点でのウエブアプリケーションを構成する技 術や言語を知り,試用してみる. • 今後も急速に変化し続けるウエブアプリケーション の動向を理解し,必要な時に実践できるでしょう. 15 復習

(16)

クライアントサイドの具体的技術

• HTML5, CSS3 • ブラウザ上で文字や図形を描画するための言語 • 音声や動画の再生も可能. • クライアント側でのデータ保存に関する仕様もある. • JavaScript • ブラウザ上で計算を行うための言語. • 基本,C言語に似てる. • 文字列やデータ等の変換も計算として行える. • 事実上,唯一のクライアントサイドの処理言語 16 復習

(17)

クライアントサイドの主な役割

• 入力,表示,データの送受信 17 入力 表示 送受信 復習

(18)

BOM自体の主な変数・関数

• innerHeight • 画面内側の高さ • innerWidth • 画面内側の幅 • onclick • 画面がクリックされた際に呼び出される関数を保持する変数. • 一般に Callback 関数と呼ばれる. • alert() • 画面に文字列を含む小さいウインドウを表示して警告を利用者に 示すことができる. • open() • 新規windowをあける,ブラウザによってはタブか. • close() • windowを閉じる.ブラウザによってはタブか. • たいてい,設定で禁止されている場合が多い. 18 サンプル windowOwnProps.html 復習

(19)

BOMの主な変数

• document • 現在表示している文書をあらわすオブジェクト • document.write 等もこのオブジェクトのメソッド(関数) • たぶん,もっともよくお世話になるオブジェクト • location • 現在表示しているURLを表すオブジェクト • navigator • ブラウザの情報 • history • ブラウザの表示履歴 19 サンプル (document以外の動作テスト) windowProps.html 復習

(20)

DOM: Document Object Model

• 表示されているページのデータにアクセスするた めのオブジェクト. • 本来,window.document. と書くが,window. は略 せるので,document. と書くのが普通. • ある意味,もっともJSを特徴的に使う際に重要とな るデータ構造. • 構造は無論,個々のページに依存する. 20 復習

(21)

できること

• ページ中の要素を変更できます. • スタイルも含めて変更できます.

• 要素の中身(innerHTML)が変更できます. • 要素の属性も変更できます.

• <img src=“xxx” alt=“image”> の src alt 等が属性 • かなり後の formHiden.html 参照 • ページ中に要素の追加・削除ができます. • ページ中の要素に対するCallbackを設定できます. • 例えば,<div></div>の要素を押したら,警告がでると か. 21 復習

(22)

サーバーサイドの具体的技術

• JavaによるJSP/Servlet • 銀行系等の大規模で信頼性の必要なシステム向け. • PHP • お手軽にサイトを作るサーバーサイド言語. • Cに似ている. • Ruby on Rails • 昨今,流行っている模様.わりと頑丈.

• 伝統的なCGI (Common Gateway Interface) • Perl, Ruby, C等でサーバー側処理をするもの. • いまどきは見かけない.

22

(23)

サーバーサイドの主な役割

• 検索,計算,データ保存,手順のナビゲート,画面 データの生成等 23 データ 検索 計算 生成 送受信 保存 復習

(24)

HTMLにコードを埋め込む

• ブラウザまで埋め込まれたコードが届く. • JavaScript • サーバーで実行されHTML等に展開される. • JSP • PHP 24

(25)

<!DOCTYPE html> <html> <head> <meta charset="utf-8"><title>テストの問題</title> <script> onload=function(){ var lis=document.getElementsByTagName("li"); var w=document.getElementById("want"); var x="Init"; if(lis==undefined || w==undefined){ x="None"; }else{

for(i=0; i<lis.length; i++) if(lis[i]==w) { x=(i+1); lis[i].style.textDecoration="underline"; } } var cho=document.getElementById("choice"); if(cho!=undefined) cho.innerHTML=x; } </script> </head> <body>

Which beer do you want? <span id="choice">X</span> <ol>

<li>Guinness (Ireland) <li>Beck (Deutschland)

<li id="want">Heineken (Netherlands) <li>Grolsch (Netherlands)

</ol>

</body> </html>

JavaScript

の例

(26)

JSPの例

26 <HTML> <HEAD> <TITLE> JSP loop </TITLE> </HEAD> <BODY> <ul> <% int i;

for(i=0; i<10; i++){ %>

<li> number <%= i*3 %> <% } %> </ul> </BODY> </HTML> <HTML> <HEAD> <TITLE> JSP loop </TITLE> </HEAD> <BODY> <ul> <li> number 0 <li> number 3 <li> number 6 <li> number 9 <li> number 12 <li> number 15 <li> number 18 <li> number 21 <li> number 24 <li> number 27 </ul> </BODY> </HTML>

(27)

ステートレス (状態が無い)

• httpはリクエストとレスポンスの対からなる. • あるブラウザから連続してリクエスト/レスポンスを 行っても,それらの間を関係付けるものは無い. • このような特徴をステートレスと呼ぶ. ブラウザ JSプログラム ・ ・ ・ ・ ・ 入力画面準備 選択肢を送る 結果が返ってくる サーバー 側のデータ サーバー プログラム web storage等 27 一連処理という意識は無い 一連処理という意識は無い 一連処理という意識は無い 復習

(28)

ステートレスの例

• 以下のような状態遷移図に従うHTMLページ群を作成 することは可能である. • サンプル中の vendor0/ 下のHTMLファイル参照. • しかし,単なるばらばらのHTMLファイル群なので,状 態遷移に沿わないでページにアクセスすることができ る. • 例えば,金を払わず Coke や Fanta を得られる. 28 start moreCoin 50JPY showMenu 50JPY coke fanta 100JPY dropCoke dropFanta 復習

(29)

状態をウエブアプリで使うには?

• ブラウザが状態を示す値(状態変数)を記憶し,毎 回,サーバーにその値を送信する. • ウエブストレージやクッキー(Cookie)が利用可能. • ブラウザが「一連の処理」を示す識別子を記憶し, 毎回,サーバーにその値を送信する. • この一連の処理をセッション(session)と呼ぶ. • この識別子をセッションIDと呼ぶ. • 具体的な状態を示す値は,サーバー側で,セッションID と対応付けて記録する. 29 復習

(30)

Formの典型様式

30

<form action="http://www.example.com/form.php" method="post"> Topic:

<input type="text" name="topic" size="20"> <br>

<textarea rows="5" cols="22" name="feedback"> </textarea>

<br>

<input type="submit" value="send"> </form> メッセージを受け取るページを 指定.このページはリクエスト処 理の能力がないといけない. get もしくは post を指定. 違いは後述. ユーザーの入力値を最 終的に受け取りページ に送るための呪文. ユーザー入力場所の指 定.詳細は後述. ユーザー入力場所の指 定.詳細は後述. 復習

(31)

GETとPOST

• GET • 本来はサーバーからのデータ取得リクエストに用いる. • よって,クライアント側から原則データを送ることはできない. • しかし,URL自体にデータを付記することで,データを無理 やり送ることが可能となっている. • 送ったデータはURLを見ただけで丸見え. • POST • サーバーにデータを送る本来のリクエスト. • リクエストの本体(ヘッダーより下)に送るデータが付記される. • 一応,ぱっと見にはデータは見えないが,暗号化されていな いHTTPは簡単に傍受できるので,実際にはデータは丸見え. 31 復習

(32)

Form入力値を取り出す

• 基本的に form の action で指定されたページでの み取り出せる. • Key-value の連想配列になっているので,keyをあ らかじめ知っておいて,それで取り出す. • 言語によって取り出し方はさまざま. • PHP: 連想配列が直に見えている. • JSP/Servlet: request.getParameter() 等のメソッドで値を 取り出せる. • 取り出した値を継続的に使いたいなら,sessionの attributeにしたり,cookieにしまったり,DBに入れ たりしないといけない. 32

(33)

ソフトウェアの種類

• ウエブブラウザ

• IE, Firefox, Chrome 等のブラウザ.

• ウエブサーバー

• HTTPによりブラウザとの通信を行うソフトウェア • Apache, IIS, Nginx等が具体例.

• アプリケーションサーバー • 特定の業務や活動の手順をガイドするソフトウェア. • 本授業ではtomcat(+spring等)がこの位置づけに近い. • データベースマネージメントシステム (略してデータベース or DBMS) • データを永続化するためのソフトウェア. • MySQL, MongoDB等 • モジュール • 各ソフトウェアの機能拡張をするための部品 ※ 実際はOSの仲介がハードとの間に必ず入るが,それは省略. 33 復習

(34)

構成例2: 比較的大規模

• 航空券予約等のシステム (現実とは異なります) 34 VAIO : クライアント Chrome : ウエブブラウザ ANAのサイト : サーバー IIS : ウエブサーバー 子会社のサーバー : サーバー 予約システム : アプリケーションサーバー オラクルの : データベース VISA Card : サーバー 決済システム : アプリケーションサーバー Master Card 決済システム : アプリケーションサーバー AJP HTTPS 復習

(35)

最終演習

• 提出は必須です.締切は1週間後くらいでお願いし ます.テキストファイルもしくはPDFでお願いします. 1. 本授業において面白かった話題を200字以上で 述べてください. 2. 本授業で難しかった話題を200字以上で述べてく ださい. 3. 本授業で取り上げてほしかった話題があれば列 挙してください. • 以上,よろしくお願いします. 35

(36)

過去の演習について

• もし,過去の演習を提出していない方がいれば, 今月中に提出をしてください. • 遅れても,出さないよりだしたほうがマシです. • 既に提出している方は再提出しないでください.タ イムスタンプが上書きされて遅提出扱いになってし まいますので. 36

(37)

半年間,ご苦労さまでした

• 試験,がんばってください. • 前にも告知しましたが,試験には,本を含め紙類 のみ無制限に持ち込み可能です. • PC, 携帯電話等の電子機器,技術者や専門家(お 兄さんやお父さん等)の持込は不可です. 以上 37

参照

関連したドキュメント

絡み目を平面に射影し,線が交差しているところに上下 の情報をつけたものを絡み目の 図式 という..

線遷移をおこすだけでなく、中性子を一つ放出する場合がある。この中性子が遅発中性子で ある。励起状態の Kr-87

それゆえ、この条件下では光学的性質はもっぱら媒質の誘電率で決まる。ここではこのよ

Frauwallner [1937:287] は下す( Kataoka (forthcoming1) 参照).本質において両者に意見の相違は ないと言うのである( Frauwallner [1937:280, n.1]

とディグナーガが考えていると Pind は言うのである(このような見解はダルマキールティなら十分に 可能である). Pind [1999:327]: “The underlying argument seems to be

【現状と課題】

(自分で感じられ得る[もの])という用例は注目に値する(脚注 24 ).接頭辞の sam は「正しい」と

この国民の保護に関する業務計画(以下「この計画」という。