Java--SSH,SSM和Spring?Boot框架區(qū)別及優(yōu)缺點(diǎn)說(shuō)明
一、SSH(Struts + Spring + Hibernate)
1、基本概念
SSH框架是JAVA EE中三種框架所集成,分別是Struts,Spring,Hibernate框架所組成
集成SSH框架的系統(tǒng)從職責(zé)上分為(Struts2--控制;Spring--解耦;Hibernate--操作數(shù)據(jù)庫(kù)),以幫助開(kāi)發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可服用好、維護(hù)方便的web應(yīng)用程序。
使用Struts作為系統(tǒng)的整體基礎(chǔ)框架,負(fù)責(zé)MVC的分離,在Struts框架的模型部分,控制業(yè)務(wù)跳轉(zhuǎn),利用Hibernate框架對(duì)持久層提供支持,Spring做管理,管理Struts和Hibernate。
2、Struts2
(1)基本概念
Struts2是一個(gè)基于MVC設(shè)計(jì)模式的web應(yīng)用框架,相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。Struts2在Struts1融合webwork。struts2以webwork為核心,采用攔截器的機(jī)制來(lái)處理用戶(hù)的請(qǐng)求,這樣的設(shè)計(jì)使得業(yè)務(wù)邏輯控制器能夠與servletAPI完全脫離。
(2)Struts2框架的運(yùn)行結(jié)構(gòu)

解析:客戶(hù)端發(fā)送請(qǐng)求(HttpServletRequest)到服務(wù)器,服務(wù)器接收到請(qǐng)求就先進(jìn)入web.xml配置文件看看有沒(méi)有配置過(guò)濾器,發(fā)現(xiàn)有有Struts2的過(guò)濾器,然后找到struts.xml配置文件,struts.xml配置文件里定義一個(gè)action,然后就去找到action類(lèi),此類(lèi)繼承ActionSupport接口,并且實(shí)現(xiàn)了execute()方法,返回一個(gè)字符串“success”給struts.xml配置文件,struts.xml配置文件的action會(huì)默認(rèn)調(diào)用action類(lèi)的execute()方法,result接收到返回的字符串,result就會(huì)調(diào)用你指定的jsp頁(yè)面將結(jié)果呈現(xiàn),最后響應(yīng)給客戶(hù)端。
(3)Struts2的優(yōu)勢(shì)
- 實(shí)現(xiàn)了MVC模式,層次結(jié)構(gòu)清晰,使程序員只需要關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn)。
- 豐富的標(biāo)簽庫(kù),大大提高了開(kāi)發(fā)的效率。
- Struts2提供豐富的攔截器實(shí)現(xiàn)。
- 通過(guò)配置文件,就可以掌握整個(gè)系統(tǒng)各個(gè)部分之間的關(guān)系。
- 異常處理機(jī)制,只需在配置文件中配置異常的映射,即可對(duì)異常做響應(yīng)的處理。
- Struts2的可擴(kuò)展性高。
- 面向切面編程的思想在Struts2中也有了很好的體現(xiàn)。
- 體現(xiàn)了攔截器的使用,攔截器是一個(gè)一個(gè)的小功能模塊,用戶(hù)可以將這些攔截器合并成一個(gè)大的攔截器,這個(gè)合成的攔截器就像單獨(dú)的攔截器一樣,只要將它配置到一個(gè)Action中就可以。
(4)Struts2的缺點(diǎn):
- 校驗(yàn)較繁瑣,多字段出錯(cuò)返回不同。
- 安全性太低
- 獲取傳參時(shí)較麻煩
2、Spring
(1)基本概念
Spring是一個(gè)開(kāi)源開(kāi)發(fā)框架,是一個(gè)輕量級(jí)控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。
spring主要用來(lái)開(kāi)發(fā)java應(yīng)用,構(gòu)建J2EE平臺(tái)的web應(yīng)用。其核心就是提供一種新的機(jī)制管理業(yè)務(wù)對(duì)象及其依賴(lài)關(guān)系。
(2)spring的流程圖

