天天看點

java web的三大架構是什麼_淺談javaweb三大架構和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第二代有所改進,把業務邏輯的内容放到了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,但是我認為讨論這個問題沒有太大的必要。我們大可将他作為一種思想,我們需要做的僅僅是了解它,應用它,掌握其中的思想,這才是我們需要做的

Struts2、spring2、hibernate3在SSH中各起什麼作用

簡單的說:

struts 控制用的

hibernate 操作資料庫的

spring用解耦的

詳細的說:

STRUTS 在 SSH 架構中起控制的作用 , 其核心是 Controller, 即 ActionServlet, 而 ActionServlet 的核心就是Struts-confi g.xml. 主要控制邏輯關系的處理 .

hibernate 是資料持久化層 , 是一種新的對象、關系的映射工具 , 提供了從 Java 類到資料表的映射,也提供了資料查詢和恢複等機制 , 大大減少資料通路的複雜度。把對資料庫的直接操作 , 轉換為對持久對象的操作 .

SPRING 是一個輕量級的控制反轉 (IoC) 和面向切面 (AOP) 的容器架構 , 面向接口的程式設計 , 由容器控制程式之間的(依賴)關系,而非傳統實作中,由程式代碼直接操控。這也就是所謂 “ 控制反轉 ” 的概念所在:(依賴)控制權由應用代碼中轉到了外部容器,控制權的轉移,是所謂反轉。依賴注入,即元件之間的依賴關系由容器在運作期決定,形象的來說,即 由容器動态的将某種依賴關系注入到元件之中

起到的主要作用是解耦

Struts 、 spring 、 Hibernate 在各層的作用

1 ) struts 負責 web 層 .

ActionFormBean 接收網頁中表單送出的資料,然後通過 Action 進行處理,再 Forward 到對應的網頁。

在 struts-config.xml 中定義 ,

ActionServlet 會加載。

2 ) spring 負責業務層管理,即 Service (或 Manager).

1 . service 為 action 提供統計的調用接口,封裝持久層的 DAO.

2 .可以寫一些自己的業務方法。

3 .統一的 javabean 管理方法

4 .聲明式事務管理

5. 內建 Hiberante

3 ) Hiberante ,負責持久化層,完成資料庫的 crud 操作

hibernate 為持久層,提供 OR/Mapping 。

它有一組 .hbm.xml 檔案和 POJO, 是跟資料庫中的表相對應的。然後定義 DAO ,這些是跟資料庫打交道的類,它們會使用 PO 。

在 struts+spring+hibernate 的系統中,

對象的調用流程是: jsp-> Action - > Service ->DAO

->Hibernate 。

資料的流向是 ActionFormBean 接受使用者的資料, Action 将資料從 ActionFromBean 中取出,封裝成 VO 或 PO,

再調用業務層的 Bean 類,完成各種業務處理後再 forward 。而業務層 Bean 收到這個 PO 對象之後,會調用 DAO 接口方法,進行持久化操作。