(全網最全Java框架總結)SSH、SSM、Springboot

一、SSH

1、基本概念

SSH框架是JAVA EE中三種框架所整合,分別是Struts,Spring,Hibernate框架所組成,是當前比較流行的java web開源框架。

整合SSH框架的系統從職責上分為(Struts2——控制;spring——解耦;hibernate——操作資料庫),以幫助開發人員在短期內搭建結構清晰、可服用好、維護方便的web應用程式。使用Struts作為系統的整體基礎框架,負責MVC的分離,在Struts框架的模型部分,控制業務跳轉,利用hibernate框架對持久層提供支援,spring做管理,管理Struts和hibernate。

2、Struts2

(1)基本概念

Struts2是一個基於MVC設計模式的web應用框架,相當於一個servlet,在MVC設計模式中,Struts2作為控制器(controller)來建立模型與檢視的資料互動。Struts2在Struts1融合webwork。struts2以webwork為核心,採用攔截器的機制來處理使用者的請求,這樣的設計使得業務邏輯控制器能夠與servletAPI完全脫離。

(2)Struts2框架的執行結構

(全網最全Java框架總結)SSH、SSM、Springboot

開啟百度APP看高畫質圖片

解析:客戶端傳送請求(HttpServletRequest)到伺服器,伺服器接收到請求就先進入web。xml配置檔案看看有沒有配置過濾器,發現有有Struts2的過濾器,然後找到struts。xml配置檔案,struts。xml配置檔案裡定義一個action,然後就去找到action類,此類繼承ActionSupport介面,並且實現了execute()方法,返回一個字串“success”給struts。xml配置檔案,struts。xml配置檔案的action會預設呼叫action類的execute()方法,result接收到返回的字串,result就會呼叫你指定的jsp頁面將結果呈現,最後響應給客戶端。

(3)Struts2的優勢

實現了MVC模式,層次結構清晰,使程式設計師只需要關注業務邏輯的實現。

豐富的標籤庫,大大提高了開發的效率。

Struts2提供豐富的攔截器實現。

透過配置檔案,就可以掌握整個系統各個部分之間的關係。

異常處理機制,只需在配置檔案中配置異常的對映,即可對異常做響應的處理。

Struts2的可擴充套件性高。

面向切面程式設計的思想在Struts2中也有了很好的體現。

體現了攔截器的使用,攔截器是一個一個的小功能模組,使用者可以將這些攔截器合併成一個大的攔截器,這個合成的攔截器就像單獨的攔截器一樣,只要將它配置到一個Action中就可以。

(4)Struts2的缺點:

校驗較繁瑣,多欄位出錯返回不同。

安全性太低

獲取傳參時較麻煩

2、Spring

spring是一個開源開發框架,是一個輕量級控制反轉(IoC)和麵向切面(AOP)的容器框架。

spring主要用來開發java應用,構建J2EE平臺的web應用。其核心就是提供一種新的機制管理業務物件及其依賴關係。

(2)spring的流程圖

(全網最全Java框架總結)SSH、SSM、Springboot

解析:上面是在Struts結構圖的基礎上加入了spring流程圖,在web。xml配置檔案中加入了spring的監聽器,在struts。xml配置檔案中新增

是告知Struts2執行時使用spring來管理物件,spring在其中主要做的就是注入例項,所有需要類的例項都由spring管理。

(3)spring的優點

容器:spring是一個容器,包含並管理物件的生命週期和配置。可以配置每個bean如何被建立,基於一個可配置原型prototype,你的bean可以建立一個單獨的例項或者每次需要時都生成一個新的例項。

支援AOP:spring提供對AOP的支援,它允許將一些通用任務,如安全、事物、日誌等進行集中式處理,從而提高了程式的複用性。

輕量級框架:spring是輕量級框架,其基本的版本大約2M。

控制反轉:spring透過控制反轉實現松耦合。物件們給他們依賴,而不是物件本身,方便解耦,簡化開發。

方便程式測試:spring提供了Junit4的支援,可以透過註解方便的測試spring程式。

降低java EE API的使用難度:spring對java EE開發中非常難用的一些API(比如JDBC),都提供了封裝,使這些API應用難度大大降低。

方便整合各種優秀框架:spring內部提供了對各種優秀框架(如Struts、mybatis)的直接支援。

支援宣告式事務處理:只需要透過配置就可以完成對事務的管理,而無須手動程式設計。

(4)spring的缺點

依賴反射,反射影響程序。

太過於依賴設計模式。

控制器過於靈活。

不支援分散式應用。

Spring常用註解(絕對經典)

3、hibernate

Hibernate是一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級的物件封裝,它將POJO與資料庫表建立對映關係,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成資料持久化的重任。

(2)hibernate的核心構成和執行流程圖

(全網最全Java框架總結)SSH、SSM、Springboot

(全網最全Java框架總結)SSH、SSM、Springboot

(3)hibernate的優點

對JDBC訪問資料庫的程式碼做了封裝,大大簡化了資料訪問層繁瑣的重複性程式碼。

Hibernate是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作,將軟體開發人員從大量相同的資料持久層相關程式設計工作中解放出來,使開發更物件化了。

透明持久化(persistent)帶有持久化狀態的、具有業務功能的單執行緒物件,此物件生存期很短。這些物件可能是普通的javabeans/POJO,(POJO概念,plain ordinary java object,簡單的java物件,可以簡單理解為簡單的實體類entity。)這個物件沒有實現第三方框架或介面,唯一特殊的是他們正與session關聯。一旦這個session被關閉,這些物件就會脫離持久化狀態,這樣就可被應用程式的任何層自由使用。

