java中MVC模式與三層架構(gòu)
1. 前言
前面我們探討了 JSP 的使用,隨著計(jì)算機(jī)技術(shù)的不斷更新迭代,JSP 的技術(shù)由于存在很多的缺點(diǎn),已經(jīng)逐漸退出了歷史的舞臺(tái),所以在學(xué)習(xí)時(shí),我們只需要了解其如何實(shí)現(xiàn)的數(shù)據(jù)的增刪改查。不用刨根問(wèn)底,花費(fèi)大量的時(shí)間,得不償失。
- 理解 JSP 及其原理
- 學(xué)會(huì)使用 EL 表達(dá)式和 JSTL 標(biāo)簽
- 理解 MVC 模式和三層架構(gòu)
快速閱讀:一文帶你吃透JSP
學(xué)習(xí) MVC 模式和三層架構(gòu)的知識(shí),可以讓我們?cè)陂_發(fā)中提高代碼的維護(hù)性和擴(kuò)展性。
2. MVC模式
MVC模式是一種分層開發(fā)的模式,其中:
- M:Model,業(yè)務(wù)模型,處理業(yè)務(wù)
- V:View,視圖,用于界面展示
- C:Controller,控制器,處理請(qǐng)求,調(diào)用模型和視圖

其中,控制器(Servlet)用來(lái)接收瀏覽器發(fā)送的請(qǐng)求,控制器調(diào)用模型(JavaBean)來(lái)獲取數(shù)據(jù),比如從從數(shù)據(jù)庫(kù)查詢數(shù)據(jù),控制器獲取數(shù)據(jù)后在交給視圖(JSP)進(jìn)行數(shù)據(jù)的展示。
使用 MVC 模式開發(fā)有很多的好處,例如,職責(zé)單一,互不影響,每個(gè)角色各司其職。有利于分工協(xié)作和組件重用等。
3. 三層架構(gòu)
三層架構(gòu)的模型將我們的項(xiàng)目分成了三個(gè)層面,分別是表現(xiàn)層,業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層。其中數(shù)據(jù)訪問(wèn)層又稱持久層。

- 數(shù)據(jù)訪問(wèn)層:對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查等基本操作。
- 業(yè)務(wù)邏輯層:對(duì)業(yè)務(wù)邏輯進(jìn)行封裝,組合數(shù)據(jù)訪問(wèn)層中的基本功能,形成復(fù)雜的業(yè)務(wù)邏輯功能,例如注冊(cè)業(yè)務(wù)功能,我們先調(diào)用數(shù)據(jù)訪問(wèn)層的 selectByName() 方法判斷該用戶名是否存在,如果不存在再調(diào)用數(shù)據(jù)訪問(wèn)層的 insert() 方法進(jìn)行數(shù)據(jù)的添加操作。
- 表現(xiàn)層:接收請(qǐng)求,封裝數(shù)據(jù),調(diào)用業(yè)務(wù)邏輯層,響應(yīng)數(shù)據(jù)。
在整個(gè)流程中,瀏覽器發(fā)送請(qǐng)求,表現(xiàn)層的 Servlet 接收請(qǐng)求并調(diào)用業(yè)務(wù)邏輯層的方法進(jìn)行業(yè)務(wù)邏輯處理,而業(yè)務(wù)邏輯層方法調(diào)用數(shù)據(jù)訪問(wèn)層方法進(jìn)行數(shù)據(jù)的CRUD 操作,依次返回給 Servlet,然后 Servlet 將數(shù)據(jù)交給 JSP 進(jìn)行展示。
三層架構(gòu)的每一層都有特有的包名名稱,以后我們?cè)趯W(xué)習(xí)中就要使用更加規(guī)范的命名方式,他們分別是:
- 表現(xiàn)層:org.chengzi.web 或者 org.chengzi.controller
- 業(yè)務(wù)邏輯層:org.chengzi.service
- 數(shù)據(jù)訪問(wèn)層:org.chengzi.mapper或者org.chengzi.dao
馬上就要學(xué)習(xí)完 JavaWeb 了,后面我們會(huì)學(xué)習(xí)更多的框架,Spring,SpringMVC,MyBatis 等等,其實(shí)不同的框架是對(duì)不同層進(jìn)行的封裝,如圖:

