Web應(yīng)用安全技術(shù)原理與實踐 課件 第5章 MVC編程_第1頁
Web應(yīng)用安全技術(shù)原理與實踐 課件 第5章 MVC編程_第2頁
Web應(yīng)用安全技術(shù)原理與實踐 課件 第5章 MVC編程_第3頁
Web應(yīng)用安全技術(shù)原理與實踐 課件 第5章 MVC編程_第4頁
Web應(yīng)用安全技術(shù)原理與實踐 課件 第5章 MVC編程_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Web應(yīng)用安全第五章MVC模式本章要求1理解面向?qū)ο缶幊痰南嚓P(guān)概念和實現(xiàn)方法2理解MVC編程的基本思想3掌握MVC編程的一般過程23面向?qū)ο缶幊袒A(chǔ)面向?qū)ο缶幊蹋∣bjectOrientedProgramming,OOP)是一種計算機編程架構(gòu),它的一條基本原則是計算機程序由單個能夠起到子程序作用的單元或?qū)ο蠼M合而成。采用面向?qū)ο缶幊趟枷肟梢詫崿F(xiàn)軟件工程的三個主要目標(biāo):重用性、靈活性和擴展性。面向?qū)ο缶幊讨饕攸c封裝性:將對象的成員屬性和成員方法結(jié)合成一個獨立的單元,以隱蔽對象的內(nèi)部細(xì)節(jié),PHP語言通過類和對象實現(xiàn)封裝;繼承性:建立的一個新的派生類時,從一個先前定義的類中繼承屬性和方法,同時可以重新定義或加進(jìn)新的屬性和方法,PHP語言支持單繼承;多態(tài):同一類的同一成員方法輸入不同類型的參數(shù),或者具有繼承關(guān)系的類多個類對同一成員方法,可以有不同的行為和實現(xiàn)。4面向?qū)ο缶幊袒A(chǔ)對象和類對象定義及內(nèi)涵對象就是描述客觀事物的一個實體,如張三、桌子、圖書、電腦等每一個對象都有特定的數(shù)據(jù)模型,用于描述對象的一些具體數(shù)據(jù),如姓名、年齡、身高、體重等,這些數(shù)據(jù)稱為對象的屬性,也叫對象的成員變量。每一個對象有特定的行為模型,用于描述對象的行為能力或功能,稱為對象的方法。類定義及內(nèi)涵類則是對一類對象的抽象,如人、圖書等5面向?qū)ο缶幊袒A(chǔ)對象和類定義一個類class類名稱{

屬性1;

屬性i...;

方法1(){}

方法j...(){}}classPerson{

public$name;//姓名

public$sex;//性別

public$age;//年齡

publicfunctionsayHello(){

print("Hello!<br>");

}

publicfunctionwork(){

print("Iamworking......<br>");

}}6面向?qū)ο缶幊袒A(chǔ)對象和類實例化類為對象<?phpclassPerson{

public$name;//姓名

public$sex;//性別

public$age;//年齡

publicfunctionsayHello(){

print("Hello!<br>");

}

publicfunctionwork(){

print("Iamworking......<br>");

}}$zhangsan=newPerson();$zhangsan->name="zhangsan";$zhangsan->sex="male";$zhangsan->age="18";$zhangsan->sayHello();//Hello!$zhangsan->work();//Iamworking......?>7面向?qū)ο缶幊袒A(chǔ)對象和類構(gòu)造函數(shù)和析構(gòu)函數(shù)classPerson{public$name;//姓名public$sex;//性別public$age;//年齡function__construct($name,$sex,$age){$this->name=$name;$this->sex=$sex;$this->age=$age;}

function__destruct(){

print("Destroyinganobject......<br>");

}}$zhangsan=newPerson("zhangsan","male",18);print("Name:".$zhangsan->name."<br>");//zhangsanprint("Sex:".$zhangsan->sex."<br>");//maleprint("Age:".$zhangsan->age."<br>");//18//Destroyinganobject......沒有顯性的方法調(diào)用--魔術(shù)方法8面向?qū)ο缶幊袒A(chǔ)對象和類$this屬性classPerson{public$name;//姓名public$sex;//性別public$age;//年齡function__construct($name,$sex,$age){$this->name=$name;$this->sex=$sex;$this->age=$age;}

