Javaweb MVC設計模式、Modle發展史、項目分層和三層架構

文章目錄

    • MVC設計模式
      • MVC的目的
      • MVC舉例
        • jsp+servlet+javabean模式
      • MVC的優點
      • MVC的缺點
    • Modle 發展史
    • 項目分層
    • 三層架構

MVC設計模式

MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)
它是用一種業務邏輯、數據與界面顯示分離的方法來組織代碼,將眾多的業務邏輯聚集到一個部件里面,在需要改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯,達到減少編碼的時間,提高代碼復用性。

控制器(Controller):Servlet,控制器主要處理用戶的請求。
指從現實世界中抽象出來的對象模型,是應用邏輯的反應;它封裝了數據和對數據的操作,是實際進行數據處理的地方(模型層與數據庫才有交互)

視圖(View):HTML, JSP, 前端框架。是應用和用戶之間的接口,它負責將應用顯示給用戶 和 顯示模型的狀態。

模型(Model):邏輯業務程序(后臺的功能程序), Service, Dao, JavaBean。
控制器負責視圖和模型之間的交互,控制對用戶輸入的響應、響應方式和流程;它主要負責兩方面的動作,一是把用戶的請求分發到相應的模型,二是吧模型的改變及時地反映到視圖上。
在這里插入圖片描述

V即View視圖是指用戶看到并與之交互的界面。比如由html元素組成的網頁界面,或者軟件的客戶端界面。MVC的好處之一在于它能為應用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發生,它只是作為一種輸出數據并允許用戶操縱的方式。

C即controller控制器是指控制器接受用戶的輸入并調用模型和視圖去完成用戶的需求,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調用哪個模型構件去處理請求,然后再確定用哪個視圖來顯示返回的數據。

在這里插入圖片描述
用戶首先在界面中進行人機交互,然后請求發送到控制器,控制器根據請求類型和請求的指令發送到相應的模型,模型可以與數據庫進行交互,進行增刪改查操作,完成之后,根據業務的邏輯選擇相應的視圖進行顯示,此時用戶獲得此次交互的反饋信息,用戶可以進行下一步交互,如此循環。

需要注意的是:MVC三層結構與軟件的三層結構是有區別的。MVC是一種設計模式,三層結構是軟件結構,用MVC這種設計模式可以實現三層軟件結構。在完整三層軟件結構中 表現層包括了MVC中的表現層和控制層。而MVC中的模型層其實包括了三層軟件結構的業務邏輯層、數據訪問層、業務實體類(model)和共用類。軟件三層結構的UI(Web)包含了MVC中的視圖層(V)和控制層(C)。

MVC的目的

它將這些對象、顯示、控制分離以提高軟件的的靈活性和復用性,MVC結構可以使程序具有對象化的特征,也更容易維護。

MVC舉例

jsp+servlet+javabean模式

JavaBean作為模型,既可以作為數據模型來封裝業務數據,又可以作為業務邏輯模型來包含應用的業務操作。其中,數據模型用來存儲或傳遞業務數據,而業務邏輯模型接收到控制器傳過來的模型更新請求后,執行特定的業務邏輯處理,然后返回相應的執行結果。

JSP作為視圖層,負責提供頁面為用戶展示數據,提供相應的表單(Form)來用于用戶的請求,并在適當的時候(點擊按鈕)向控制器發出請求來請求模型進行更新。

Serlvet作為控制器,用來接收用戶提交的請求,然后獲取請求中的數據,將之轉換為業務模型需要的數據模型,然后調用業務模型相應的業務方法進行更新,同時根據業務執行結果來選擇要返回的視圖。
在這里插入圖片描述
MVC設計模式相對于模式1(虛線表示模式1,不是MVC,即JSP+JavaBean),把模式1 的表現層中的頁面與表現邏輯(流程控制)分開。
視圖層只負責頁面的顯示,而數據的獲取、調用業務邏輯和頁面的選擇均由控制層完成。
在MVC模式中,視圖層用JSP、HTML、CSS和JavaScript技術來實現;

MVC的優點

1.耦合性低

視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。

