淺談Java Web經典三層架構和MVC框架模式

2020-11-28 51CTO

 一、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第二代有所改進,把業務邏輯的內容放到了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,但是我認為討論這個問題沒有太大的必要。我們大可將他作為一種思想,我們需要做的僅僅是理解它,應用它,掌握其中的思想,這才是我們需要做的。

【編輯推薦】

【責任編輯:

武曉燕

TEL:(010)68476606】

點讚 0

相關焦點

  • SSM框架-SpringMVC詳解
    springmvc概述Springmvc是spring框架的一個模塊,spring和springmvc無需中間整合層整合。Springmvc是一個基於mvc的web框架表現層的三大任務:URL到controller的映射http請求參數綁定http響應的生成和輸出MVC設計模式
  • .NET開發框架:另類的MVC架構和ORM系統
    【IT168 技術】  第一部分 另類的MVC架構JVPL架構  (JVPL模式的系統結構圖)  1.JVPL模式(JSON+視圖+處理器+加載器)  1)定義:  JVPL和mvc設計模式類似,一個變種的MVC設計模式.
  • 基於OSGi和Spring開發Web應用
    作為一個新的事實上的工業標準,OSGi 已經受到了廣泛的關注, 其面向服務(接口)的基本思想和動態模塊部署的能力, 是企業級應用長期以來一直追求的目標。Spring 是一個著名的 輕量級 J2EE 開發框架,其特點是面向接口編程和非侵入式的依賴注入。
  • MVC設計模式的總結
    採用三層軟體設計架構後,軟體系統在可擴展性和可復用性方面得到極大提高,在 資源分配策略設計合理運用的同時,軟體的性能指標也得到提升,系統的安全性和易管東北 理性也得到改善。三層體系結構對Web應用的軟體架構產生很大影響,促進了基於組件的設計思想, 產生了許多開發Web層次框架的實現技術。較之兩級結構來說,三層結構修改和維護上 更加方便。目前開發B/S結構的Web應用系統廣泛採用這種三層體系結構。
  • 如何正確地應用Web MVC架構模式分離表示層和模型處理層耦合關係
    軟體項目實訓及課程設計指導——如何正確地應用Web MVC架構模式分離表示層和模型處理層耦合關係1、MVC體系架構設計模式是用來幫助系統設計人員控制「變化」的一種設計模式MVC體系架構設計模式是上世紀80年代在Smalltalk-80中出現的一種軟體設計模式
  • Java經典面試題Spring是什麼 Spring框架入門詳解
    到目前為止Sping框架就搭建完畢了。我們平時創建對象需要自己手動創建,現在對象都是通過spring容器ApplicationContext創建,這就是所謂的IOC控制反轉,如果有了解工廠設計模式的朋友會更容易理解,ApplicationContext此處就相當於一個工廠類。我之前講解MyBatis框架的SqlSession就是由SqlSesionFactory創建的。
  • Web前端和後端有什麼區別(上)
    2、Web後端: 後端開發人員:會寫Java代碼,會寫SQL語句,能做簡單的資料庫設計,會Spring和iBatis,懂一些設計模式等。 (1)精通jsp,servlet,javabean,JMS,EJB,Jdbc,Flex開發,或者對相關的工具、類庫以及框架非常熟悉,如Velocity,Spring,Hibernate,iBatis,OSGI等,對Web開發的模式有較深的理解;
  • Springmvc框架對json的支持 Java程式設計師必看
    路徑當做請求處理了,於是我們必須不讓他處理這個請求,讓它對靜態資源放行需要進行如下配置在web.xml中我們添加幾條通過名為default的servlet處理的url-pattern,分別對應js和css文件。
  • 14個編寫Spring MVC控制器的實用小技巧
    編寫Spring MVC控制器的最佳技巧本文介紹了編寫Spring MVC框架的控制器(controller)的基礎技巧和最佳操作。在Spring MVC框架中,編寫控制器類通常是為了處理用戶提出的請求。
  • Java編程領域你需要懂得技術名詞解釋與常用開源框架理解
    儘管實現技術不一樣,但都是基於代理模式 , 都是生成一個代理對象 。JDK動態代理技術:主要使用到 InvocationHandler 接口和 java.lang.reflect.Proxy類的newProxyInstance() 方法。通過使用接口,使系統鬆耦合。CGLIB(動態字節碼增強)技術:是繼承被代理對象,然後Override需要被代理的方法。
  • 淺談B/S架構優缺點
    B/S(Browser/Server)結構即瀏覽器和伺服器結構。它隨著Internet技術的興起,對C/S結構的一種變化或改進的結構。在這種結構下,用戶工作界面通過WWW瀏覽器來實現,極少部分事務邏輯在前端(Browser)實現,但是主要事務邏輯在伺服器端(Server)實現,形成所謂三層結構。這樣就簡化了客戶端電腦載荷,減輕了系統維護與升級的成本和工作量,降低了用戶的體成本。B/S架構帶來了兩方面好處:客戶端使用統一的瀏覽器(Browser)。
  • 什麼是MVVM,MVC和MVVM的區別,MVVM框架VUE實現原理
    【視圖模型】mvvm模式的核心,它是連接view和model的橋梁。它有兩個方向:一是將【模型】轉化成【視圖】,即將後端傳遞的數據轉化成所看到的頁面。實現的方式是:數據綁定。二是將【視圖】轉化成【模型】,即將所看到的頁面轉化成後端的數據。
  • Java 反射:框架設計的靈魂
    靜態語言:相對於動態語言來說,在編譯時變量的數據類型就已經確定(使用變量之前必須聲明數據類型),在編譯時就會進行類型是否匹配;比如 C 語言、Java ;Java 反射機制:在運行過程中,對於任意一個類,都能知道其所有的屬性和方法;對於任意一個對象,都能調用其屬性和方法;這種動態獲取類信息和調用對象方法的功能
  • Web經典B/S快速開發框架,強大後臺+簡潔UI一體化開發工具
    整個框架包括三個版本:.net,.net core,java(開發中)以上三個版本中,.NET為初始版本,開發時間最長,是目前老客戶使用的主要產品;.net core為.net的升級版本,為新客戶使用及老客戶升級的主要產品;.net core能夠跨平臺,並且涉及Linux、Docker、Nginx、微服務等概念,將是未來的主流。
  • java軟體工程師的這些要求你有嗎?
    如今java是IT界數一數二的語言,許多程式設計師都想要成為java軟體工程師,那大家知道企業對於java軟體工程師的技術要求有哪些嗎?java軟體工程師的技術要求一.java技術要求:1.具有良好的Java語言基礎,面向對象編程基礎2.熟悉Struts、Hibernate、Spring等主流技術框架3.熟悉XML解析、Excel導出、文件上傳、發送E-mail等常見業務的實現二.資料庫技術要求1.掌握、運用SQLServer
  • Quarkus 1.0 發布,Java 雲原生、容器優先框架
    Quarkus 是一個用於編寫 Java 應用的雲原生、容器優先框架。Quarkus 代表了現代應用開發人員的根本性轉變,旨在解決 Java 在雲原生應用架構(如容器、微服務和 Serverless)方面面臨的一些缺陷。Java 開發人員能夠使用 Quarkus 構建具有比傳統的基於 Java 的微服務框架更快的啟動時間並佔用更少內存的應用。
  • getty 發布,一個完全基於 java 實現的 aio 框架
    AIO的發布使得實現一套網絡通訊框架變得相對簡單。但如果你不努力,可能也無法理解哦。3、本人對netty比較喜歡,無論是其性能還是編程思想(JBOSS提供的一個java開源網絡框架,可以說是java網絡通訊裡的一哥,極其穩定和強大的性能使得被廣泛使用)4、有了netty為何還要自己造輪子?這裡有兩個原因,其一是本人就喜歡造輪子,這是病,改不了。
  • 為什麼我不再使用 MVC 框架?
    Angular 2 正式版即將發布,在這個時間節點重估 MVC 模式及各種 MVC 框架為應用架構帶來的貢獻意義重大。我第一次接觸到 MVC 是在 1990 年,當時 NeXT 剛剛發布 Interface Builder(讓人驚訝的是,如今這款軟體依然發揮著重大的作用)。當時,我們感覺 Interface Builder 和 MVC 是一個很大的進步。
  • Web前端和後端有什麼區別(下)
    此處提到的 css不包括css3,通常我們看到在 web前端開發工程師的需求中,會有一個 css+ html或 css+ div用於界面布局,所以 css是用來幫助 html進行布局和顯示的,我們稱之為「css+ div」,為什麼要說 css+ div?由於我在上面說過, div是 html中主要用來布局的,所以 div是最重要的。
  • 原生APP和web應用APP有什麼不一樣?他們都有哪些優缺點
    那麼對於應用開發來選擇的話是選擇原生應用還是選擇web應用?APP應用首先安卓應用和蘋果應用這些年的發展,越來越多的公司都會在這兩個平臺上來投放APP。畢竟平臺大,也是根據用戶陣營來選擇,以前還有windowsphone,到現在基本上就是兩家陣營安卓和蘋果,那麼今天就來說下原生和非原生的優越點。1、費用方面。原生應用的開發成本是大於web應用的成本。安卓官方給定的安卓開發語言是java,而web應用的開發沒有語言限制,你可以是java,python,php,asp,aspx等等主流的文語言都可以。