事務transaction應用程式用來指定原子操作單元範圍的物件,它是單執行緒的,生命週期很短。它透過抽象將應用從底層具體的JDBC、JTA(java transaction API,JTA允許應用程式執行分散式事務處理,在兩個或多個網路計算機資源訪問並且更新資料,JDBC驅動程式的JTA支援極大地增強了資料訪問能力)以及CORBA(公用物件請求代理程式體系結構,common object request broker architecture,簡而言之,CORB允許應用程式和其它的應用程式通訊)事務隔離開。某些情況下,一個session之內可能包含多個transaction物件,事務邊界的開啟與關閉時必不可少的。

它沒有侵入性,是輕量級框架。

移植性好,支援各種資料庫,如果換個資料庫只要在配置檔案中變換配置就可以了,不用改變hibernate程式碼。

快取機制,提供一級快取和二級快取。

一級快取:是session級別的快取,一個session做了一個查詢操作,它會把這個操作的結果放到一級快取中,如果短時間內這個session又做了同一個操作,那麼hibernate直接從一級快取中拿出,而不會去連資料庫取資料。

二級快取:是sessionFactory級別的快取,就是查詢的時候會把結果快取到二級快取中,如果同一個sessionFactory建立的某個session執行了相同的操作,hibernate就會從二級快取中拿出結果,而不會再去連線資料庫。

(4)hibernate的缺點

持久層封裝過於完整,導致開發人員無法對SQL進行最佳化,無法靈活應用原生SQL。

批次資料處理的時候較為弱勢。

框架中使用ORM原則,導致配置過於複雜,遇到大專案,維護問題不斷。

Hibernate實現CRUD(附專案原始碼)

二、SSM

SSM架構,是三層結合所成的框架,分別是Spring、SpringMVC、MyBatis所組成。Spring依賴注入來管理各層,面向切面程式設計管理事務,日誌和許可權。SpringMVC代表了model、view、controller接收外部請求,進行開發和處理。mybatis是基於jdbc的框架,主要用來操作資料庫,並且將業務實體和資料表聯絡起來。

1、spring

詳細介紹見SSH中spring。

2、SpringMVC

屬於spring框架的一部分,用來簡化MVC架構的web應用程式開發。

(2)SpringMVC的優點

擁有強大的靈活性,非侵入性和可配置性

提供了一個前端控制器dispatcherServlet,開發者無需額外開發控制器物件

分工明確,包括控制器、驗證器、命令物件、模型物件、處理程式對映檢視解析器,每一個功能實現由一個專門的物件負責完成

可以自動繫結使用者輸入,並正確的轉換資料型別

可重用的業務程式碼:可以使用現有的業務物件作為命令或表單物件,而不需要去擴充套件某個特定框架的基類。

(3)SpringMVC的缺點

servlet API耦合難以脫離容器獨立執行

太過於細分,開發效率低

SpringMVC中put和post如何選擇

GET和POST的區別

@RequestParam、@ModelAttribute、@RequestBody的區別

HttpServletResponse response實現檔案上傳、下載

3、mybatis

mybatis是一個簡化和實現了java資料持久層的開源框架,它抽象了大量的JDBC冗餘程式碼,並提供了一個簡單易用的API和資料庫互動。

(2)mybatis的優點

與JDBC相比,減少了50%以上的程式碼量。

mybatis是最簡單的持久化框架,小巧並且簡單易學。

mybatis靈活,不會對應用程式或者資料庫的限售設計強加任何影響,SQL寫在XML裡,從程式程式碼中徹底分離,降低耦合度,便於統一管理和最佳化,可重用。

提供XML標籤,支援編寫動態SQL語句(XML中使用if,else)。

提供對映標籤,支援物件與資料庫的ORM欄位關係對映(在XML中配置對映關係,也可以使用註解)

(3)mybatis的缺點

SQL語句的編寫工作量較大,對開發人員的SQL語句編寫有一定的水平要求。

SQL語句過於依賴資料庫,不能隨意更換資料庫。

拼接複雜SQL語句時不靈活。

三、Springboot

1、springboot基本概念

springboot是一個全新的框架,簡化Spring的初始搭建和開發過程,使用了特定的方式來進行配置,讓開發人員不再需要定義樣板化的配置。此框架不需要配置xml,依賴於maven這樣的構建系統。

2、Springboot的優點

(1)減少了大量的開發時間並提高了生產力

(2)避免了編寫大量的樣板程式碼,註釋和XML配置

(3)解決了spring的弊端

(4)程式碼少了、配置檔案少了、不需要對第三方框架煩惱了、專案精簡了,對整個團隊的開發和維護來說,更大的節約了成本。

3、springboot的缺點

(1)修復bug較慢,報錯時難以定位。

(2)整合度較高,不易於瞭解底層。

4、springboot總結

簡單、快速、方便的搭建專案;對主流開發框架的無配置整合;極大提高了開發、部署效率。

5、springboot和spring的區別

(1)springboot可以建立獨立的spring應用程式。

(2)內嵌瞭如tomcat,Jetty和Undertow這樣的容器,也就是說可以直接跑起來,用不著再做部署工作。

(3)無需再像spring那樣寫一堆繁瑣的XML配置檔案

(4)可以自動配置spring

(5)提供的POM可以簡化maven的配置

6、springboot和springMVC的區別

(1)SpringMVC是基於spring的一個MVC框架。

(2)springboot的基於spring的條件註冊的一套快速開發整合包。