2.重用性高

MVC模式允許使用各種不同樣式的視圖來訪問同一個服務器端的代碼,因為多個視圖能共享一個模型,它包括任何WEB(HTTP)瀏覽器或者無線瀏覽器(wap),比如,用戶可以通過電腦也可通過手機來訂購某樣產品,雖然訂購的方式不一樣,但處理訂購產品的方式是一樣的。由于模型返回的數據沒有進行格式化,所以同樣的構件能被不同的界面使用。

3.部署快,生命周期成本低

MVC使開發和維護用戶接口的技術含量降低。使用MVC模式使開發時間得到相當大的縮減,它使程序員(Java開發人員)集中精力于業務邏輯,界面程序員(HTML和JSP開發人員)集中精力于表現形式上。

4.可維護性高

分離視圖層和業務邏輯層也使得WEB應用更易于維護和修改。

MVC的缺點

1.完全理解MVC比較復雜

由于MVC模式提出的時間不長,加上同學們的實踐經驗不足,所以完全理解并掌握MVC不是一個很容易的過程。

2.調試困難

因為模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了一定的困難,每個構件在使用之前都需要經過徹底的測試。

3.不適合小型,中等規模的應用程序

在一個中小型的應用程序中,強制性的使用MVC進行開發,往往會花費大量時間,并且不能體現MVC的優勢,同時會使開發變得繁瑣。

4.增加系統結構和實現的復雜性

對于簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的復雜性,并可能產生過多的更新操作,降低運行效率。

5.視圖與控制器間的過于緊密的連接并且降低了視圖對模型數據的訪問

視圖與控制器是相互分離,但卻是聯系緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。

依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。

Modle 發展史

JSP Model1第一代
所有的業務邏輯交個jsp單獨處理完成,一個web項目只存在DB層和JSP層,所有的東西都耦合在一起,對后期的維護和擴展極為不利。
在這里插入圖片描述
JSP Model1第二代

JSP Model1第二代有所改進,把業務邏輯的內容放到了JavaBean中,而JSP頁面負責顯示以及請求調度的工作。雖然第二代比第一代好了些,但JSP還是把view和control的業務耦合在一起。
在這里插入圖片描述

JSP Model2
JSP Model2 就是現在大力推廣的和使用的mvc,將一個項目劃分為三個模塊,各司其事互不干擾,既解決了jsp所形成的耦合性,又增加了邏輯性、業務性以及復用性和維護性。
在這里插入圖片描述

項目分層

DAO —— Data Access Object數據訪問對象(接口)
DAOImpl —— DAO的實現類
entity ——數據對象的實體(有些地方叫model層)
Service(不是Server)——就是中間層、業務邏輯層(接口)
ServiceImpl —Service的實現類
Util —— 自定義工具類 Servlet——JAVA WEB小應用(有時叫Controller層)

1、Utils:主要用于存放連接工具如java數據庫連接工具,在這里提供連接和關閉數據庫的接口。
2、Dao層: 上面Util包中已經提供連接數據庫接口,在本層中可直接調用,然后創建增刪改查語句。
3、Service層:最重要的一層,對servlet層傳入的數據,調用Dao層的方法操作和整合。
4、Servlet層:對Jsp中傳入的數據,封裝調用service操作。
5、test層:用單元測試的方式,沒有問題再進行接下來的操作。
6、Bean層里是建立的模型層
一般情況下,Dao層、service層還要分為兩層,一層是接口,另外一層做實現類。

1.JAVA中Servlet層、Service層 、modle層 、 Dao層的功能區分?

Servlet層用于接收請求并且調用對應service層處理請求,是Java各層中最接近瀏覽器的一層。Service層主要編寫具體業務邏輯,每個Service一般包含一組相關的業務邏輯

modle/entity層(統稱模型層)對應的數據庫表的實體類,一般每個模型層類對應一個數據庫“表”,一般是用于ORM對象關系映射,一方面方便從數據庫取數據時保存為類,一方面也方便寫入數據庫,簡而言之就是為了方便操作數據庫

