Struts2框架前端
1、簡介程序員
Struts2是一個至關強大的Java Web開源框架,是一個基於POJO的Action的MVC Web框架。它基於當年的WebWork和XWork框架,繼承其優勢,同時作了至關的改進。spring
一、Struts2基於MVC架構,框架結構清晰,開發流程一目瞭然,開發人員能夠很好的掌控開發的過程。數據庫
二、使用OGNL進行參數傳遞。OGNL提供了在Struts2裏訪問各類做用域的數據的簡單方式,你能夠方便的獲取Request、Attribute、Application、Session、Parameters中的數據。大大簡化了開發人員在獲取這些數據是的代碼量。編程
三、強大的攔截器。Struts2的攔截器是一個Action級別的AOP,Struts2中的許多特性都是經過攔截器來實現的,例如異常處理、文件上傳、驗證等。 攔截器是可配置與重用的,能夠將一些通用的功能如:登陸驗證、權限驗證等置於攔截器中以完成了系統中的權限驗證功能。服務器
四、易於測試。Struts2的Action都是簡單的POJO,這樣能夠方便的對Struts2的Action編寫測試用例,大大方便了Java Web項目的測試。session
五、易於擴展的插件機制。在Struts2添加擴展是一件愉快而輕鬆的事情,只須要將所須要的Jar包放到WEB-INF/lib文件中,在Struts.xml中作一些簡單的設置就能夠實現擴展。數據結構
六、模塊化管理。Struts2已經把模塊化做爲了體系架構中的基本思想,能夠經過三種方法來將應用程序模塊化:將配置信息拆分紅多個文件把自包含的應用模塊建立爲插件建立的框架特性,即將於特定應用無關的新功能組織成插件,以添加到多個應用中去。架構
七、全局結果與聲明式異常。爲應用程序添加全局的Result,和在配置文件中對異常進行處理,這樣當處理過程當中出現指定異常時,能夠跳轉到特定頁面。mvc
2、Struts2的工做機制
在Struts2框架中的處理大概分爲:
一、客戶端初始化一個指向Servlet容器(如Tomcat)的請求;
二、這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個叫作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫組,例如:SiteMeshPlugin);
三、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請求是否須要調用某個Action;
四、若是ActionMapper決定須要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy;
五、ActionProcy經過Configuration Manager詢問框架的配置文件,找到須要調用的Action類;
六、ActionProxy建立一個ActionInvocation實例。
七、ActionInvocation實例使用命令模式來調用,在調用Action的過程先後,
涉及到相關攔截器(Interceptor)的調用。
八、一旦Action執行完畢,ActionInvocation負責根據Struts.xml中的配置找到對應的返回結果。返回結果一般是(但不老是,也多是另外的一個Action鏈)一個須要被表示的JSP或者FreeMarker的模板。在表示過程當中可使用Struts2框架中繼承的標籤。在這個過程當中須要涉及到ActionMapper。
Spring框架講解
1、簡介
Spring爲企業應用的開發提供了一個輕量級的解決方案,包括基於依賴注入的核心機制,基於AOP的聲明式事務管理,與多種持久層技術的整合,以及優秀的Web MVC框架等。Spring支持對POJO(Plain Object Java Object,指最傳統的Java對象,和任何模式都無關)的管理。Spring的目標是實現一個全方位的整合框架,在Spring框架下實現多個子框架的組合,這些子框架之間彼此能夠獨立,也可使用其它的框架方案加以代替。
Spring是一個開源的項目;它基於IOC和AOP的架構多層J2ee系統的框架,
但它不強迫你必須在每一層中必須使用Spring,由於它模塊化的很好,容許你根據本身的須要選擇使用它的某一個模塊;它實現了很優雅的MVC,對不一樣的數據訪問技術提供了統一的接口,採用IOC使得能夠很容易的實現bean的裝配,提供了簡潔的AOP並據此實現Transaction Manager等等。
優勢:
一、Spring能有效地組織你的中間層對象,無論你是否選擇使用了EJB。
二、Spring能消除在許多工程中常見的對Singleton的過多使用;下降了系統的可測試性和麪向對象的程度。
三、經過一種在不一樣應用程序和項目間一致的方法來處理配置文件,Spring能消除各類各樣自定義格式的屬性文件的須要。
四、經過把對接口編程而不是對類編程的代價幾乎減小到沒有,Spring可以促進養成好的編程習慣。
五、Spring被設計爲讓使用者它建立的應用盡量少的依賴於他的API。
六、使用Spring構建的應用程序易於單元測試。
七、Spring能使EJB的使用成爲一個實現選擇,而不是應用架構的必然選擇。
八、Spring幫助你解決許多問題而無需使用EJB。
九、Spring爲數據存取提供了一個一致的框架,不論使用的是JDBC仍是O/R Mapping產品(如Hibernate)。
缺點:
Jsp中要寫不少代碼、控制器過於靈活,缺乏一個公用控制器。
2、Spring的工做機制
一、用戶向服務器發送請求,請求被Spring前端控制DispatcherServlet捕獲;
2.、DispatcherServlet對請求URL進行解析,獲得請求資源標示符(URI)。而後根據該URI,調用Handler Mapping得到該Handler配置的全部相關的對象(包括Handler對象以及Handler對象對應的攔截器),最後以HandlerExecutionChain對象的形式返回;
三、DispatcherServlet根據得到的Handler,選擇一個合適的HandlerAdapter。(若是成功得到後,此時將開始執行攔截器的preHandler(…)方法)。
四、提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)。在填充Handler的入參過程當中,根據你的配置,Spring將幫助你作一些額外的工做(如:HttpMessageConveter、數據裝換、數據格式化、數據驗證),驗證結果存儲到BindingResult或Error中。
五、Handler執行完成後,向DispatcherServlet返回一個ModelAndView對對象;
六、根據返回的ModelAndView,選擇一個合適的ViewResolver(必須是已經註冊到Spring容器中的ViewResolver)返回給DispatcherServlet;
七、ViewResolver結合Model和View,來渲染試圖。
八、將渲染結果返回給客戶端。
註解:
1.spring mvc將全部的請求都提交給DispatcherServlet,它會委託應用系統的其餘模塊負責負責對請求進行真正的處理工做。
2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.
3.DispatcherServlet將請求提交到目標Controller
4.Controller進行業務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給客戶端。
Hibernate框架講解
1、簡介
Hibernate是開源的、用於封裝數據訪問層的組件,咱們稱之爲數據訪問層框架(或持久層框架)。
以前咱們經過JDBC/SQL語句從數據庫中訪問/操做數據,而Hibernate就是封裝了這些操做,用於數據訪問層的組件技術。
出現Hibernate框架以前在企業項目開發過程當中,以下幾點形成了程序員們的痛苦:
一、SQL語句過於繁雜和數據庫的耦合度高。
二、指有些SQL會涉及到多表操做,或者有些表會很是龐大,這時候寫在Dao中的SQL就會很是複雜,同時致使Dao和數據庫的耦合度較高。
三、不一樣數據庫之間SQL的不一樣,致使移植困難。
四、不一樣數據庫雖然SQL語句大體相同,可是還有一些細節上的差異,好比Oracle中的分頁方式和MySQL中的分頁是不一樣的,因此會有代碼移植困難的因素。
五、二維關係表和對象之間數據結構的不匹配。
六、咱們從數據庫中取出的數據時結果集(一張表),而咱們開發時須要將查詢到的結果集封裝爲對象,然而數據庫中二維表的數據結構和內存中Java對象的數據結構是不匹配的(表中的數據須要通過處理才能變爲Java對象)。
基於如上幾點,痛苦促進了技術的革新和進步,Hibernate應用而生。
2、Hibernate的工做原理-ORM
對象-關係映射(Object-Relationship Mapping)
在咱們的應用程序(App)中數據用對象類體現,而在數據庫中,數據使用表的形式保存。
Hibernate用於應用程序中的對象(Object)與表中的數據關係(Relationship)之間的映射(Mapping),即把對象保存到關係表中或者把關係表中數據取出映射爲對象。
能夠這樣理解,當咱們使用Hibernate框架技術,就能夠直接從數據庫中取出Java對象,或者把Java對象直接保存於數據庫中,中間寫SQL語句等繁瑣的步驟被Hibernate封裝,對咱們是透明的。
Hibernate是自動化程度很高的組件,所以比較難以駕馭,在對Hibernate理解不夠透徹的狀況下使用,稍不留神可能就會影響性能。
業界還有一些自動化程序度稍低的數據訪問層組件,好比Ibatis,至關於半自動化的儀器,可控性較Hibernate強一些,目前也比較流行。
處理步驟:
一、經過Configuration().configure(); //讀取並解析hibernate.cfg.xml配置文件
二、由hibernate.cfg.xml中的<mapping resource=」**/**/User.hbm.xml」>讀取並解析映射信息.
三、經過config.buildSessionFactory(); //建立SessionFactory;
四、sessionFactory.openSession(); //打開Session
五、session.beginTransaction(); //建立事務Transaction
六、persistent operate 持久化操做.
七、Session.getTransaction().commit(); //提交事務
八、關閉Session
九、關閉
SessionFactory