SSH三大架構的工作原理及流程

來源:互聯網
上載者:User

標籤:

Hibernate工作原理及為什麼要用?

原理:
1.通過Configuration().configure();讀取並解析hibernate.cfg.xml設定檔
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>讀取並解析映射資訊
3.通過config.buildSessionFactory();//建立SessionFactory
4.sessionFactory.openSession();//開啟Sesssion
5.session.beginTransaction();//建立事務Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事務
8.關閉Session
9.關閉SesstionFactory

為什麼要用:
1. 對JDBC訪問資料庫的代碼做了封裝,大大簡化了資料訪問層繁瑣的反覆性代碼。

2. Hibernate是一個基於JDBC的主流持久化架構,是一個優秀的ORM實現。他非常大程度的簡化DAO層的編碼工作

3. hibernate使用Java反射機制,而不是位元組碼增強程式來實現透明性。

4. hibernate的效能非常好,由於它是個輕量級架構。映射的靈活性非常出色。它支援各種關聯式資料庫,從一對一到多對多的各種複雜關係。
 
2. Hibernate是怎樣延遲載入?
1. Hibernate2延遲載入實現:a)實體物件 b)集合(Collection)

2. Hibernate3 提供了屬性的延遲載入功能

當Hibernate在查詢資料的時候,資料並沒有存在與記憶體中,當程式真正對資料的操作時,對象才存在與記憶體中,就實現了延遲載入,他節省了server的記憶體開銷,從而提高了server的效能。

3.Hibernate中如何?類之間的關係?(如:一對多、多對多的關係)

類與類之間的關係主要體如今表與表之間的關係進行操作,它們都市對對象進行操作,我們程式中把全部的表與類都映射在一起,它們通過設定檔裡的many-to-one、one-to-many、many-to-many、

4. 說下Hibernate的緩衝機制

1. 內部緩衝存在Hibernate中又叫一級緩衝,屬於應用事物級緩衝

2. 二級緩衝:
a) 應用及緩衝
b) 分布式緩衝
條件:資料不會被第三方改動、資料大小在可接受範圍、資料更新頻率低、同一資料被系統頻繁使用、非 重要資料
c) 第三方緩衝的實現
////////一級緩衝:session級的緩衝也叫事務級的緩衝,僅僅緩衝實體,生命週期和session一致。不能對其進行管理。

不用顯示的調用。

二級緩衝:sessionFactory緩衝,也叫進程級的緩衝,使用第3方外掛程式實現的,也值緩衝實體,生命週期和sessionFactory一致,能夠進行管理。

首先配置第3放外掛程式,我們用的是EHCache,在hibernate.cfg.xml檔案裡增加

<property name="hibernate.cache.user_second_level_cache">true</property>

在映射中也要顯示的調用,<cache usage="read-only"/>

二級緩衝之查詢快取:對普通屬性進行緩衝。假設關聯的表發生了改動,那麼查詢快取的生命週期也結束了。

在程式中必須手動啟用查詢快取:query.setCacheable(true);/////////

5. Hibernate的查詢方式
Sql、Criteria,object comptosition
Hql:
1、 屬性查詢
2、 參數查詢、命名參數查詢
3、 關聯查詢
4、 分頁查詢
5、 統計函數

6. 怎樣最佳化Hibernate?
1.使用雙向一對多關聯,不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一,用多對一代替
4.設定物件緩衝,不使用集合緩衝
5.一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多態
7. 表欄位要少,表關聯不要怕多,有二級緩衝撐腰


1.Hibernate有哪幾種查詢資料的方式

         (1)導航對象圖查詢

      (2)OID查詢

      (3)HQL

      (4)QBC

      (5)本地SQL

2.load()和get()的差別

 

load載入方法:

Java代碼

Users user = (Users)session.load(Users.class, userId);    

Users user = (Users)session.load(Users.class, userId);

get載入方法:

Java代碼

Users user = (Users)session.get(Users.class, userId);  

Users user = (Users)session.get(Users.class, userId);

 

兩載入方法差別:

差別1:假設資料庫中,沒有userId的對象。假設通過get方法載入,則返回的是一個null;假設通過load載入,則返回一個代理對象,假設後面代碼假設調用user對象的某個屬性(比方user.getPassword())會拋出異常:org.hibernate.ObjectNotFoundException;

差別2:load支援延遲載入,get不支援延遲載入。

也就是說:

Java代碼

Users user = (Users)session.load(Users.class, userId);  

Users user = (Users)session.load(Users.class, userId);

這句代碼不會去運行資料庫查詢,僅僅實用到user時才會去運行資料庫查詢。

而:

Java代碼

Users user = (Users)session.get(Users.class, userId);  