Dao層一般用于對數據庫的具體操作,包括各種具體的增刪改查語句和數據庫數據和Java模型的映射。Util層主要用于存在項目各層都有可能出現、不好劃分到某層中、出現頻率較高的功能(類),比如連接數據庫、獲取系統參數、導出Excel表等等

2.為什么將Service(Dao)層設為接口層,單獨拿出一個ServiceImpl(DaoImpl)作為實現層?

方便項目管理,增加代碼的復用性。
當項目很大、代碼很多時,可能存在多種業務邏輯類似但具體業務有所區別的需求,此時讓它們都集成同一個接口層方便處理。

3.為什么要用service層封裝?

一般某一個程序的有些業務流程需要連接數據庫,有些不需要與數據庫打交道而直接是一些業務處理,這樣就需要我們整合起來到service中去,這樣可以起到一個更好的開發與維護的作用,同時也是MVC設計模式中model層功能的體現

4 . Entity、Pojo、JavaBean和DTO有什么區別?

Entity:實體bean,一般是用于ORM對象關系映射,一個實體映射成一張表,一般無業務邏輯代碼,有些優秀框架中修改entity會直接同步到數據庫。

JavaBean:是一種Java語言寫成的可重用組件,類必須是具體和公共的,并且具有無參數的構造器,可以把數據封裝起來,把應用的業務邏輯和顯示邏輯分離開,降低了開發的復雜程度和維護成本(說白了就是一種類的規范,符合這種規范的都可以叫JavaBean)

Pojo:簡單的Java對象,實際就是普通JavaBeans,是為了避免和EJB混淆所創造的簡稱。

DTO:數據傳輸對象(Data TransferObject),是一種設計模式之間傳輸數據的軟件應用系統。

5.模型類和VO、DTO、DO、PO分別是什么

VO(View Object):視圖對象,用于展示層,它的作用是把某個指定頁面(或組件)的所有數據封裝起來。

DTO(Data Transfer Object):數據傳輸對象,這個概念來源于J2EE的設計模式,原來的目的是為了EJB的分布式應用提供粗粒度的數據實體,以減少分布式調用的次數,從而提高分布式調用的性能和降低網絡負載,但在這里,我泛指用于展示層與服務層之間的數據傳輸對象。

DO(Domain Object):領域對象,就是從現實世界中抽象出來的有形或無形的業務實體。
PO(PersistentObject):持久化對象,它跟持久層(通常是關系型數據庫)的數據結構形成一一對應的映射關系,如果持久層是關系型數據庫,那么,數據表中的每個字段(或若干個)就對應PO的一個(或若干個)屬性。

模型層:
下面以一個時序圖建立簡單模型來描述上述對象在三層架構應用中的位置

用戶發出請求(可能是填寫表單),表單的數據在展示層被匹配為VO。
展示層把VO轉換為服務層對應方法所要求的DTO,傳送給服務層。 l
服務層首先根據DTO的數據構造(或重建)一個DO,調用DO的業務方法完成具體業務。
服務層把DO轉換為持久層對應的PO(可以使用ORM工具,也可以不用),調用持久層的持久化方法,把PO傳遞給它,完成持久化操作。
對于一個逆向操作,如讀取數據,也是用類似的方式轉換和傳遞。

三層架構

在這里插入圖片描述
三層由表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)組成。

1.表現層(web層):包含JSP,Servlet等web相關的內容
??職責:①向用戶展示特定的業務數據
?????②采集用戶的信息和操作
??原則:用戶至上,兼顧簡潔

2.業務邏輯層(Service層): 處理業務,不允許出現servlet中的request、response。
??職責:① 從UI中獲取用戶指令和數據,執行業務邏輯
?????②從UI中獲取用戶指令和數據,通過DAL寫入數據源
?????③從DAL中獲取數據,以供 UI 顯示用
??機制:① UI –> BLL –> UI
?????② UI –> BLL –> DAL –> BLL –> UI

3.數據訪問層(持久層):封裝了對數據庫的訪問細節。
??作用:跟數據源打交道
??職責:①執行對數據的操作(增刪改查)
注意:其中 web層相當于mvc中的view,Service層和dao層相當于mvc中的modle。

