SSH與SSM的組成及其區別

前言

  當下SpringBoot盛行,咱再聊聊SpringBoot盛行之前的框架組合,當做複習鞏固哈。

  在聊之前,得先說說MVC,MVC全名是Model View Controller,是模型(model)--視圖(view)--控制器(controller)的縮寫。M是指業務模型,V是指用戶界面,C則是控制器。

  一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。

  本人是在學校的時候學過SSH和SSM,並用該框架組合做了幾個私單,算是給大學生活餐加點外快吧,哈哈

一、SSH和SSM的定義:

  SSH:指的是Struts2(做前端控制器),Spring(管理各層的組件),Hibernate(負責持久化層)

  SSM:指的是SpringMVC(做前端控制器),Spring(管理各層的組件),Mybatis(負責持久化層)

二、SSH和SSM的實現原理:

  

  1、Struts2的原理:  

 

  Struts2框架執行過程:

  1)、客戶端初始化一個指向Servlet容器(例如tomcat)的請求;

  2)、這個請求經過一系列的過濾器(Filter),這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin

  3)、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請求是否需要調用某個Action,FilterDispatcher是控制器的核心,就是mvc中c控制層的核心

  4)、如果ActionMapper決定需要調用某個Action,FilterDispatcher會把請求的處理交給ActionProxy;

  5)、ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類;

  6)、ActionProxy創建一個ActionInvocation的實例;

  7)、ActionInvocation實例使用命名模式來調用,在調用Action的過程前後,會涉及到相關攔截器(Intercepter) 的調用;

  8)、一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是一個需要被表示的JSP或者FreeMarker的模板;

  9)、將處理結果返回給客戶端。

  2、SpringMVC的原理:

  SpringMVC框架執行過程:

  1)、客戶端發出一個http請求給web服務器,web服務器對http請求進行解析,如果匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉交給DispatcherServlet;

  2)、DispatcherServlet接收到這個請求之後將根據請求的信息(包括URL、Http方法、請求報文頭和請求參數Cookie等)以及HandlerMapping的配置找到處理請求的處理器(Handler)

  3)、DispatcherServlet根據HandlerMapping找到對應的Handler,並返回;

  4)、將處理權交給Handler(Handler將具體的處理進行封裝),再由具體的處理器適配器(HandlerAdapter)對Handler進行具體的調用;

  5)、處理器適配器執行Handler;

  6)、Handler對數據處理完成以後將返回一個ModelAndView對象給處理器適配器;

  7)、處理器適配器向前端控制器返回ModelAndView(ModelAndView是SpringMVC框架的一個底層對象,包括Model和View);

  8)、Handler返回的ModelAndView只是一個邏輯視圖,並不是一個正式的視圖,前端控制器請求視圖解析器(ViewResolver)去進行視圖解析,根據邏輯視圖名解析成真正的視圖(jsp);

  9)、視圖解析器向前端控制器返回View;

  10)、前端控制器進行視圖渲染,視圖渲染將模型數據(在ModelAndView對象中)填充到request域中;

  11)、前端控制器向用戶響應結果。

  3、Hibernate的原理:

 

  Hibernate框架執行過程:

  1)、通過Configuration().configure();讀取並解析hibernate.cfg.xml配置文件;

  2)、由hibernate.cfg.xml中的讀取並解析映射信息;

  3)、通過config.buildSessionFactory(); //創建SessionFactory

  4)、sessionFactory.openSession();  //打開Session

  5)、session.beginTransaction();  //創建事務Transaction

  6)、persistent operate持久化操作;

  7)、session.getTransaction().commit();  //提交事務

  8)、關閉Session;

  9)、關閉SessionFactory;

  4、Mybatis原理:

  Mybatis框架執行過程:

  1)、配置Mybatis的配置文件,SqlMapConfig.xml(名稱不固定)

  2)、通過配置文件,加載Mybatis運行環境,創建SqlSessionFactory會話工廠SqlSessionFactory在實際使用時按單例方式;

  3)、通過SqlSessionFactory創建SqlSession,SqlSession是一個面向用戶接口(提供操作數據庫方法),實現對象是線程不安全的,建議sqlSession應用場合在方法體內;

  4)、調用SqlSession的方法去操作數據。如果需要提交事務,需要執行SqlSession的commit()方法;

  5)、釋放資源,關閉SqlSession。

  4、Spring家族:

三、對比:

  1、Struts2與SpringMVC兩種框架對比:

  1)不同之處:

    ①、springmvc和struts2都是負責去轉發的,但是兩者針對request的請求上面區別很大。

      springmvc是針對於方法級別的請求,也就是一個方法對應於一個請求,屬於方法攔截,請求的數據方法不共享;而struts2則時針對一個Action類來進行請求的,即一個Action類對應於一個請求,所以類攔截,請求的數據類共享;

    ②、springmvc入口是一個servlet前端控制器(DispatcherServlet),struts2入口是一個filter過濾器;

    ③、springmvc的配置文件相對struts2來說較爲少,容易上手,可以加快軟件開發的速度。

  2、Hibernate和Mybatis兩種框架對比:

  1)、相同之處:

    ①:Hibernate與Mybatis都可以是通過SessionFactoryBuilder,由XML配置文件生成SessionFactory,然後由SessionFactory生成Session,最後由Session來開啓執行事務和SQL語句。其中SessionFactoryBuilder,SessionFactory,Session的生命週期都是差不多的;

    ②、Hibernate和Mybatis都支持JDBC和JTA事務處理。

  2)、不同之處:

    ①、Hibernate是一種O/R關係型,即完成數據庫表和持久化類之間的映射,而Mybatis是針對的SQL-Mapping,個人理解是一種Hibernate把數據庫給封裝好以後,可以調用相應的數據庫操作語句HQL,而Mybatis則是用的原始的數據庫操作語句;

    ②、針對高級查詢,Mybatis需要手動編寫SQL語句,以及ResultMap。而Hibernate有良好的映射機制,開發者無需關心SQL的生成與結果映射,可以更專注於業務流程;

    ③、Hibernate優化起來相對Mybatis較難,而且Hibernate掌握起來相對Mybatis較難,但是Hibernate數據庫移植性很好,Mybatis的數據庫移植性不好,不同的數據庫需要寫不同SQL。

四、總結:

  SSM和SSH相同之處在於都是用Spring依賴注入DI來管理各層的組件,並且都是使用面向切面編程AOP來管理事務、日誌、權限等。不同之處在於MVC實現方式,以及ORM持久化方面不同(Hibernate與Mybatis)。SSM越來越輕量級配置,將註解開發發揮到極致,且ORM實現更加靈活,SQL優化更簡便;而SSH較注重配置開發,其中的Hibernate對JDBC的完整封裝更面向對象,對增刪改查的數據維護更自動化,但SQL優化方面較弱,且入門門檻稍高。

 

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