functioninfo(){

//print($name);//這樣的方式將報錯,變量$name沒有定義

print("Name:".$this->name."<br>");

print("Sex:".$this->sex."<br>");

print("Age:".$this->age."<br>");

}}$zhangsan=newPerson("zhangsan","male",18);$zhangsan->info();//zhangsan,male,18$this屬性在對象創(chuàng)建時指向?qū)ο蟊旧?面向?qū)ο缶幊袒A(chǔ)繼承和重載繼承是指一個類可以擁有其他類中聲明的屬性和方法的機制。被繼承的類稱為父類,繼承的類稱為子類。PHP語言支持單繼承。classStudentextendsPerson{

public$id;

function__construct($name,$sex,$age,$id){

$this->id=$id;

parent::__construct($name,$sex,$age);

}

publicfunctioninfo(){

print("MyID:".$this->id."<br>");

print("Myname:".$this->name."<br>");

print("Myage:".$this->age."<br>");

}}$zhangsan=newStudent("zhangsan","male",18,201901009);$zhangsan->sayHello();//Helloeveryone,I'amzhangsan!$zhangsan->work();//Iamworking......$zhangsan->info();//201901009,zhangsan,1810面向?qū)ο缶幊袒A(chǔ)繼承和重載類在繼承過程中,還可以重新聲明父類中的屬性和方法,這種機制稱為重載。classA{

public$attr="Defaultvalue";

publicfunctionoperation(){

print("Something<br>");

print('Thevalueof$attris'.$this->attr."<br>");

}}classBextendsA{

public$attr="Differentvalue";

publicfunctionoperation(){

print("Somethingelse<br>");

print('Thevalueof$attris'.$this->attr."<br>");

}}$a=newA();$a->operation();//Something//Thevalueof$attrisDefaultvalue$b=newB();$b->operation();//Somethingelse//Thevalueof$attrisDiffrentvalue11面向?qū)ο缶幊袒A(chǔ)訪問控制—屬性和方法所有屬性或方法的默認(rèn)訪問修飾符是public。被public標(biāo)記的屬性或方法稱為公有屬性或方法,它可以在類的內(nèi)部和外部訪問,可以被子類繼承。publicprivate被private標(biāo)記的屬性或方法稱為私有屬性或方法,它只能在類的內(nèi)部訪問,不能被子類繼承。protected被protected標(biāo)記的屬性或方法稱為受保護(hù)屬性或方法,它只能在類的內(nèi)部訪問,可以被子類繼承。12面向?qū)ο缶幊袒A(chǔ)文件的自動裝載在很多情況下,為了保持代碼的整潔,類定義在一個單獨的文件中,在使用這些類的定義之前,需要使用文件包含語句(如include)把相應(yīng)的文件包含進(jìn)來。classA{/*文件路徑:./Class/ClassA.php*/

public$attr;

publicfunctiontest(){

print("ClassA.<br>");

print($this->attr);

}}include("./Class/ClassA.php");$a=newA();$a->attr="abc";$a->test();通過顯示文件包含實現(xiàn)類文件裝載不足之處:(1)手工添加;(2)可能有一些文件不必要裝載13面向?qū)ο缶幊袒A(chǔ)文件的自動裝載自動裝載機制<?phpfunctionmy_autoload($name){print("自動裝載類-{$name}的源代碼文件!<br>");$file="./Class/Class".$name.".php";include_once($file);}spl_autoload_register("my_autoload");print("程序開始執(zhí)行......<br>");$a=newA();print("類A的對象創(chuàng)建成功!<br>");$a->attr="abc";$a->test();?>按需、自動裝載文件14面向?qū)ο缶幊袒A(chǔ)其他常見關(guān)鍵字static—靜態(tài)通過關(guān)鍵字static來標(biāo)識的類屬性或方法,則它們?yōu)殪o態(tài)的,即這些屬性或方法不需要依賴于對象。<?phpclassA{publicstatic$count=0;publicfunction__construct(){self::$count++;}publicstaticfunctiongetCount(){returnself::$count;}}print(A::$count);//0$a1=newA;print(A::getCount());//1$a2=newA;print($a2->getCount());//2?>15面向?qū)ο缶幊袒A(chǔ)其他常見關(guān)鍵字instanceof--用于確定一個對象是類的實例或子類<?phpclassA{ public$a;}classB{ public$b;}classCextendsA{public$c;}$a=newA;$b=newB;$c=newC;if($ainstanceofA){//輸出--A類的對象

