SSH和SSM定義
比較流行的兩種企業(yè)開發(fā)MVC開源框架苇瓣。MVC,即模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯锦亦、數(shù)據(jù)、界面顯示分離的方法組織代碼令境,將業(yè)務(wù)邏輯聚集到一個部件里面杠园,在改進(jìn)和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務(wù)邏輯舔庶∨滓希框架之所以流行陈醒,在于其易復(fù)用和簡化開發(fā),精髓在思想篮绿,掌握了核心思想孵延,我們掌握其他類似框架也不會有問題,建議大家有精力的話讀一下框架源碼亲配,尤其是Spring尘应。
SSH?通常指的是 Struts2 做控制器(controller),spring 管理各層的組件吼虎,hibernate 負(fù)責(zé)持久化層犬钢。
SSM?則指的是 SpringMVC 做控制器(controller),Spring 管理各層的組件思灰,MyBatis 負(fù)責(zé)持久化層玷犹。
共同點:1. Spring依賴注入DI來管理各層的組件。 2. 使用面向切面編程AOP管理事物洒疚、日志歹颓、權(quán)限等。
不同點:Struts2 和 SpringMVC 控制器(controller)控制視圖和模型的交互機(jī)制的不同,Struts2是Action類級別油湖,SpringMVC是方法級別巍扛,更容易實現(xiàn)RESTful風(fēng)格。
SSH 和 SSM 的實現(xiàn)原理
1.????Struts2 的實現(xiàn)原理
Struts2框架執(zhí)行步驟(Struts2使用Filter嵌入):
1)乏德、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
2)撤奸、這個請求經(jīng)過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助
3)喊括、接著FilterDispatcher被調(diào)用胧瓜,F(xiàn)ilterDispatcher詢問ActionMapper來決定這個請求是否需要調(diào)用某個Action
4)、如果ActionMapper決定需要調(diào)用某個Action郑什,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy
5)府喳、ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調(diào)用的Action類
6)蹦误、ActionProxy創(chuàng)建一個ActionInvocation的實例劫拢。
7)、ActionInvocation實例使用命名模式來調(diào)用强胰,在調(diào)用Action的過程前后舱沧,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。
8)偶洋、一旦Action執(zhí)行完畢熟吏,ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果。返回結(jié)果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版牵寺。
9)悍引、將處理結(jié)果返回給客戶端
2.????SpringMVC 的實現(xiàn)原理
SpringMVC框架執(zhí)行步驟(SpringMVC使用Servlet嵌入):
1)、客戶端發(fā)出一個http請求給web服務(wù)器帽氓,web服務(wù)器對http請求進(jìn)行解析趣斤,如果匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉(zhuǎn)交給DispatcherServlet.
2)黎休、DipatcherServlet接收到這個請求之后將根據(jù)請求的信息(包括URL浓领、Http方法、請求報文頭和請求參數(shù)Cookie等)以及HandlerMapping的配置找到處理請求的處理器(Handler)势腮。
3)联贩、DispatcherServlet根據(jù)HandlerMapping找到對應(yīng)的Handler,將處理權(quán)交給Handler(Handler將具體的處理進(jìn)行封裝),再由具體的HandlerAdapter對Handler進(jìn)行具體的調(diào)用捎拯。
4)泪幌、Handler對數(shù)據(jù)處理完成以后將返回一個ModelAndView()對象給DispatcherServlet。
5)署照、Handler返回的ModelAndView()只是一個邏輯視圖并不是一個正式的視圖祸泪,DispatcherSevlet通過ViewResolver將邏輯視圖轉(zhuǎn)化為真正的視圖View。
6)建芙、Dispatcher通過model解析出ModelAndView()中的參數(shù)進(jìn)行解析最終展現(xiàn)出完整的view并返回給客戶端浴滴。
Struct和Spring-MVC框架對比
Struct和Spring-MVC都是負(fù)責(zé)取轉(zhuǎn)發(fā)的,但是兩者針對request的請求上面區(qū)別很大岁钓,Struct是針對一個Action類來進(jìn)行請求的,即一個Action類對應(yīng)于一個請求微王,所以類攔截屡限,請求的數(shù)據(jù)類共享。而Spring-MVC則是針對于方法級別的請求的炕倘,也就是一個方法對應(yīng)于一個請求钧大,屬于方法攔截,請求的數(shù)據(jù)方法不共享罩旋。
Spring-MVC的配置文件相對來說較為少啊央,容易上手,可以加快軟件開發(fā)的速度涨醋,親身體驗有效瓜饥。
Spring-MVC的入口是Servlet級別的而Struct的級別是Filter級別的。
Hibernate 和 MyBatis 兩種ORM框架對比
兩者的相同點
Hibernate與MyBatis都可以是通過SessionFactoryBuider由XML配置文件生成SessionFactory浴骂,然后由SessionFactory
生成Session乓土,最后由Session來開啟執(zhí)行事務(wù)和SQL語句。其中SessionFactoryBuider,SessionFactory趣苏,Session的生命周期都是差不多的狡相。
Hibernate和MyBatis都支持JDBC和JTA事務(wù)處理。
兩者各自優(yōu)勢
MyBatis可以進(jìn)行更為細(xì)致的SQL優(yōu)化食磕,可以減少查詢字段尽棕。
MyBatis容易掌握,而Hibernate門檻較高彬伦。
Hibernate的DAO層開發(fā)比MyBatis簡單滔悉,Mybatis需要維護(hù)SQL和結(jié)果映射。
Hibernate對對象的維護(hù)和緩存要比MyBatis好媚朦,對增刪改查的對象的維護(hù)要方便氧敢。
Hibernate數(shù)據(jù)庫移植性很好,MyBatis的數(shù)據(jù)庫移植性不好询张,不同的數(shù)據(jù)庫需要寫不同SQL孙乖。
Hibernate有更好的二級緩存機(jī)制,可以使用第三方緩存份氧。MyBatis本身提供的緩存機(jī)制不佳唯袄,更新操作不能指定刷新指定記錄,會清空整個表蜗帜,但是也可以使用第三方緩存恋拷。
Hibernate 封裝性好,屏蔽了數(shù)據(jù)庫差異厅缺,自動生成SQL語句蔬顾,應(yīng)對數(shù)據(jù)庫變化能力較弱,SQL語句優(yōu)化困難湘捎。
MyBatis僅實現(xiàn)了SQL語句和對象的映射诀豁,需要針對具體的數(shù)據(jù)庫寫SQL語句,應(yīng)對數(shù)據(jù)庫變化能力較強(qiáng)窥妇,SQL語句優(yōu)化較為方便舷胜。
總結(jié):
SSM和SSH不同主要在MVC實現(xiàn)方式,以及ORM持久化方面不同(Hiibernate與Mybatis)活翩。SSM越來越輕量級配置烹骨,將注解開發(fā)發(fā)揮到極致,且ORM實現(xiàn)更加靈活材泄,SQL優(yōu)化更簡便沮焕;而SSH較注重配置開發(fā),其中的Hibernate對JDBC的完整封裝更面向?qū)ο罄冢瑢υ鰟h改查的數(shù)據(jù)維護(hù)更自動化遇汞,但SQL優(yōu)化方面較弱,且入門門檻稍高。
附Spring 家族:
Spring空入、SpringMVC和SpringBoot的區(qū)別
spring boot就是一個大框架里面包含了許許多多的東西络它,其中spring就是最核心的內(nèi)容之一,當(dāng)然就包含spring mvc歪赢。
spring mvc 只是spring 處理web層請求的一個模塊化戳。
因此他們的關(guān)系大概就是這樣:spring mvc < spring <?spring boot?
spring boot 是把 spring spring mvc spring data jpa 等等的一些常用的常用的基礎(chǔ)框架組合起來,提供默認(rèn)的配置埋凯,然后提供可插拔的設(shè)計点楼,就是各種 starter ,來方便開發(fā)者使用這一系列的技術(shù)白对,spring boot 就是來解決開發(fā)中復(fù)雜配置問題的掠廓。開發(fā)可以先不關(guān)心如何配置,可以快速的啟動開發(fā)甩恼,進(jìn)行業(yè)務(wù)邏輯編寫蟀瞧,各種需要的技術(shù)。
spring 框架有超多的延伸產(chǎn)品例如 boot security jpa etc... 但它的基礎(chǔ)就是 spring 的 ioc 和 aop ioc 提供了依賴注入的容器 aop 解決了面向橫切面的編程 然后在此兩者的基礎(chǔ)上實現(xiàn)了其他延伸產(chǎn)品的高級功能 条摸。Spring MVC 是基于 Servlet 的一個 MVC 框架 主要解決 WEB 開發(fā)的問題 因為 Spring 的配置太復(fù)雜了 各種 XML JavaConfig hin悦污, 麻煩 。于是懶人改變世界推出了 Spring boot 約定優(yōu)于配置 簡化了 spring 的配置流程钉蒲。
Spring 最初利用“工廠模式”( DI )和“代理模式”( AOP )解耦應(yīng)用組件切端。大家覺得挺好用,于是按照這種模式搞了一個 MVC 框架(一些用 Spring 解耦的組件)顷啼,用開發(fā) web 應(yīng)用( SpringMVC )踏枣。然后有發(fā)現(xiàn)每次開發(fā)都要搞很多依賴,寫很多樣板代碼很麻煩钙蒙,于是搞了一些懶人整合包( starter )椰于,這套就是 Spring Boot 。
Spring MVC提供了一種輕度耦合的方式來開發(fā)web應(yīng)用仪搔。
Spring MVC是Spring的一個模塊,式一個web框架蜻牢。通過Dispatcher Servlet, ModelAndView 和 View Resolver烤咧,開發(fā)web應(yīng)用變得很容易。解決的問題領(lǐng)域是網(wǎng)站應(yīng)用程序或者服務(wù)開發(fā)——URL路由抢呆、Session煮嫌、模板引擎、靜態(tài)Web資源等等抱虐。
Spring Boot實現(xiàn)了自動配置昌阿,降低了項目搭建的復(fù)雜度。
眾所周知Spring框架需要進(jìn)行大量的配置,Spring Boot引入自動配置的概念懦冰,讓項目設(shè)置變得很容易灶轰。Spring Boot本身并不提供Spring框架的核心特性以及擴(kuò)展功能,只是用于快速刷钢、敏捷地開發(fā)新一代基于Spring框架的應(yīng)用程序笋颤。也就是說,它并不是用來替代Spring的解決方案内地,而是和Spring框架緊密結(jié)合用于提升Spring開發(fā)者體驗的工具伴澄。同時它集成了大量常用的第三方庫配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot應(yīng)用中這些第三方庫幾乎可以零配置的開箱即用(out-of-the-box)阱缓,大部分的Spring Boot應(yīng)用都只需要非常少量的配置代碼非凌,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。
Spring Boot只是承載者荆针,輔助你簡化項目搭建過程的敞嗡。如果承載的是WEB項目,使用Spring MVC作為MVC框架祭犯,那么工作流程和你上面描述的是完全一樣的秸妥,因為這部分工作是Spring MVC做的而不是Spring Boot。
對使用者來說沃粗,換用Spring Boot以后粥惧,項目初始化方法變了,配置文件變了最盅,另外就是不需要單獨安裝Tomcat這類容器服務(wù)器了突雪,maven打出jar包直接跑起來就是個網(wǎng)站,但你最核心的業(yè)務(wù)邏輯實現(xiàn)與業(yè)務(wù)流程實現(xiàn)沒有任何變化涡贱。
所以咏删,用最簡練的語言概括就是:
Spring?是一個“引擎”;
Spring MVC?是基于Spring的一個?MVC?框架问词;
Spring Boot?是基于Spring4的條件注冊的一套快速開發(fā)整合包督函。
到此,Web項目框架那些基本概念算是說清楚了激挪,歡迎有不同的理解一起探討~辰狡!