Users user = (Users)session.get(Users.class, userId);

則馬上去運行資料庫查詢。 所以Users user = (Users)session.load(Users.class, userId);不會運行不論什麼sql。

注意:

Java代碼

Users user = (Users)session.load(Users.class, userId);    
System.out.println(user.getId());  

Users user = (Users)session.load(Users.class, userId);

System.out.println(user.getId());

上面這2句代碼,不會去運行資料庫操作。由於load後會在hibernate的一級緩衝裡存放一個map對象,該map的key就是userId的值,可是當你getId()時,它會去一級緩衝裡拿map的key值,而不去運行資料庫查詢。所以不會報不論什麼錯。不會運行不論什麼資料庫操作。

 
闡述struts2的運行流程。Struts 2架構本身大致能夠分為3個部分:核心控制器FilterDispatcher、業務控制器Action和使用者實現的企業商務邏輯組件。核心控制器FilterDispatcher是Struts 2架構的基礎,包括了架構內部的控制流程程和處理機制。業務控制器Action和商務邏輯組件是須要使用者來自己實現的。使用者在開發Action和商務邏輯組件的同一時候,還須要編寫相關的設定檔,供核心控制器FilterDispatcher來使用。 Struts 2的工作流程相對於Struts 1要簡單,與WebWork架構基本同樣,所以說Struts 2是WebWork的升級版本號碼。基本簡要流程例如以下:1、client瀏覽器發出HTTP請求。2、依據web.xml配置,該請求被FilterDispatcher接收。3、依據struts.xml配置,找到須要調用的Action類和方法, 並通過IoC方式,將值注入給Aciton。4、Action調用商務邏輯組件處理商務邏輯,這一步包括表單驗證。5、Action運行完成,依據struts.xml中的配置找到相應的返回結果result,並跳轉到相應頁面。6、返回HTTP響應到client瀏覽器。

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/alli0968/archive/2009/06/01/4231237.aspx

 

 

 

. Struts工作機制?為什麼要使用Struts?
工作機制:
Struts的工作流程:
在web應用啟動時就會載入初始化ActionServlet,ActionServlet從
struts-config.xml檔案裡讀取配置資訊,把它們存放到各種設定物件
當ActionServlet接收到一個客戶請求時,將運行例如以下流程.
-(1)檢索和使用者請求匹配的ActionMapping執行個體,假設不存在,就返回請求路徑無效資訊; 
-(2)假設ActionForm執行個體不存在,就建立一個ActionForm對象,把客戶提交的表單資料儲存到ActionForm對象中; 
-(3)依據配置資訊決定是否須要表單驗證.假設須要驗證,就調用ActionForm的validate()方法; 
-(4)假設ActionForm的validate()方法返回null或返回一個不包括ActionMessage的ActuibErrors對象, 就表示表單驗證成功; 
-(5)ActionServlet依據ActionMapping所包括的映射資訊決定將請求轉寄給哪個Action,假設對應的 Action執行個體不存在,就先建立這個執行個體,然後調用Action的execute()方法; 
-(6)Action的execute()方法返回一個ActionForward對象,ActionServlet在把客戶請求轉寄給 ActionForward對象指向的JSP組件; 
-(7)ActionForward對象指向JSP組件產生動態網頁,返回給客戶;

為什麼要用:
JSP、Servlet、JavaBean技術的出現給我們構建強大的公司專屬應用程式系統提供了可能。但用這些技術構建的系統很的繁亂,所以在此之上,我們須要一個規則、一個把這些技術組織起來的規則,這就是架構,Struts便應運而生。

基於Struts開發的應用由3類組件構成:控制器組件、模型組件、視圖組件

8. Struts的validate架構是怎樣驗證的?
在struts設定檔裡配置詳細的錯誤提示,再在FormBean中的validate()方法詳細調用。

9. 說下Struts的設計模式
MVC模式: web應用程式啟動時就會載入並初始化ActionServler。使用者提交表單時,一個配置好的ActionForm對象被建立,並被填入表單對應的資料,ActionServler依據Struts-config.xml檔案配置好的設定決定是否須要表單驗證,假設須要就調用ActionForm的 Validate()驗證後選擇將請求發送到哪個Action,假設Action不存在,ActionServlet會先建立這個對象,然後調用 Action的execute()方法。Execute()從ActionForm對象中擷取資料,完畢商務邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉寄給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp產生動態網頁,返回給客戶。

10. spring工作機制及為什麼要用?
1.spring mvc請全部的請求都提交給DispatcherServlet,它會託付應用系統的其它模組負責負責對請求進行真正的處理工作。
2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行商務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給client。

