Struts一、Struts二、Hibernate、Spring框架工做原理介紹

Struts1工做原理

Struts1工做原理圖


1、初始化:struts框架的總控制器ActionServlet是一個Servlet,它在web.xml中配置成自動啓動的Servlet,在啓動時總控制器會讀取配置文件(struts-config.xml)的配置信息,爲struts中不一樣的模塊初始化相應的對象。(面向對象思想)
 
2、發送請求:用戶提jiāo表單或經過URLWEB服務器提jiāo請求,請求的數據用HTTP協議傳給web服務器。
 
3form填充:struts的總控制器ActionServlet在用戶提jiāo請求時將數據放到對應的form對象中的成員變量中。
 
4、派發請求:控制器根據配置信息對象ActionConfig將請求派發到具體的Action,對應的formBean一併傳給這個Action中的excute()方法。
 
5、chǔ理業務:Action通常只包含一個excute()方法,它負責執行相應的業務邏輯(調用其它的業務模塊)完畢後返回一個ActionForward對象。服務器經過ActionForward對象進行轉發工做。
 
6、返回響應:Action將業務chǔ理的不一樣結果返回一個目標響應對象給總控制器。
 
7、查找響應:總控制器根據Actionchǔ理業務返回的目標響應對象,找到對應的資源對象,通常狀況下爲jsp頁面。
 
8、響應用戶:目標響應對象將結果傳遞給資源對象,將結果展示給用戶。
Struts1優缺點(爲何要用strust1)
1.優勢: 
  ①開源的框架,結構清晰 
  ②MVC的經典實現(MVC是一種思想,而不是一種技術) 
  ③chǔ理異常機制,實現國際化 
  ④具備強大的標籤庫 
  ⑤解決了JSP頁面存在大量的JAVA代碼,維hù起來方便 
  ⑥formBean中會自動提jiāo,不會去使用傳統的getset方法獲得值、取值  
2.缺點: 
  ①配置複雜 
  ②測試不方便 
  ③依賴web容器 
  ④action是一個單例模式,必須設置爲線程安全  java

Struts2工做原理

struts2工做原理圖


