Struts1 與Struts2區別 及Hibernate

Struts1工作原理
Struts1工作原理圖

1、初始化:struts框架的總控制器ActionServlet是一個Servlet,它在web.xml中配置成自動啓動的Servlet,在啓動時總控制器會讀取配置文件(struts-config.xml)的配置信息,爲struts中不同的模塊初始化相應的對象。(面向對象思想)
 
2、發送請求:用戶提交表單或通過URL向WEB服務器提交請求,請求的數據用HTTP協議傳給web服務器。
 
3、form填充:struts的總控制器ActionServlet在用戶提交請求時將數據放到對應的form對象中的成員變量中。
 
4、派發請求:控制器根據配置信息對象ActionConfig將請求派發到具體的Action,對應的formBean一併傳給這個Action中的excute()方法。
 
5、處理業務:Action一般只包含一個excute()方法,它負責執行相應的業務邏輯(調用其它的業務模塊)完畢後返回一個ActionForward對象。服務器通過ActionForward對象進行轉發工作。
 
6、返回響應:Action將業務處理的不同結果返回一個目標響應對象給總控制器。
 
7、查找響應:總控制器根據Action處理業務返回的目標響應對象,找到對應的資源對象,一般情況下爲jsp頁面。
 
8、響應用戶:目標響應對象將結果傳遞給資源對象,將結果展現給用戶。
Struts1優缺點(爲什麼要用strust1)
1.優點: 
       ①開源的框架,結構清晰 
       ②是MVC的經典實現(MVC是一種思想,而不是一種技術) 
       ③處理異常機制,實現國際化 
       ④具有強大的標籤庫 
       ⑤解決了JSP頁面存在大量的JAVA代碼,維護起來方便 
       ⑥在formBean中會自動提交,不會去使用傳統的get、set方法得到值、取值 

2.缺點: 
       ①配置複雜 
       ②測試不方便 
       ③依賴web容器 
       ④action是一個單例模式,必須設置爲線程安全 
Struts2工作原理
struts2工作原理圖

1 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求 
2 這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin) 
3 接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action 
4 如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy 
5 ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類 
6 ActionProxy創建一個ActionInvocation的實例。 
7 ActionInvocation實例使用命名模式來調用,在調用Action的過程前後,涉及到相關攔截器(Intercepter)的調用。 
8 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標籤。在這個過程中需要涉及到ActionMapper 

在上述過程中所有的對象(Action,Results,Interceptors,等)都是通過ObjectFactory來創建的
Struts2優缺點(即爲什麼要用struts2)
Struts2就會自動的進行驗證。還有很多,比如國際化資源文件等。 
Struts2的開發中來,如果你重來沒有用過任何框架,你也可以通過快速的學習,加入到Struts2的應用開發中來,因爲它足夠的簡單。 
大量的攔截器:
Struts2本身提供了大量的可重用的攔截器,比如類型轉換攔截器,很多時候我們從頁面取得參數,這個時候它是String類型的,我們需要手動。
基於插件的框架:
Struts2是一個基於插件的框架,社區中提供了很多實用的插件,比如jfreechat/json等等,使用這些插件可以簡化我們的開發,加快開發進度。
struts2最大的缺點莫過於在好多web服務器上支持不好,例如在websphere5.5,weblogic8.1及以前版本支持非常查,需要用最新的。
多種視圖的支持:
多種視圖的支持:jsp,freemarker,Veloctiy,只要你願意,你甚至可以通過輕鬆的改造讓它支持pdf,同一個項目中你可以支持多種視圖。
更加的模塊化:
與Struts1.X 相比,Struts2更加的模塊化,可以輕鬆將配置信息按功能界限拆分成多個文件,便於管理和團隊協作開發。
與Spring的集成:
與Struts1.x相比,Struts2不必再自己編寫singleton,進一步的降低了程序間的耦合性,就Struts2內部本身而言,降低了框架本身的偶合性。
基於pojo易於測試:
在Struts1.x中我需要Mock出這兩個Http對象,使我們很難編寫Action的單元測試,與Struts1.x相比,Struts2的Action 不再依賴於
 
HttpServletRequest和HttpServletResponse對象,使我們能夠更方便的針對Action編寫單元測試。
Hibernate工作原理
1.         讀取並解析配置文件
2.         讀取並解析映射信息,創建SessionFactory
3.         打開Sesssion
4.         創建事務Transation
5.         持久化操作
6.         提交事務
7.         關閉Session
8.         關閉SesstionFactory

Hibernate優缺點
優點: 
1: hibernate是基於ORMapping技術的開源的框架,對JDBC進行了輕量級的封裝,使用面向對象的思維來操縱數據庫。 
2:hibernate提供了session緩存和二級緩存,對於不需要進行復雜查詢的系統,性能有提升。 
3:低侵入式設計 

缺點: 
1:hibernate學習成本太高。 
2:不適合有複雜的sql查詢(統計) 。 
3:不適合大量的聚集操作,(存儲過程)
優缺點補充:
1、 不需要編寫的SQL語句(不需要編輯JDBC),只需要操作相應的對象就可以了,就可以能夠存儲、更新、刪除、加載對象,可以提高生產效; 
2、因爲使用Hibernate只需要操作對象就可以了,所以我們的開發更對象化了; 
3、使用Hibernate,移植性好(只要使用Hibernate標準開發,更換數據庫時,只需要配置相應的配置文件就可以了,不需要做其它任務的操作); 
4、Hibernate實現了透明持久化:當保存一個對象時,這個對象不需要繼承Hibernate中的任何類、實現任何接口,只是個純粹的單純對象—稱爲POJO對象(最純粹的對象—這個對象沒有繼承第三方框架的任何類和實現它的任何接口) 
5、Hibernate是一個沒有侵入性的框架,沒有侵入性的框架我們一般稱爲輕量級框架 
6、Hibernate代碼測試方便。
發佈了12 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章