解析:上面是在Struts結(jié)構(gòu)圖的基礎(chǔ)上加入了spring流程圖,在web.xml配置文件中加入了spring的監(jiān)聽(tīng)器,在struts.xml配置文件中添加
<constant name="struts.objectFactory" value="spring" />
是告知Struts2運(yùn)行時(shí)使用spring來(lái)管理對(duì)象,spring在其中主要做的就是注入實(shí)例,所有需要類(lèi)的實(shí)例都由spring管理。
(3)spring的優(yōu)點(diǎn)
- 容器:spring是一個(gè)容器,包含并管理對(duì)象的生命周期和配置??梢耘渲妹總€(gè)bean如何被創(chuàng)建,基于一個(gè)可配置原型prototype,你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例。
- 支持AOP:spring提供對(duì)AOP的支持,它允許將一些通用任務(wù),如安全、事物、日志等進(jìn)行集中式處理,從而提高了程序的復(fù)用性。
- 輕量級(jí)框架:spring是輕量級(jí)框架,其基本的版本大約2M。
- 控制反轉(zhuǎn):spring通過(guò)控制反轉(zhuǎn)實(shí)現(xiàn)松耦合。對(duì)象們給他們依賴(lài),而不是對(duì)象本身,方便解耦,簡(jiǎn)化開(kāi)發(fā)。
- 方便程序測(cè)試:spring提供了Junit4的支持,可以通過(guò)注解方便的測(cè)試spring程序。
- 降低java EE API的使用難度:spring對(duì)java EE開(kāi)發(fā)中非常難用的一些API(比如JDBC),都提供了封裝,使這些API應(yīng)用難度大大降低。
- 方便集成各種優(yōu)秀框架:spring內(nèi)部提供了對(duì)各種優(yōu)秀框架(如Struts、mybatis)的直接支持。
- 支持聲明式事務(wù)處理:只需要通過(guò)配置就可以完成對(duì)事務(wù)的管理,而無(wú)須手動(dòng)編程。
(4)spring的缺點(diǎn)
- 依賴(lài)反射,反射影響進(jìn)程。
- 太過(guò)于依賴(lài)設(shè)計(jì)模式。
- 控制器過(guò)于靈活。
- 不支持分布式應(yīng)用。
3、Hibernate
(1)基本概念
Hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,它將POJO與數(shù)據(jù)庫(kù)表建立映射關(guān)系,是一個(gè)全自動(dòng)的orm框架,hibernate可以自動(dòng)生成SQL語(yǔ)句,自動(dòng)執(zhí)行,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。 Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶(hù)端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。
(2)hibernate的核心構(gòu)成和執(zhí)行流程圖