4.數據對象層
??數據對象層包含了項目需要使用的數據對象,用數據對象來傳遞數據,它避免了各個層的交叉引用。
??一般一個表對應一個數據對象。

在這里插入圖片描述

UI():主要是指與用戶交互的界面。用于接收用戶輸入的數據和顯示處理后用戶需要的數據。

BLL:(業務邏輯層):UI層和DAL層之間的橋梁。實現業務邏輯。業務邏輯具體包含:驗證、計算、業務規則等等。

DAL:(數據訪問層):與數據庫打交道。主要實現對數據的增、刪、改、查。將存儲在數據庫中的數據提交給業務層,同時將業務層處理的數據保存到數據庫。(當然這些操作都是基于UI層的。用戶的需求反映給界面(UI),UI反映給BLL,BLL反映給DAL,DAL進行數據的操作,操作后再一 一 返回,直到將用戶所需數據反饋給用戶)

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

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

相關文章

HTML表格和HTML表單

HTML 表格 表格由 <table> 標簽來定義每個表格均有若干行&#xff08;由 <tr> 標簽定義&#xff09;&#xff0c;每行被分割為若干單元格&#xff08;由 <td> 標簽定義&#xff09; 字母 td 指表格數據&#xff08;table data&#xff09;&#xff0c;即數據…

Eclispe創建jsp文件,提示錯誤:“The import Xxx cannot be resolved“的解決方案

解決方案&#xff1a; a.(可能是jdk、tomcat版本問題) 右鍵項目->build path&#xff0c;將其中 報錯的 libary或lib 刪除后重新導入 b.清空各種緩存&#xff1a;右鍵項目->Clean tomcat... clean &#xff08;Project -clean或者 進tomcat目錄 刪除里面work的子目錄&a…

JSP訪問數據庫,Session對象和九大內置對象

文章目錄JSP訪問數據庫Session對象JSP九大內置對象JSP訪問數據庫 JSP就是在HTML中嵌套的java代碼&#xff0c;因此java代碼可以卸載JSP中&#xff08;<% … %>&#xff09; 導包操作&#xff1a; Java項目&#xff1a;1. Jar復制到工程中2.右鍵該Jar&#xff1a;build p…

HDFS學習 Java連接hadoop

文章目錄建立連接獲取hadoop下的文件信息編寫hadoop連接工具類建立連接獲取hadoop下的文件信息 import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLoc…

解決虛擬機沒有ens33網卡的問題

話不多說&#xff0c;直接操作 解決辦法 1.在終端中輸入: sudo vim /etc/network/interfaces進入interfaces文件后&#xff0c;然后輸入以下代碼&#xff0c;然后保存退出 auto ens33 iface ens33 inet dhcp 2.重啟虛擬機 輸入ifconfig命令&#xff0c;成功啟動ens33網卡

HDFS上傳文件命令報錯org.apache.hadoop.ipc.RemoteException(java.io.IOException)

作為作者&#xff0c;強烈不建議進行格式化hadoop&#xff0c;畢竟開發數據是最為重要的&#xff01; Hadoop 3.1 hdfs dfs -put /源文件路徑 /目的文件路徑解決方案 第一步&#xff1a;停止主節點&#xff08;Master&#xff09;和子節點服務&#xff08;Slave&#xff09; …

hadoop退出安全模式Name node is in safe mode

解決方案&#xff1a; hadoop dfsadmin -safemode leave或者&#xff1a; hdfs dfsadmin -safemode leave

圖(Graph)的學習

文章目錄圖的認識圖的概念無向圖有向圖簡單圖完全圖子圖連通、連通圖、連通分量邊的權和網加權圖鄰接和關聯路徑簡單路徑、簡單回路環頂點的度、入度和出度割點&#xff08;關節點&#xff09;橋(割邊)距離有向樹圖的表示鄰接列表鄰接矩陣圖的遍歷深度優先遍歷廣度優先遍歷生成…

并查集(Disjiont Set)