為什麼用:
{AOP 讓開發人員能夠建立非行為性的關注點,稱為橫切關注點,並將它們插入到應用程式代碼中。使用 AOP 後,公用服務 (比方日誌、持久性、事務等)就能夠分解成方面並應用到域對象上,同一時候不會添加域對象的物件模型的複雜性。
IOC 同意建立一個能夠構造對象的應用環境,然後向這些對象傳遞它們的協作對象。正如單詞 倒置 所表明的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每個對象都是用其協作物件建構的。因此是由容器管理協作對象(collaborator)。
Spring即使一個AOP架構,也是一IOC容器。 Spring 最好的地方是它有助於您替換對象。有了 Spring,僅僅要用 JavaBean 屬性和設定檔增加依賴性(協作對象)。然後能夠非常easy地在須要時替換具有類似介面的協作對象。}

 


Spring 架構是一個分層架構,由 7 個定義良好的模組組成。Spring 模組構建在核心容器之上,核心容器定義了建立、配置和管理 bean 的方式, 1 所看到的。

組成 Spring 架構的每一個模組(或組件)都能夠單獨存在,或者與其它一個或多個模組聯合實現。每一個模組的功能例如以下:

☆ 核心容器:核心容器提供 Spring 架構的準系統。核心容器的主要組件是 BeanFactory,它是原廠模式的實現。BeanFactory 使用控制反轉 (IOC)模式將應用程式的配置和依賴性規範與實際的應用程式代碼分開。

☆ Spring 上下文:Spring 上下文是一個設定檔,向 Spring 架構提供上下文資訊。Spring 上下文包含企業服務,比如 JNDI、EJB、電子郵件、國際化、校正和調度功能。

☆ Spring AOP:通過組態管理特性,Spring AOP 模組直接將面向方面的編程功能整合到了 Spring 架構中。所以,能夠非常easy地使 Spring 架構管理的不論什麼對象支援 AOP。Spring AOP 模組為基於 Spring 的應用程式中的對象提供了交易管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性交易管理整合到應用程式中。

☆ Spring DAO:JDBC DAO 抽象層提供了有意義的異常階層,可用該結構來管理異常處理和不同資料庫供應商拋出的錯誤訊息。異常階層簡化了錯誤處理,而且極大地減少了須要編寫的異常代碼數量(比如開啟和關閉串連)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常階層。

☆ Spring ORM:Spring 架構插入了若干個 ORM 架構,從而提供了 ORM 的對象關係工具,當中包含 JDO、Hibernate 和 iBatis SQL Map。全部這些都遵從 Spring 的通用事務和 DAO 異常階層。

☆ Spring Web 模組:網路內容模組建立在應用程式上下文模組之上,為基於 Web 的應用程式提供了上下文。所以,Spring 架構支援與 Jakarta Struts 的整合。Web 模組還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。

☆ Spring MVC 架構:MVC 架構是一個全功能的構建 Web 應用程式的 MVC 實現。通過策略介面,MVC 架構變成為高度可配置的,MVC 容納了大量視圖技術,當中包含 JSP、Velocity、Tiles、iText 和 POI。

Spring 架構的功能能夠用在不論什麼 J2EE server中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支援不綁定到特定 J2EE 服務的可重用業務和資料訪問對象。毫無疑問,這種對象能夠在不同 J2EE 環境 (Web 或 EJB)、獨立應用程式、測試環境之間重用。

IOC 和 AOP

控制反轉模式(也稱作依賴性介入)的基本概念是:不建立對象,可是描寫敘述建立它們的方式。在代碼中不直接與對象和服務串連,但在設定檔裡描寫敘述哪一個組件須要哪一項服務。容器(在 Spring 架構中是 IOC 容器) 負責將這些聯絡在一起。

在典型的 IOC 情境中,容器建立了全部對象,並設定必要的屬性將它們串連在一起,決定什麼時間調用方法。下表列出了 IOC 的一個實現模式。

 


Spring 架構的 IOC 容器採用類型 2 和類型3 實現。


面向方面的編程

面向方面的編程,即 AOP,是一種編程技術,它同意程式猿對橫切關注點或橫切典型的職責分界線的行為(比如日誌和交易管理)進行模組化。AOP 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模組中。

AOP 和 IOC 是補充性的技術,它們都運用模組化方式解決公司專屬應用程式程式開發中的複雜問題。在典型的物件導向開發方式中,可能要將日誌記錄語句放在全部方法和 Java 類中才幹實現日誌功能。在 AOP 方式中,能夠反過來將Log Service模組化,並以聲明的方式將它們應用到須要日誌的組件上。當然,優勢就是 Java 類不須要知道Log Service的存在,也不須要考慮相關的代碼。所以,用 Spring AOP 編寫的應用程式代碼是鬆散耦合的。