1 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求 
2 這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個jiào作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫助,例如:SiteMesh Plugin) 
3 接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否須要調用某個Action 
4 若是ActionMapper決定須要調用某個Action,FilterDispatcher把請求的chǔ理jiāo給ActionProxy 
5 ActionProxy經過Configuration Manager詢問框架的配置文件,找到須要調用的Action類 
6 ActionProxy建立一個ActionInvocation的實例。 
7 ActionInvocation實例使用命名模式來調用,在調用Action的過程先後,涉及到相關攔截器(Intercepter)的調用。 
8 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果一般是(但不老是,也可 能是另外的一個Action鏈)一個須要被表示的JSP或者FreeMarker的模版。在表示的過程當中可使用Struts2 框架中繼承的標籤。在這個過程當中須要涉及到ActionMapper  
在上述過程當中全部的對象(ActionResultsInterceptors,等)都是經過ObjectFactory來建立的
Struts2優缺點(即爲何要用struts2
Struts2就會自動的進行驗證。還有不少,好比國際化資源文件等。 
Struts2的開發中來,若是你重來沒有用過任何框架,你也能夠經過快速的學xí,加入到Struts2的應用開發中來,由於它足夠的簡單。 
大量的攔截器:
Struts2自己提供了大量的可重用的攔截器,好比類型轉換攔截器,不少時候咱們從頁面取得參數,這個時候它是String類型的,咱們須要手動。
基於插件的框架:
Struts2是一個基於插件的框架,社區中提供了不少實用的插件,好比jfreechat/json等等,使用這些插件能夠簡化咱們的開發,加快開發進度。
struts2最大的缺點莫過於在好多web服務器上支持很差,例如在websphere5.5,weblogic8.1及之前版本支持很是查,須要用最新的。
多種視圖的支持:
多種視圖的支持:jspfreemarkerVeloctiy,只要你願意,你甚至能夠經過輕鬆的改造讓它支持pdf,同一個項目中你能夠支持多種視圖。
更加的模塊化:
Struts1.X 相比,Struts2更加的模塊化,能夠輕鬆將配置信息按功能界限拆分紅多個文件,便於管理和團隊協做開發。
與Spring的集成:
Struts1.x相比,Struts2沒必要再本身編寫singleton,進一步的下降了程序間的耦合xìng,就Struts2內部自己而言,下降了框架自己的偶合xìng。
基於pojo易於測試:
Struts1.x中我須要Mock出這兩個Http對象,使咱們很難編寫Action的單元測試,與Struts1.x相比,Struts2Action 再也不依賴於HttpServletRequestHttpServletResponse對象,使咱們可以更方便的針對Action編寫單元測試。 
  web

Hibernate工做原理

1. 讀取並解析配置文件
2. 讀取並解析映射信息,建立SessionFactory
3. 打開Sesssion
4. 建立事務Transation
5. 持久化操做
6. 提jiāo事務
7. 關閉Session
8. 關閉SesstionFactory 
Hibernate優缺點
優勢: 
1: hibernate是基於ORMapping技術的開源的框架,對JDBC進行了輕量級的封裝,使用面向對象的思惟來操縱數據庫。 
2:hibernate提供了session緩存和二級緩存,對於不須要進行復雜查詢的系統,xìng能有提高。 
3:低侵入式設計  
缺點: 
1:hibernate學xí成本過高。 
2:不適合有複雜的sql查詢(統計) 。 
3:不適合大量的彙集操做,(存儲過程)
優缺點補充:
1、 不須要編寫的SQL語句(不須要編輯JDBC),只須要操做相應的對象就能夠了,就能夠可以存儲、更新、刪除、加載對象,能夠提升生產效; 
2、由於使用Hibernate只須要操做對象就能夠了,因此咱們的開發更對象化了; 
3使用Hibernate,移植xìng好(只要使用Hibernate標準開發,更換數據庫時,只須要配置相應的配置文件就能夠了,不須要作其它任務的操做); 
4Hibernate實現了透明持久化當保存一個對象時,這個對象不須要繼承Hibernate中的任何類、實現任何接口,只是個純粹的單純對象—稱爲POJO對象(最純粹的對象這個對象沒有繼承第三方框架的任何類和實現它的任何接口
5Hibernate是一個沒有侵入xìng的框架,沒有侵入xìng的框架咱們通常稱爲輕量級框架 
6Hibernate代碼測試方便。 sql

Spring工做原理

內部最核心的就是IOC了, 
動態注入,讓一個對象的建立不用new了,能夠自動的生產,這其實就是利用java裏的反射 
反射其實就是在運行時動態的去建立、調用對象,Spring就是在運行時,跟xml Spring的配置 
文件來動態的建立對象,和調用對象裏的方法的 。 
  Spring還有一個核心就是AOP這個就是面向切面編程,能夠爲某一類對象 進行監督和控制(也就是 
在調用這類對象的具體方法的先後去調用你指定的 模塊)從而達到對一個模塊擴充的功能。這些都是經過 
配置類達到的。 
  Spring目的:就是讓對象與對象(模塊與模塊)之間的關係沒有經過代碼來關聯,都是經過配置類說明 
管理的(Spring根據這些配置 內部經過反射去動態的組裝對象) 
  要記住:Spring是一個容器,凡是在容器裏的對象纔會有Spring所提供的這些服務和功能。 
Spring裏用的最經典的一個設計模式就是:模板方法模式。(這裏我都不介紹了,是一個很經常使用的設計模式) 
  Spring裏的配置是不少的,很難都記住,可是Spring裏的jīng華也無非就是以上的兩點,把以上兩點跟理解了 也就基本上掌握了Spring. 
Spring AOPIOC
1、 IoC(Inversion of control): 控制反轉 
1IoC: 
概念:控制權由對象自己轉向容器;由容器根據配置文件去建立實例並建立各個實例之間的依賴關係 
核心:bean工廠;在Spring中,bean工廠建立的各個實例稱做bean 
2、AOP(Aspect-Oriented Programming): 面向方面編程 
1、 代理的兩種方式: 
靜態代理: 
針對每一個具體類分別編寫代理類; 
針對一個接口編寫一個代理類; 
動態代理: 
針對一個方面編寫一個InvocationHandler,而後借用JDK反射包中的Proxy類爲各類接口動態生成相應的代理類
Spring 優缺點 
它是一個開源的項目,並且目前很是活躍;它基於IoCInversion of Control,反向控制)和AOP的構架多層j2ee系統的框架,但它不強迫你必須在每一層 中必須使用Spring,由於它模塊化的很好,容許你根據本身的須要選擇使用它的某一個模塊;它實現了很優雅的MVC,對不一樣的數據訪問技術提供了統一的 接口,採用IoC使得能夠很容易的實現bean的裝配,提供了簡潔的AOP並據此實現Transcation Managment,等等
優勢 
a. Spring能有效地組織你的中間層對象,無論你是否選擇使用了EJB。若是你僅僅使用了Struts或其餘爲J2EE的 API特製的frameworkSpring致力於解決剩下的問題。 
b. Spring能消除在許多工程中常見的對Singleton的過多使用。根據個人經驗,這是一個很大的問題,它下降了系統的可測試xìng和麪向對象的程度。 
c. 經過一種在不一樣應用程序和項目間一致的方法來chǔ理配置文件,Spring能消除各類各樣自定義格式的屬xìng文件的須要。曾經對某個類要尋找的是哪一個魔法般的屬xìng項或系統屬xìng感到不解,爲此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅須要看看類的JavaBean屬xìng。Inversion of Control的使用(在下面討論)幫助完成了這種簡化。 
d. 經過把對接口編程而不是對類編程的代價幾乎減shao到沒有,Spring可以促進養成好的編程xí慣。 
e. Spring被設計爲讓使用它建立的應用盡量shao的依賴於他的APIs。在Spring應用中的大多數業務對象沒有依賴於Spring。 
f. 使用Spring構建的應用程序易於單元測試。 
g. Spring能使EJB的使用成爲一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOslocal EJBs來實現業務接口,卻不會影響調用代碼。 
h. Spring幫助你解決許多問題而無需使用EJBSpring能提供一種EJB的替換物,它們適用於許多web應用。例如,Spring能使用AOP提供聲明xìng事務管理而不經過EJB容器,若是你僅僅須要與單個數據庫打jiāo道,甚至不須要一個JTA實現。 
i. Spring爲數據存取提供了一個一致的框架,不管是使用的是JDBC仍是O/R mapping產品(如Hibernate)。 
Spring確實使你能經過最簡單可行的解決辦法來解決你的問題。而這是有有很大價值的。 
缺點:jsp中要寫不少代碼、控制器過於靈活,缺shao一個公用控制器數據庫

相關文章
相關標籤/搜索