4. MVC和三層架構(gòu)
我們已經(jīng)說(shuō)完了 MVC 模式和三層架構(gòu),下面來(lái)看看兩者有什么關(guān)系呢?

如圖,上半部分是 MVC 模式,后半部分是三層架構(gòu),其中,MVC 模式中的控制器和視圖就是三層架構(gòu)中的表現(xiàn)層,而 MVC 模式中的模型就是三層架構(gòu)中的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層。
5. 總結(jié)
5.1 IDEA 小技巧
解決 Ctrl+Alt+V 快捷鍵 自動(dòng)補(bǔ)全代碼失敗的問(wèn)題,如圖:

原因:未添加 main() 方法
解決:在類中添加main() 方法,如果是在Servlet中,則添加toGet() 等方法。
如果將 MVC 理解為一個(gè)大的概念,那么三層結(jié)構(gòu)就是對(duì) MVC 模式實(shí)現(xiàn)架構(gòu)的思想,根據(jù)標(biāo)準(zhǔn),我們將不同層的代碼放在不同的包下,每一層里面職責(zé)單一,將來(lái)如果表現(xiàn)層的技術(shù)更新迭代,而業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層的代碼則不用發(fā)生變化,大大提高的代碼的可維護(hù)性。
以上就是MVC 模式與三層架構(gòu)的深入了解的詳細(xì)內(nèi)容,更多關(guān)于剖析MVC架構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- ASP.NET?Core中MVC模式實(shí)現(xiàn)路由二
- jsp+dao+bean+servlet(MVC模式)實(shí)現(xiàn)簡(jiǎn)單用戶登錄和注冊(cè)頁(yè)面
- jsp 實(shí)現(xiàn)的簡(jiǎn)易mvc模式示例
- Python設(shè)計(jì)模式之MVC模式簡(jiǎn)單示例
- 理解javascript中的MVC模式
- JSP使用MVC模式完成刪除和修改功能實(shí)例詳解
- JSP使用Servlet作為控制器實(shí)現(xiàn)MVC模式實(shí)例詳解
- C# MVC模式中應(yīng)該怎樣區(qū)分應(yīng)用程序邏輯(Controller層)和業(yè)務(wù)邏輯(Model層)?
- PHP的MVC模式實(shí)現(xiàn)原理分析(一相簡(jiǎn)單的MVC框架范例)
- MongoDB學(xué)習(xí)筆記(三) 在MVC模式下通過(guò)Jqgrid表格操作MongoDB數(shù)據(jù)
相關(guān)文章
JAVA實(shí)現(xiàn)基于Tcp協(xié)議的簡(jiǎn)單Socket通信實(shí)例
本篇文章主要介紹了JAVA實(shí)現(xiàn)基于Tcp協(xié)議的簡(jiǎn)單Socket通信實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
spring-boot-maven-plugin未指定版本導(dǎo)致的編譯錯(cuò)誤問(wèn)題
這篇文章主要介紹了spring-boot-maven-plugin未指定版本導(dǎo)致的編譯錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
SpringBoot項(xiàng)目調(diào)優(yōu)及垃圾回收器的比較詳解
這篇文章主要介紹了SpringBoot項(xiàng)目調(diào)優(yōu)及垃圾回收器的比較詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Spring Boot環(huán)境下Mybatis Plus的快速應(yīng)用操作
這篇文章主要介紹了Spring Boot環(huán)境下Mybatis Plus的快速應(yīng)用操作,具有很好的價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Java自動(dòng)取款機(jī)ATM案例實(shí)現(xiàn)
本文主要介紹了Java自動(dòng)取款機(jī)ATM案例實(shí)現(xiàn),整個(gè)過(guò)程可以分為三部分:登錄賬戶和執(zhí)行取款操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
Java?GenericObjectPool?對(duì)象池化技術(shù)之SpringBoot?sftp?連接池工具類詳解
這篇文章主要介紹了Java?GenericObjectPool?對(duì)象池化技術(shù)之SpringBoot?sftp?連接池工具類詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Spring Boot利用Java Mail實(shí)現(xiàn)郵件發(fā)送
這篇文章主要為大家詳細(xì)介紹了Spring Boot利用Java Mail實(shí)現(xiàn)郵件發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02