(3)hibernate的優(yōu)點(diǎn)
- 對(duì)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層繁瑣的重復(fù)性代碼。
- Hibernate是一個(gè)優(yōu)秀的ORM實(shí)現(xiàn)。他很大程度的簡(jiǎn)化DAO層的編碼工作,將軟件開(kāi)發(fā)人員從大量相同的數(shù)據(jù)持久層相關(guān)編程工作中解放出來(lái),使開(kāi)發(fā)更對(duì)象化了。
- 透明持久化(persistent)帶有持久化狀態(tài)的、具有業(yè)務(wù)功能的單線(xiàn)程對(duì)象,此對(duì)象生存期很短。這些對(duì)象可能是普通的javabeans/POJO,(POJO概念,plain ordinary java object,簡(jiǎn)單的java對(duì)象,可以簡(jiǎn)單理解為簡(jiǎn)單的實(shí)體類(lèi)entity。)這個(gè)對(duì)象沒(méi)有實(shí)現(xiàn)第三方框架或接口,唯一特殊的是他們正與session關(guān)聯(lián)。一旦這個(gè)session被關(guān)閉,這些對(duì)象就會(huì)脫離持久化狀態(tài),這樣就可被應(yīng)用程序的任何層自由使用。
- 事務(wù)transaction應(yīng)用程序用來(lái)指定原子操作單元范圍的對(duì)象,它是單線(xiàn)程的,生命周期很短。它通過(guò)抽象將應(yīng)用從底層具體的JDBC、JTA(java transaction API,JTA允許應(yīng)用程序執(zhí)行分布式事務(wù)處理,在兩個(gè)或多個(gè)網(wǎng)絡(luò)計(jì)算機(jī)資源訪問(wèn)并且更新數(shù)據(jù),JDBC驅(qū)動(dòng)程序的JTA支持極大地增強(qiáng)了數(shù)據(jù)訪問(wèn)能力)以及CORBA(公用對(duì)象請(qǐng)求代理程序體系結(jié)構(gòu),common object request broker architecture,簡(jiǎn)而言之,CORB允許應(yīng)用程序和其它的應(yīng)用程序通訊)事務(wù)隔離開(kāi)。某些情況下,一個(gè)session之內(nèi)可能包含多個(gè)transaction對(duì)象,事務(wù)邊界的開(kāi)啟與關(guān)閉時(shí)必不可少的。
- 它沒(méi)有侵入性,是輕量級(jí)框架。
- 移植性好,支持各種數(shù)據(jù)庫(kù),如果換個(gè)數(shù)據(jù)庫(kù)只要在配置文件中變換配置就可以了,不用改變hibernate代碼。
- 緩存機(jī)制,提供一級(jí)緩存和二級(jí)緩存。
一級(jí)緩存:是session級(jí)別的緩存,一個(gè)session做了一個(gè)查詢(xún)操作,它會(huì)把這個(gè)操作的結(jié)果放到一級(jí)緩存中,如果短時(shí)間內(nèi)這個(gè)session又做了同一個(gè)操作,那么hibernate直接從一級(jí)緩存中拿出,而不會(huì)去連數(shù)據(jù)庫(kù)取數(shù)據(jù)。
二級(jí)緩存:是sessionFactory級(jí)別的緩存,就是查詢(xún)的時(shí)候會(huì)把結(jié)果緩存到二級(jí)緩存中,如果同一個(gè)sessionFactory創(chuàng)建的某個(gè)session執(zhí)行了相同的操作,hibernate就會(huì)從二級(jí)緩存中拿出結(jié)果,而不會(huì)再去連接數(shù)據(jù)庫(kù)。
(4)hibernate的缺點(diǎn)
- 持久層封裝過(guò)于完整,導(dǎo)致開(kāi)發(fā)人員無(wú)法對(duì)SQL進(jìn)行優(yōu)化,無(wú)法靈活應(yīng)用原生SQL。
- 批量數(shù)據(jù)處理的時(shí)候較為弱勢(shì)。
- 框架中使用ORM原則,導(dǎo)致配置過(guò)于復(fù)雜,遇到大項(xiàng)目,維護(hù)問(wèn)題不斷。
二、SSM(Spring + SpringMVC + MyBatis)
SSM架構(gòu),是三層結(jié)合所成的框架,分別是Spring、SpringMVC、MyBatis所組成。
Spring依賴(lài)注入來(lái)管理各層,面向切面編程管理事務(wù),日志和權(quán)限。SpringMVC代表了model、view、controller接收外部請(qǐng)求,進(jìn)行開(kāi)發(fā)和處理。
mybatis是基于jdbc的框架,主要用來(lái)操作數(shù)據(jù)庫(kù),并且將業(yè)務(wù)實(shí)體和數(shù)據(jù)表聯(lián)系起來(lái)。
1、Spring
詳細(xì)介紹見(jiàn)SSH中spring。
2、SpringMVC
(1)基本概念
屬于spring框架的一部分,用來(lái)簡(jiǎn)化MVC架構(gòu)的web應(yīng)用程序開(kāi)發(fā)。
(2)SpringMVC的優(yōu)點(diǎn)
- 擁有強(qiáng)大的靈活性,非侵入性和可配置性
- 提供了一個(gè)前端控制器dispatcherServlet,開(kāi)發(fā)者無(wú)需額外開(kāi)發(fā)控制器對(duì)象
- 分工明確,包括控制器、驗(yàn)證器、命令對(duì)象、模型對(duì)象、處理程序映射視圖解析器,每一個(gè)功能實(shí)現(xiàn)由一個(gè)專(zhuān)門(mén)的對(duì)象負(fù)責(zé)完成
- 可以自動(dòng)綁定用戶(hù)輸入,并正確的轉(zhuǎn)換數(shù)據(jù)類(lèi)型
- 可重用的業(yè)務(wù)代碼:可以使用現(xiàn)有的業(yè)務(wù)對(duì)象作為命令或表單對(duì)象,而不需要去擴(kuò)展某個(gè)特定框架的基類(lèi)。
(3)SpringMVC的缺點(diǎn)
- servlet API耦合難以脫離容器獨(dú)立運(yùn)行
- 太過(guò)于細(xì)分,開(kāi)發(fā)效率低
3、Mybatis
(1)基本概念
mybatis是一個(gè)簡(jiǎn)化和實(shí)現(xiàn)了java數(shù)據(jù)持久層的開(kāi)源框架,它抽象了大量的JDBC冗余代碼,并提供了一個(gè)簡(jiǎn)單易用的API和數(shù)據(jù)庫(kù)交互。
(2)mybatis的優(yōu)點(diǎn)
- 與JDBC相比,減少了50%以上的代碼量。
- mybatis是最簡(jiǎn)單的持久化框架,小巧并且簡(jiǎn)單易學(xué)。
- mybatis靈活,不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的限售設(shè)計(jì)強(qiáng)加任何影響,SQL寫(xiě)在XML里,從程序代碼中徹底分離,降低耦合度,便于統(tǒng)一管理和優(yōu)化,可重用。
- 提供XML標(biāo)簽,支持編寫(xiě)動(dòng)態(tài)SQL語(yǔ)句(XML中使用if,else)。
- 提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的ORM字段關(guān)系映射(在XML中配置映射關(guān)系,也可以使用注解)
(3)mybatis的缺點(diǎn)
- SQL語(yǔ)句的編寫(xiě)工作量較大,對(duì)開(kāi)發(fā)人員的SQL語(yǔ)句編寫(xiě)有一定的水平要求。
- SQL語(yǔ)句過(guò)于依賴(lài)數(shù)據(jù)庫(kù),不能隨意更換數(shù)據(jù)庫(kù)。
- 拼接復(fù)雜SQL語(yǔ)句時(shí)不靈活。
最受Java開(kāi)發(fā)者喜好的框架當(dāng)屬Spring,Spring也成為了在Java EE開(kāi)發(fā)中真正意義上的標(biāo)準(zhǔn),但是隨著新技術(shù)的發(fā)展,腳本語(yǔ)言大行其道的時(shí)代(Node JS,Ruby,Groovy,Scala等),Java EE使用Spring逐漸變得笨重起來(lái),大量的XML文件存在與項(xiàng)目中,繁瑣的配置,整合第三方框架的配置問(wèn)題,低下的開(kāi)發(fā)效率和部署效率等等問(wèn)題。
這些問(wèn)題在不斷的社區(qū)反饋下,Spring團(tuán)隊(duì)也開(kāi)發(fā)出了相應(yīng)的框架:Spring Boot。Spring Boot可以說(shuō)是至少近5年來(lái)Spring乃至整個(gè)Java社區(qū)最有影響力的項(xiàng)目之一,也被人看作是:Java EE開(kāi)發(fā)的顛覆者!
Spring Boot
是一個(gè)全新框架,使用來(lái)簡(jiǎn)化Spring的初始搭建和開(kāi)發(fā)過(guò)程,使用了特定的方式來(lái)進(jìn)行配置,讓開(kāi)發(fā)人員不在需要定義樣板化的配置。此框架不需要配置xml,依賴(lài)于像MAVEN這樣的構(gòu)建系統(tǒng)。
三、Spring Boot
官方地址:Spring Boot