并查集 并查集的最大作用是檢測一個圖上面存不存在環。 無向圖&#xff0c;六個頂點 顯然 1-2-4-3連成一個環 #include<stdio.h> #include<stdlib.h>#define VERTICES 6void initialise(int parent[]){int i;for(i0;i<VERTICES;i){parent[i]-1; }}int find_…

采用Kruskal算法生成最小生成樹,并采用并查集的合并優化和查詢優化。

文章目錄最小生成樹1.什么是圖的最小生成樹&#xff08;MST&#xff09;?2.最小生成樹用來解決什么問題&#xff1f;Kruskal&#xff08;克魯斯卡爾&#xff09;算法算法描述圖解最小生成樹 1.什么是圖的最小生成樹&#xff08;MST&#xff09;? 用N-1條邊連接N個點&#x…

Java操作HBase

rowkey查詢 //根據rowKey進行查詢public static User getDataByRowKey(String tableName, String rowKey,String password) throws IOException {Admin admin connection.getAdmin();Table table connection.getTable(TableName.valueOf(tableName));Get get new Get(rowKe…

Java連接Mysql數據庫(JDBC)

文章目錄導入包con、stmt、rs 三者存在一定的關系getInt和getStringinput.nextInt();簡單使用講解ResultSet和StatementPreparedStatement的用法JDBC連接代碼更多樣例導入包 import java.sql.Connection; import java.sql.DriverManager; import java.sql.statement; import j…

JavaBean和Servlet

文章目錄JavaBean通俗的講JavaBean的作用JavaBean&#xff08;就是一個Java類&#xff09;的定義使用層面&#xff0c;Java分為2大類&#xff1a;Servlet回顧純手工方法創建第一個Servlet借助于Eclipse快速生成ServletServlet3.0&#xff0c;與Servlet2.5的區別&#xff1a;項目…

Linux編程考前測試題

文章目錄選擇題多選題判斷題填空題簡答題編程題選擇題 1:當打開vi文本編輯器編輯文件時&#xff0c;vi處于&#xff08;A&#xff09;模式 A: 命令模式 B: 編輯模式 C: 實模式 D: 虛模式 2:下列有關fork&#xff08;&#xff09;函數返回值說法錯誤的是&#xff08;D&#xf…

MySQL考試復習(知識點、練習題)

文章目錄數據庫的管理技術的三個階段發展的三個階段數據庫的鎖數據庫設計的基本步驟事務的四大特性什么是視圖如果關系模式設計不好&#xff0c;可能帶來哪幾個問題數據庫管理系統的主要功能有哪些數據庫系統中的常見故障有哪些簡述SQL語言的組成說明關系模型有哪三類完整性規則…

Oracle復習(知識點、練習題、實驗)

文章目錄第一章 數據庫概念數據庫的三級模式結構&#xff1a;模式、外模式、內模式三級模式之間的映射第二章 Oracle12g體系結構Oracle的邏輯存儲結構Oracle物理存儲結構Oracle11g服務器結構系統全局區&#xff08;SGA&#xff09;程序全局區&#xff08;PGA&#xff09;第三章…

Openstack面試題和知識點總結

文章目錄知識點云計算起源定義特點分類服務類型平臺分類應用虛擬化虛擬化技術定義分類云計算和虛擬化的關系虛擬化的優點OpenStack簡介核心架構Openstack組件共享服務組件核心組件組件詳解RabbitMQ概念特點rabbitmq中的概念工作原理常用操作MemcachedKeystoneGlance工作原理Nov…

實例化一個對象

類實例化就是新建一個類的對象&#xff0c;就是new一個對象 類名 對象名 new 類名&#xff08;&#xff09;;例子&#xff1a;Student stu new Student&#xff08;&#xff09;; 注意&#xff1a; 類在沒有實例化之前,就是new之前,它的屬性,方法等等在內存中都是不存在的.…

RuntimeException:java.lang.ClassNotFoundException: Class wordcount.WordCountMapper not fonud

在hadoop上運行Mapreduce項目jar包報錯&#xff1a; Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class wordcount.WordCountMapper not foundat org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2638)at org.apache.hadoop.ma…