MVC框架簡介,SSH 和SSM

MVC 框架的交互圖:

這裏寫圖片描述
(1). 用戶在瀏覽器輸入地址,向頁面發送請求(實則是向控制器發出相關命令);
(2). 控制器接受命令後,向模型請求獲得相關的數據;
(3). 模型將相應的數據返回給控制器;
(4). 控制器將相關數據發送到指定的視圖;
(5). 指定的視圖呈現相關的數據。
目前流行的企業開發MVC框架的實現 由SSH(Spring,Struts2 ,hibernate) 和SSM (Spring,SpringMVC, Mybatis)兩種組成。
兩種框架的對比:
共同點: 都是使用Spring來作爲容器管理對象和組件
1.Spring 依賴注入DI來管理各層的組件。
2.使用面向切面編程AOP管理事物、日誌、權限等。
不同點:
1. SSH 採用Structs2做控制器,SSM採用SpringMVC做控制器,兩種控制器的控制視圖和模型的交互機制不同,Struts2是Action 類級別,SpringMVC 是方法級別,更容易實現REST風格。
2. SSM 使用 Hibernate 來完成對象持久化的工作,SSM使用MyBatis來完成對象持久化的工作
3. SSM越來越輕量級配置,將註解開發發揮到極致,且ORM實現更加靈活,SQL優化更簡便;而SSH較注重配置開發,其中的Hibernate對JDBC的完整封裝更面向對象,對增刪改查的數據維護更自動化,但SQL優化方面較弱,且入門門檻稍高

SpringMVC 和 Structs2的對比:
Struts2框架執行步驟(Struts2使用Filter嵌入):
1. 客戶端發起一個http請求,這個請求經過一系列過濾器Filter(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助)
2. 接着FilterDispatcher被調用,FilterDispatcher會詢問ActionMapper來決定這個請求是否需要調用某個Action, 如果能夠調用某個action,則FilterDispatcher將請求發送給ActionProxy,
3. ActionProxy 通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類
4. ActionProxy創建一個ActionInvocation的實例,該實例使用命名模式來調用,在調用Action的過程前後,涉及到相關攔截器(Intercepter)的調用,一旦Action執行完畢, ActionInvocation 負責根據struts.xml中的配置找到對應的返回結果,
5. 將處理結果返回給客戶端
這裏寫圖片描述

SpringMVC框架執行步驟(SpringMVC使用Servlet嵌入)
1、客戶端發出一個http請求給web服務器,web服務器對http請求進行解析,如果匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉交給DispatcherServlet.
2、DipatcherServlet接收到這個請求之後將根據請求的信息(包括URL、Http方法、請求報文頭和請求參數Cookie等)以及HandlerMapping的配置找到處理請求的處理器(Handler)。
3-4、DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler(Handler將具體的處理進行封裝),再由具體的HandlerAdapter對Handler進行具體的調用。
5、Handler對數據處理完成以後將返回一個ModelAndView()對象給DispatcherServlet。
6、Handler返回的ModelAndView()只是一個邏輯視圖並不是一個正式的視圖,DispatcherSevlet通過ViewResolver將邏輯視圖轉化爲真正的視圖View。
7、Dispatcher通過model解析出ModelAndView()中的參數進行解析最終展現出完整的view並返回給客戶端。
這裏寫圖片描述

Hibernate 和 MyBatis 兩種ORM框架對比
java訪問數據庫的唯一方式就是JDBC, 其實Hibernate 和MyBatis 就是對JDBC的二次封裝,完成對象持久化的工作(常說的DAO層就是數據持久層)
相同點:
1. Hibernate與MyBatis都可以是通過SessionFactoryBuider由XML配置文件生成 SessionFactory,然後由SessionFactory 生成Session,最後由Session來開啓執行事務和SQL語句。其中SessionFactoryBuider,SessionFactory,Session的生命週期都是差不多的。
2. Hibernate和MyBatis都支持JDBC和JTA事務處理

各自的優勢所在:
第一:
Hibernate 封裝性好,屏蔽了數據庫差異,數據庫移植性很好,能夠自動生成SQL語句,但是SQL語句優化困難;
MyBatis僅實現了SQL語句和對象的映射,需要針對具體的數據庫寫SQL語句,因此數據庫的移植性不好, 不同的數據庫需要寫不同的SQL語句,可以進行更爲細緻的SQL優化,可以減少查詢字段
第二:
Hibernate對對象的維護要比MyBatis好,更加的面向對象,對增刪改查的對象的維護要方便; Hibernate有更好的二級緩存機制,可以使用第三方緩存。MyBatis本身提供的緩存機制不佳,更新操作不能指定刷新指定記錄,會清空整個表,但是也可以使用第三方緩存。
附上Spring 家族
這裏寫圖片描述

以上內容基本上轉載自
http://blog.csdn.net/pingdouble/article/details/52848007

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章