為何需要mvc?
最早期的javaweb開發:servlet==java+"html",問題:在servlet中拼接字元串太麻煩
後來出現jsp:==html+java在html中嵌套java代碼, 問題:頁面和邏輯太過于混雜
最終導緻:mvc的誕生!
mvc是一種架構型的模式,本身不引入新的功能,就是指導我們把web應用結構做好
特點:與功能無關
目标:實作邏輯與頁面相分離
mvc模式:model、view、control 即:模型、視圖、控制器
1:模型:包含應用程式的 業務邏輯 和 業務資料
2:視圖:包含應用程式的輸出形式,即:頁面或界面
3:控制器:負責協調模型和視圖;
根據使用者請求來選擇要調用哪個模型來處理業務
以及最終哪個視圖為使用者做出應答!
mvc中的模型和視圖是分離的、解耦的,同一個模型可以對應多種不同的視圖
具體功能:
model:
封裝應用狀态 --------->資料封裝
響應狀态查詢 ---------->擷取資料
暴露應用的功能 ----------->邏輯層api
view:
提供html form用于使用者請求 ------->人機互動
請求模型的更新 ------->觸發事件
産生html響應 ------->展示資料
controller:
接收并驗證http請求的資料 -------->收集資料并封裝資料
将使用者資料與模型的更新相映射-------->調用邏輯層api
選擇用于響應的視圖 --------->根據傳回值選擇下一個頁面
純jsp應用
無mvc的時候,系統結構圖如下:
這種結構不太好,在jsp頁面寫的代碼太多,尤其是控制代碼,業務和邏輯
太過混雜,是以需要引入一個中間層----控制器來專門處理控制代碼
标準的mvc組建關系圖如下:
桌面級開發實作标準的mvc:
應用觀察者模式,可以實作标準的mvc
示例demo:有空再說!
web企業級開發無法實作标準的mvc:
原因:标準的mvc中,view在用戶端,model在伺服器;
那就是:當伺服器這邊資料更新了,它通知用戶端那邊跑着的html自動重新整理
這是不可能的!
html在不重新裝載頁面的情況下,是不可能重新整理的!
web實作改進型mvc:
在實際開發web應用的時候,大多數情況是不會按照标準mvc做的,事實上也很難做到
通常我們都會把邏輯部分移動到邏輯層,model隻用來封裝資料,即vo;view一般不直
接和邏輯層互動。
邏輯層的互動都由控制器做,view隻和控制器互動!如圖:
更狠一點的!如圖:
基本實作方式:
view:jsp
controller:servlet
model:javabean
從控制器如何傳遞值到jsp實作?
如果把jsp頁面看作servlet,那麼就是從一個servlet向另一個servlet傳遞參數
方法:request(線程安全)、session(非線程安全,但很少并發,除非惡心操作)、servletcontext(非線程安全)
對象: 同一個request請求 同一個用戶端(不區分servlet) 所有servlet(不區分用戶端,不區分servlet)
注意:
建議首選request。但是該方式下,如果跳轉頁面,由于是同一個request
是以,跳轉方式隻能用
this.request.getrequestdispather("/your servlet url").forward(request,response);
另一個方式:respose.sendredirect("/your servlet url");
歡迎關注微信公衆号:大資料從業者