print("A類的對象<br>");}else{print("不是A類的對象<br>");}if($binstanceofA){//輸出--不是A類的對象

print("A類的對象<br>");}else{print("不是A類的對象<br>");}if($cinstanceofA){//輸出--A類的對象

print("A類的對象<br>");}else{ print("不是A類的對象<br>");}?>16MVC編程基本原理—概念MVC是模型(Model)、視圖(View)和控制器(Controller)的簡寫。視圖(View)表示用戶交互界面,簡單來說就是HTML文檔界面模型(Model)是Web應(yīng)用系統(tǒng)業(yè)務(wù)流程,是系統(tǒng)設(shè)計的核心控制器(Controller)作用可以理解為接收操作請求,并將模型和視圖關(guān)聯(lián)在一起,完成操作請求并顯示操作請求的結(jié)果。17MVC編程基本原理—過程單一入口路由分發(fā)控制器操作請求模型視圖操作響應(yīng)①②③④⑤⑥⑦⑧耦合性低重用性高可維護(hù)性高優(yōu)點:缺點:結(jié)構(gòu)復(fù)雜,不易掌握調(diào)試?yán)щy18MVC編程編程示例—學(xué)生成績查詢系統(tǒng)只有登錄成功的學(xué)生才能查詢成績。查詢時,需要提交學(xué)生學(xué)號信息。19MVC編程編程示例—學(xué)生成績查詢系統(tǒng)

系統(tǒng)分析視圖控制器登錄界面、成績查詢初始界面、成績查詢結(jié)果初始頁面請求操作、登錄請求操作、成績查詢請求操作模型用戶名和密碼的數(shù)據(jù)驗證、英語課成績查詢、計算機網(wǎng)絡(luò)課成績查詢、所有課程成績查詢以用戶登錄功能為例,說明MVC開發(fā)過程,剩余功能實現(xiàn)自行練習(xí)20MVC編程編程示例—學(xué)生成績查詢系統(tǒng)登錄功能實現(xiàn)操作請求參數(shù)設(shè)計GET參數(shù),?action=index&op=loginaction表示請求的操作,op表示請求的階段;如果沒有請求參數(shù),則設(shè)置缺省參數(shù)為action=index&op=index基本流程設(shè)計index.php(單一入口)

獲取操作請求參數(shù),或設(shè)置缺省操作參數(shù)

根據(jù)請求參數(shù)找到處理控制器的處理方法訪問模型,驗證用戶名和密碼返回處理結(jié)果后的視圖(成功為查詢視圖、不成功為登錄視圖)用戶請求路由21MVC編程編程示例—學(xué)生成績查詢系統(tǒng)登錄功能實現(xiàn)系統(tǒng)文件結(jié)構(gòu)設(shè)計Controller—控制器目錄Model—模型目錄View—視圖目錄index.php—單一入口文件app.php—系統(tǒng)核心功能文件,包括請求參數(shù)獲取、路由查詢和分發(fā)、文件自動裝載等route.php—路由配置信息文件22MVC編程編程示例—學(xué)生成績查詢系統(tǒng)登錄功能實現(xiàn)<?phpdefine("SINGLE","GOON");//定義單一入口標(biāo)識require("app.php");$app=newAPP;$app->action();?>index.phproute.php<?php//基于標(biāo)識的單一入口if(!defined('SINGLE'))exit();//路由配置按照[action,op,controller,func]$routes=array(array("index","default","Index","default"),array("index","login","Index","login"),);?>23MVC編程編程示例—學(xué)生成績查詢系統(tǒng)登錄功能實現(xiàn)app.phpif(!defined('SINGLE'))exit();//基于標(biāo)識的單一入口classAPP{publicfunction__construct(){spl_autoload_register(“self::load”);//注冊自動裝載}staticpublicfunctionload($class){//自動裝載方法$file=“./Controller/{$class}.php”;//裝載控制器類if(file_exists($file))require_once($file);$file="./View/{$class}.php";//裝載視圖類if(file_exists($file))require_once($file);$file="./Model/{$class}.php";//裝載模型類

