搜尋
首頁Javajava教程ssh框架原理及流程是什麼

ssh框架原理及流程是什麼

Jul 25, 2019 pm 02:41 PM
javassh框架原理流程

ssh框架原理及流程是什麼

SSH(Struts2 Spring Hibernate)框架的項目,該架構主要分為三個層次:

( 1)Struts2:負責web層

(2)Spring:業務層的管理

(3)Hibernate:負責資料持久化

Struts2工作原理:

1.初始化一個指向servlet容器的請求。

2.請求經過web.xml中配置的過濾器過濾,FilterDispatcher(struts2控制器的核心)詢問ActionMapper是否需要呼叫某個Action來處理這個請求。如果ActionMapper決定需要呼叫某個Action,FilterDispatcher就把請求的處理方式交給ActionProxy。

3.ActionProxy透過設定檔Struts.xml設定檔找到需要呼叫的Action類別。

4.ActionProxy建立一個ActionInvocation實例,同時ActionInvocation透過代理模式呼叫Action。但在呼叫之前,ActionInvocation會根據配置載入Action相關的所有Interceptor(攔截器)。

5.Action執行完畢後,ActionInvocation負責根據struts.xml中的設定找到對應的回傳結果result。

即開發人員透過發送http請求,這個請求經過web.xml的過濾器過濾看看是否要呼叫某個action,如果有則在Struts.xml找到該請求的實作的方法,然後返回運行的結果。

相關推薦:《java開發教學

Hibernate工作原理:

1. 讀取並解析設定檔

2.讀取並解析映射訊息,建立SessionFactory 

3. 開啟Sesssion 

4.建立事務Transation 

##5. 持久化操作

6.提交交易 

7.關閉Session 

#8. 關閉SesstionFactory 

即透過spring管理的Hibernate初始化時載入了xxx.hbm.xml然後讀取解析映射訊息,創建了SessionFactory。然後打開session,透過session對事物進行操作並提交。最後關閉session,關閉SessionFactory。

Hibernate中bean 的三種狀態

Hibernate物件分為三種狀態:瞬時態(new 出來的或實例化時session無關的),持久性(session關聯)與遊離態(曾經與session關聯)。其中持久態的物件是PO,瞬時態、託管態的物件可作為VO。 (PO不應該直接用作v層)所以在使用中應該注意三態的轉化。

如:

在進行資料操作的一系列過程中,save或saveorupdate操作可以把瞬時態或遊離態的物件轉換成持久態,而delete或session的close 、flush等操作將會把session相關聯的持久態物件轉換成遊離態。

Hibernate物件的狀態和生命週期

使用new運算元初始化的物件是一個瞬時態的(Transient)(沒有任何跟資料庫表相關聯的行為,只要應用不再引用這些對象,它們的狀態就會丟失,並由垃圾回收機制回收);

瞬時態對象經過save(),saveOrUpdate會轉換成持久態,由session統一管理,持久態對象的操作與資料庫同步;

持久性物件經過evict(),close(),clear()等會轉換成遊離態,這時雖然被持久化,但是不在session快取中,透過lock(),update( ),saveOrUpdate又會轉換成持久態。透過get(),load(),find(),iterate()得到的物件直接就是持久態的。

Spring的工作原理:

在SSH框架中spring扮演了管理容器的角色。我們都知道Hibernate用來做持久層,因為它將JDBC做了一個很好的封裝,程式設計師在與資料庫進行互動時可以不用書寫大量的SQL語句。 Struts是用來做應用層的,它負責呼叫業務邏輯serivce層。

所以SSH框架的流程大致是:Jsp頁面----Struts------Service(業務邏輯處理類別)---Hibernate(左到右) 

struts負責控制Service(業務邏輯處理類別),從而控制了Service的生命週期,這樣層與層之間的依賴很強,屬於耦合。

這時,使用spring框架就起到了控制Action物件(Strus中的)和Service類別的作用,兩者之間的關係就鬆散了,Spring的Ioc機制(控制反轉和依賴注入)正是用在此。

控制反轉:就是由容器控製程式之間的(依賴)關係,而非傳統實作中,由程式碼直接操控。

依賴注入:元件之間的依賴關係由容器在運行期決定 ,由容器動態的將某種依賴關係注入到元件之中。

使用Spring的第二個好處(AOP應用):

交易的處理: 

在以往的JDBCTemplate 中交易提交成功,異常處理都是透過Try/Catch 來完成。 Spring容器整合了TransactionTemplate,它封裝了所有對事務處理的功能,包括異常時事務回滾,操作成功時資料提交等複雜業務功能。這都是由Spring 容器來管理,大大減少了程式設計師的程式碼量,也對交易有了很好的管理控制。 Hibernate中也有事務的管理,hibernate 中事務管理是透過SessionFactory 建立和維護Session 來完成。而Spring 對SessionFactory配置也進行了整合,不需要在透過hibernate.cfg.xml來設定SessionaFactory。

這樣的話就可以很好的利用Sping對事務管理強大功能。

避免了每次對資料操作都要現獲得Session實例來啟動交易/提交/回滾事務還有繁瑣的Try/Catch操作。

這些也就是Spring中的AOP(面向切面程式設計)機制很好的應用。一方面讓開發業務邏輯更清晰、專業分工更容易進行。

另一方面就是應用Spirng AOP隔離降低了程式的耦合性使我們可以在不同的應用中將各個切面結合起來使用大大提高了程式碼重用度。

以上是ssh框架原理及流程是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境