AOP 的功能全然整合到了 Spring 交易管理、日誌和其它各種特性的上下文中。

IOC 容器

Spring 設計的核心是 org.springframework.beans 包,它的設計目標是與 JavaBean 組件一起使用。這個包通常不是由使用者直接使用,而是由server將其用作其它多數功能的底層中介。下一個最進階抽象是 BeanFactory 介面,它是工廠設計模式的實現,同意通過名稱建立和檢索對象。BeanFactory 也能夠管理對象之間的關係。

BeanFactory 支援兩個物件模型。

□ 單態 模型提供了具有特定名稱的對象的共用執行個體,能夠在查詢時對其進行檢索。Singleton 是預設的也是最經常使用的物件模型。對於無狀態服務對象非常理想。

□ 原型 模型確保每次檢索都會建立單獨的對象。在每一個使用者都須要自己的對象時,原型模型最適合。

bean 工廠的概念是 Spring 作為 IOC 容器的基礎。IOC 將處理事情的責任從應用程式代碼轉移到架構。正如我將在下一個示範範例中示範的那樣,Spring 架構使用 JavaBean 屬性和配置資料來指出必須設定的依賴關係。

BeanFactory 介面

由於 org.springframework.beans.factory.BeanFactory 是一個簡單介面,所以能夠針對各種底層儲存方法實現。最經常使用的 BeanFactory 定義是 XmlBeanFactory,它依據 XML 檔案裡的定義裝入 bean,如清單 1 所看到的。

清單 1. XmlBeanFactory

BeanFactory factory = new XMLBeanFactory(new FileInputSteam("mybean.xml"));

在 XML 檔案裡定義的 Bean 是被消極載入的,這意味在須要 bean 之前,bean 本身不會被初始化。要從 BeanFactory 檢索 bean,僅僅需調用 getBean() 方法,傳入將要檢索的 bean 的名稱就可以,如清單 2 所看到的。

清單 2. getBean()

MyBean mybean = (MyBean) factory.getBean("mybean");

每一個 bean 的定義都能夠是 POJO (用類名和 JavaBean 初始化屬性定義) 或 FactoryBean。FactoryBean 介面為使用 Spring 架構構建的應用程式加入了一個間接的層級。

IOC 示範範例

理解控制反轉最簡單的方式就是看它的實際應用。在對由三部分組成的 Spring 系列 的第 1 部分進行總結時,我使用了一個示範範例,示範了怎樣通過 Spring IOC 容器注入應用程式的依賴關係(而不是將它們構建進來)。

我用開啟線上信用帳戶的用例作為起點。對於該實現,開啟信用帳戶要求使用者與下面服務進行互動:

☆ 信用層級評定服務,查詢使用者的信用曆史資訊。

☆ 遠程資訊連結服務,插入客戶資訊,將客戶資訊與信用卡和銀行資訊串連起來,以進行自己主動借記(假設須要的話)。

☆ 電子郵件服務,向使用者發送有關信用卡狀態的電子郵件。

三個介面

對於這個示範範例,我如果服務已經存在,理想的情況是用鬆散耦合的方式把它們整合在一起。下面清單顯示了三個服務的應用程式介面。

清單 3. CreditRatingInterface

public interface CreditRatingInterface {
public boolean getUserCreditHistoryInformation(ICustomer iCustomer); 
}

清單 3 所看到的的信用層級評定介面提供了信用曆史資訊。它須要一個包括客戶資訊的 Customer 對象。該介面的實現是由 CreditRating 類提供的。

清單 4. CreditLinkingInterface

public interface CreditLinkingInterface {

public String getUrl(); 
public void setUrl(String url); 
public void linkCreditBankAccount() throws Exception ;

}

信用連結介面將信用曆史資訊與銀行資訊(假設須要的話)串連在一起,並插入使用者的信用卡資訊。信用連結介面是一個遠程服務,它的查詢是通過 getUrl() 方法進行的。URL 由 Spring 架構的 bean 配置機制設定,我稍後會討論它。該介面的實現是由 CreditLinking 類提供的。

清單 5. EmailInterface

public interface EmailInterface {

public void sendEmail(ICustomer iCustomer); 
public String getFromEmail(); 
public void setFromEmail(String fromEmail) ; 
public String getPassword(); 
public void setPassword(String password) ; 
public String getSmtpHost() ; 
public void setSmtpHost(String smtpHost); 
public String getUserId() ; 
public void setUserId(String userId);

 轉載請註明出處:http://www.cnblogs.com/javaNewegg/archive/2011/08/28/2156521.html

SSH三大架構的工作原理及流程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.