淺談javaweb三大框架和MVC設計模式

淺談javaweb三大框架和MVC設計模式

轉載自:http://blog.csdn.net/sunpeng19960715/article/details/50890705

小序:博主以前在學javaweb的時候開始總不理解javaweb三大框架和MVC框架模式,雖然沒有把兩者混為一談,但是也是很暈菜。作為一個Java開發程序員的話,特別是B/S架構的開發來說,MVC框架模式是我們必須要掌握的!!!

一、MVC設計模式

1.MVC的概念

首先我們需要知道MVC模式并不是javaweb項目中獨有的,MVC是一種軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller),即為MVC。它是一種軟件設計的典范,最早為Trygve Reenskaug提出,為施樂帕羅奧多研究中心(Xerox PARC)的Smalltalk語言發明的一種軟件設計模式。

2.MVC的詳解

雖然MVC并不是Java當中獨有的,但是現在幾乎所有的B/S的架構都采用了MVC框架模式,但是MVC在B/S架構中并沒有完全地實現,其實我們根本不需要掌握未實現的部分。
·控制器Controller:控制器即是控制請求的處理邏輯,對請求進行處理,負責請 求轉發;
·視圖View:視圖即是用戶看到并與之交互的界面,比如HTML(靜態資源),JSP(動態資源)等等。
·模型Model:模型代表著一種企業規范,就是業務流程/狀態的處理以及業務規則的規定。業務流程的處理過程對其他層來說是不透明的,模型接受視圖數據的請求,并返回最終的處理結果。業務模型的設計可以說是MVC的核心。

3.MVC模式的用武之地

MVC模式被廣泛用于Java的各種框架中,比如Struts2、spring MVC等等都用到了這種思想。

Struts2是基于MVC的輕量級的web應用框架。基于MVC,說明基于Struts2開發的Web應用自然就能實現MVC,也說明Struts2著力于在MVC的各個部分為我們的開發提供相應幫助。

二、Javaweb經典三層架構

1.Javaweb經歷了三個時期

①JSP Model1第一代
JSP Model1是JavaWeb早期的模型,它適合小型Web項目,開發成本低!Model1第一代時期,服務器端只有JSP頁面,所有的操作都在JSP頁面中,連訪問數據庫的API也在JSP頁面中完成。也就是說,所有的東西都耦合在一起,對后期的維護和擴展極為不利。

JSP Model1第一代

②JSP Model1第二代
JSP Model1第二代有所改進,把業務邏輯的內容放到了JavaBean中,而JSP頁面負責顯示以及請求調度的工作。雖然第二代比第一代好了些,但還讓JSP做了過多的工作,JSP中把視圖工作和請求調度(控制器)的工作耦合在一起了。

這里寫圖片描述

③JSP Model2
JSP Model2模式已經可以清晰的看到MVC完整的結構了。
·JSP:視圖層,用來與用戶打交道。負責接收用來的數據,以及顯示數據給用戶;
·Servlet:控制層,負責找到合適的模型對象來處理業務邏輯,轉發到合適的視圖;
JavaBean:模型層,完成具體的業務工作,例如:開啟、轉賬等。

這里寫圖片描述

這就是javaweb經歷的三個年代,JSP Model2適合多人合作開發大型的Web項目,各司其職,互不干涉,有利于開發中的分工,有利于組件的重用。但是,Web項目的開發難度加大,同時對開發人員的技術要求也提高了。

2.JavaWeb經典三層框架

我們常說的三層框架是由JavaWeb提出的,也就是說這是JavaWeb獨有的!
所謂三層是表述層(WEB層)、業務邏輯層(Business Logic),以及數據訪問層(Data Access)。
·WEB層:包含JSP和Servlet等與WEB相關的內容;
·業務層:業務層中不包含JavaWeb API,它只關心業務邏輯;
·數據層:封裝了對數據庫的訪問細節;

  注意,在業務層中不能出現JavaWeb API,例如request、response等。也就是說,業務層代碼是可重用的,甚至可以應用到非Web環境中。業務層的每個方法可以理解成一個萬能,例如轉賬業務方法。業務層依賴數據層,而Web層依賴業務層!