if(file_exists($file))require_once($file);}publicfunctionaction(){//應(yīng)用請求處理$action=$this->getRequest();//獲取請求操作

$route=$this->getRoute($action);//找到路由

$this->toController($route[2],$route[3]);}

publicfunctiongetRequest(){//獲取請求操作$action=array("index","index");//缺省的請求

if(!empty($_GET['action'])){$action[0]=$_GET['action'];if(!empty($_GET["op"]))$action[1]=$_GET["op"];}return$action;}publicfunctiongetRoute($action){//請求分發(fā)require("route.php");//獲取路由配置信息

foreach($routesas$route){if(($route[0]==$action[0])&&($route[1]==$action[1])){return$route;}}returnarray(“”,“”,“Index”,“default”);//沒有找到路由,使用缺省頁面}publicfunctiontoController($controller,$func){//將請求發(fā)送給控制器$con=new$controller;$con->$func();}24MVC編程編程示例—學(xué)生成績查詢系統(tǒng)登錄功能實現(xiàn)\Controller\Index.phpif(!defined('SINGLE'))exit();//基于標(biāo)識的單一入口classIndex{publicfunctiondefault(){$con=newView("./View/index.html",array());$con->display();//展示界面}publicfunctionlogin(){session_start();$id=$_POST['id'];//學(xué)號

$pass="";if(!empty($_POST['pass']))$pass=$_POST['pass'];$model=Model::getInstance();$ret=$model->userCheck($id,$pass);if($ret){//用戶驗證成功

$_SESSION['id']=$id;//注冊會話變量

$con=newView("./View/operate.html",array());$con->display();}else{//用戶驗證失敗,顯示登View/index.html錄頁面

$con=newView("./",array());$con->display();//展示界面

return;}}}25MVC編程編程示例—學(xué)生成績查詢系統(tǒng)登錄功能實現(xiàn)\View\View.php<?phpif(!defined('SINGLE'))exit();//基于標(biāo)識的單一入口classView{public$file;//存放模板文件

public$data;//存放成績查詢結(jié)果

publicfunction__construct($file,$data){$this->file=$file;$this->data=$data;}//顯示頁面效果

publicfunctiondisplay(){$con=file_get_contents($this->file);$con=$con."</body></html>";print($con);}}?>26MVC編程編程示例—學(xué)生成績查詢系統(tǒng)登錄功能實現(xiàn)\View\index.html<!DOCTYPEhtml><html><head><title>歡迎登錄</title><metacharset="utf-8"></head><body><h1>歡迎訪問學(xué)生成績查詢系統(tǒng)</h1><h3>登錄系統(tǒng)</h3><formaction="index.php?action=index&op=login"method="post"><label>學(xué)號:</label><inputtype="text"name="id"><br><label>密碼:</label><inputtype="password"name="pass"><br><inputtype="submit"value="登錄系統(tǒng)"></form>27MVC編程編程示例—學(xué)生成績查詢系統(tǒng)登錄功能實現(xiàn)\View\operate.html<!DOCTYPEhtml><html><head><title>成績查詢</title><metacharset="utf-8"></head><body><h1>歡迎訪問學(xué)生成績查詢系統(tǒng)</h1><h3>成績查詢</h3><formaction="index.php?action=grade&op=query"method="post"><label>查詢條件:</label><label>學(xué)號</label><inputtype="text"name="id"><inputtype="submit"value="開始查詢"></form><formaction="index.php?action=grade&op=logout"method="post"><inputtype="submit"value="退出登錄"></form><hr>28MVC編程編程示例—學(xué)生成績查詢系統(tǒng)登錄功能實現(xiàn)if(!defined('SINGLE'))exit();//基于標(biāo)識的單一入口classModel{privatestatic$instance;//單例對象

publicstaticfunctiongetInstance(){//獲取單例對象

if(!(self::$

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論