1、Spring Boot基本概念
springboot是一個(gè)全新的框架,簡(jiǎn)化Spring的初始搭建和開(kāi)發(fā)過(guò)程,使用了特定的方式來(lái)進(jìn)行配置,讓開(kāi)發(fā)人員不再需要定義樣板化的配置。此框架不需要配置xml,依賴(lài)于maven這樣的構(gòu)建系統(tǒng)。
2、Spring Boot的優(yōu)點(diǎn)
(1)減少了大量的開(kāi)發(fā)時(shí)間并提高了生產(chǎn)力
(2)避免了編寫(xiě)大量的樣板代碼,注釋和XML配置
(3)解決了spring的弊端
(4)代碼少了、配置文件少了、不需要對(duì)第三方框架煩惱了、項(xiàng)目精簡(jiǎn)了,對(duì)整個(gè)團(tuán)隊(duì)的開(kāi)發(fā)和維護(hù)來(lái)說(shuō),更大的節(jié)約了成本。
3、Spring Boot的缺點(diǎn)
(1)修復(fù)bug較慢,報(bào)錯(cuò)時(shí)難以定位。
(2)集成度較高,不易于了解底層。
4、Spring Boot總結(jié)
簡(jiǎn)單、快速、方便的搭建項(xiàng)目;對(duì)主流開(kāi)發(fā)框架的無(wú)配置集成;極大提高了開(kāi)發(fā)、部署效率。
5、Spring Boot和Spring的區(qū)別
(1)springboot可以建立獨(dú)立的spring應(yīng)用程序。
(2)內(nèi)嵌了如tomcat,Jetty和Undertow這樣的容器,也就是說(shuō)可以直接跑起來(lái),用不著再做部署工作。
(3)無(wú)需再像spring那樣寫(xiě)一堆繁瑣的XML配置文件
(4)可以自動(dòng)配置spring
(5)提供的POM可以簡(jiǎn)化maven的配置
6、Spring Boot和SpringMVC的區(qū)別
(1)SpringMVC是基于spring的一個(gè)MVC框架。
(2)Spring Boot的基于spring的條件注冊(cè)的一套快速開(kāi)發(fā)整合包。
(3)Spring 是一個(gè)“引擎”
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Security?OAuth?Client配置加載源碼解析
這篇文章主要為大家介紹了Spring?Security?OAuth?Client配置加載源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
關(guān)于java連接池/線(xiàn)程池/內(nèi)存池/進(jìn)程池等匯總分析
這篇文章主要介紹了關(guān)于java連接池/線(xiàn)程池/內(nèi)存池/進(jìn)程池等匯總分析,本文將介紹池技術(shù)的由來(lái)、原理、優(yōu)缺點(diǎn)以及常見(jiàn)的池技術(shù)類(lèi)型,需要的朋友可以參考下2023-04-04
詳解Spring Cloud Eureka多網(wǎng)卡配置總結(jié)
本篇文章主要介紹了詳解Spring Cloud Eureka多網(wǎng)卡配置總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之教室預(yù)訂管理系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+SpringBoot+Maven+Vue+mysql開(kāi)發(fā)的教室預(yù)訂管理系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有教室預(yù)訂管理該有的所有功能,感興趣的朋友快來(lái)看看吧2022-02-02
mybatis-plus與mybatis共存的實(shí)現(xiàn)
本文主要介紹了mybatis-plus與mybatis共存的實(shí)現(xiàn),文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
淺談在頁(yè)面中獲取到ModelAndView綁定的值方法
下面小編就為大家分享一篇淺談在頁(yè)面中獲取到ModelAndView綁定的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
spring-boot List轉(zhuǎn)Page的方法步驟
這篇文章主要介紹了spring-boot List轉(zhuǎn)Page的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
java報(bào)錯(cuò)非法的前向引用問(wèn)題
這篇文章主要介紹了java報(bào)錯(cuò)非法的前向引用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
Java JTable 實(shí)現(xiàn)日歷的示例
這篇文章主要介紹了Java JTable 實(shí)現(xiàn)日歷的示例,幫助大家更好的理解和學(xué)習(xí)Java jtable的使用方法,感興趣的朋友可以了解下2020-10-10