這里寫圖片描述

注:網上很多人在討論MVC究竟是一種框架模式還是一種設計模式(百度百科中強行解釋其為一種框架模式而不是一種設計模式),雖然Java中的23種設計模式里并沒有MVC,但是我認為討論這個問題沒有太大的必要。我們大可將他作為一種思想,我們需要做的僅僅是理解它,應用它,掌握其中的思想,這才是我們需要做的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250475.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250475.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250475.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win下配置nginx

1.下載:http://nginx.org/en/download.html 2.在安裝目錄cmd: start nginx.exe 啟動nginx 3.修改默認運行端口80(nginx.conf): HTTP 數據分發 修改配置文件nginx.conf相應節點: 修改完后重啟服務: nginx -s reload TCP 數據分發: nginx 1.9以上版本支持tcp轉發 配置文件中增加:…

在springBoot中配置web.xml中配置的servlet

第一種 web.xml (截取的需要轉換的) 當攔截到 /socke t時執行該servlet <servlet><servlet-name>websocket</servlet-name><servlet-class>org.ldd.ssm.hangyu.socket.MyWebSocketServlet</servlet-class></servlet><servlet-mapping&g…

koa --- koa-bouncer驗證

使用 koa-bouncer中間件對傳入的數據進行驗證 const bouncer require(koa-bouncer); app.use(bouncer.middleware());const val async (ctx, next) > {ctx.validateBody(name).required(要求提供用戶名).isLength(6, 16, 用戶名長度應該為6~16).isString().trim()next();…

static關鍵字的作用

//C/C程序員面試指南 楊國祥等編著 定義全局靜態變量。全局靜態變量有以下特點&#xff1a; 在全局數據區分配內存&#xff1b;如果沒有初始化&#xff0c;其默認值為0&#xff1b;該變量在本文件內從定義開始到文件結束可見。定義局部靜態變量。局部靜態變量有以下特點&…

Redis 初次嘗試

Redis 初次嘗試 第一次接觸redis&#xff0c;也不知道要寫些什么。就玩了下將redis列表中的數據存入mysql數據庫中。 首先有三個文件&#xff1a; redis.php 添加數據進redis&#xff1b; insert_class.php 將數據插入數據庫&#xff1b; inert.php 調用insert_class.php;…

fiddler2抓包數據工具使用教程

一款免費且功能強大的數據包抓取軟件。它通過代理的方式獲取程序http通訊的數據&#xff0c;可以用其檢測網頁和服務器的交互情況&#xff0c;能夠記錄所有客戶端和服務器間的http請求&#xff0c;支持監視、設置斷點、甚至修改輸入輸出數據等功能。fiddler包含了一個強大的基于…

egg --- 初始化一個egg項目基本結構說明

Egg.js體驗 全局安裝 // 創建項目 $ npm i egg-init -g $ egg-init egg-example --typesimple $ cd egg-example $ npm i// 啟動項目 $ npm run dev $ open localhost:7000Egg.js的結構 路由(Router): 將請求URL和具體承擔執行動作的Controller的關系對應控制器(Controller)…

葫蘆娃

葫蘆娃救爺爺 1.隊名——代碼那些事兒 2.團隊成員 劉佳 211606320&#xff08;隊長&#xff09;李佳 211660313周世元 211606348王浩 211606378曾麗麗 211606302陳水蓮 211606303許燕婷 211606338楊小妮 2116063413.隊長博客鏈接 -https://www.cnblogs.com/LJ-D/p/9799944.html…

webstorm遇到的問題

問題一&#xff1a;英譯&#xff1a;未指定node.js的解釋器。 解決方法&#xff1a;將webstorm配置支持node.js并自動補全 步驟&#xff1a; 先下載node.jsFile->Setting->輸入Node.js&#xff08;選中點進去&#xff09;->Node imterpreter&#xff08;選擇node的安裝…

egg --- 配置連接mysql 創建模型 插入數據

在egg中使用egg-sequelize插件 sequelize是與數據庫操作相關的庫安裝: npm install --save egg-sequelize mysql2 在egg中配置sequelize 1.在 config/plugin.js中引入 egg-sequelize插件,代碼如下 sequelize: {enable: true,package: egg-sequelize }2.在config/config.def…

Flask 在 Debug 模式下初始化2次

請移步&#xff1a; http://blog.zengrong.net/post/2632.html https://stackoverflow.com/questions/9449101/how-to-stop-flask-from-initialising-twice-in-debug-mode/9476701#9476701 https://stackoverflow.com/questions/25504149/why-does-running-the-flask-dev-serve…

eclipse報錯: Could not generate secret

在調用微信接口時&#xff0c;出現一個錯誤&#xff1a; 一直以為是接口調用問題&#xff0c;經多方查詢和嘗試解決&#xff0c;最后找到根源&#xff1a; edit-->使用default就可以了。 原因&#xff1a; 在eclipse中運行時&#xff0c;把簽名信息給去掉了。 轉載于:https:…

koa --- [MVC實現之一]自定義路由讀取規則

實現MVC分層架構 目標是創建約定大于配置、開發效率高、可維護性強的項目架構路由處理 規范 所有路由,都要放在routes文件夾中若導出路由對象,使用 動詞空格路徑 作為key, 值是操作方法若導出函數, 則函數返回第二條約定格式的對象 路由定義: 新建 router/index.js, 默認index…

sql中的left join、right join、inner join

sql中的left join、right join、inner join 轉自&#xff1a;http://www.cnblogs.com/pcjim/articles/799302.html left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄inner join…

bzoj1128 Lam-lights

題目描述 對于一個長度為n的數列p&#xff0c;數列中任意兩個數互質。準備一個無限長的儲存器。然后從p1開始&#xff0c;把儲存器中p1倍數位置都賦值為p1&#xff0c;把儲存器中p2倍數位置都賦值為p2&#xff0c;把儲存器中p3倍數位置都賦值為p3。。。把儲存器中pn倍數位置都賦…

koa --- [MVC實現之二]Controller層的實現

[MVC實現之一]傳送門 https://blog.csdn.net/piano9425/article/details/103362966 Router層 router這一層,不做業務處理,僅僅只是將路由和路由的處理函數結合起來.路由的處理函數由Controller層實現改進目錄結構如下(實際上新建了controller文件夾及其內部子文件,mar.js) …

k8s install

https://xiangyu123.github.io/2018/10/17/k8s-install/轉載于:https://www.cnblogs.com/robinunix/p/9809937.html

Redis 幾種應用場景

Redis 幾種應用場景 字符串緩存 <?php$redis new Redis();$redis->connect(127.0.0.1,6379);$strKey test;$strKey1 test1;//set$arrCache [name>mysteryH,sex>男,age>22];$redis->set($strKey,json_encode($arrCache));$redis->expire($strKey,300…

HDU 6029(思維)

傳送門題面&#xff1a;Graph TheoryTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1220 Accepted Submission(s): 553Problem DescriptionLittle Q loves playing with different kinds of graphs very muc…

2018.10.18多校

T1&#xff1a;雖說大家都被cdq限制住了思維&#xff0c;我一個注意到了排列有問題的還是涼了&#xff0c;這個我沒有一點辦法了。 鏈接&#xff1a;cdq T2&#xff1a;留坑&#xff0c;太毒了 T3&#xff1a;考場上就不覺得能寫&#xff0c;雖然心里想到一些做法&#xff0c;還…