Web項目框架那些事兒

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項目框架那些基本概念算是說清楚了激挪,歡迎有不同的理解一起探討~辰狡!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市垄分,隨后出現(xiàn)的幾起案子宛篇,更是在濱河造成了極大的恐慌,老刑警劉巖薄湿,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叫倍,死亡現(xiàn)場離奇詭異偷卧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)吆倦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門听诸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逼庞,你說我怎么就攤上這事蛇更。” “怎么了赛糟?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵派任,是天一觀的道長。 經(jīng)常有香客問我璧南,道長掌逛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任司倚,我火速辦了婚禮豆混,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘动知。我一直安慰自己皿伺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布盒粮。 她就那樣靜靜地躺著鸵鸥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丹皱。 梳的紋絲不亂的頭發(fā)上妒穴,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機(jī)與錄音摊崭,去河邊找鬼讼油。 笑死,一個胖子當(dāng)著我的面吹牛呢簸,可吹牛的內(nèi)容都是我干的矮台。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼根时,長吁一口氣:“原來是場噩夢啊……” “哼瘦赫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啸箫,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伞芹,沒想到半個月后忘苛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝉娜,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年扎唾,在試婚紗的時候發(fā)現(xiàn)自己被綠了召川。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡胸遇,死狀恐怖荧呐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纸镊,我是刑警寧澤倍阐,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站逗威,受9級特大地震影響峰搪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凯旭,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一概耻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧罐呼,春花似錦鞠柄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至差凹,卻和暖如春期奔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背危尿。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工呐萌, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谊娇。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓肺孤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親济欢。 傳聞我的和親對象是個殘疾皇子赠堵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容