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