![SSH框架的底層機制及原理教學內(nèi)容_第1頁](http://file4.renrendoc.com/view/01a34ce8e7084637a85e15fc65f5d6d5/01a34ce8e7084637a85e15fc65f5d6d51.gif)
![SSH框架的底層機制及原理教學內(nèi)容_第2頁](http://file4.renrendoc.com/view/01a34ce8e7084637a85e15fc65f5d6d5/01a34ce8e7084637a85e15fc65f5d6d52.gif)
![SSH框架的底層機制及原理教學內(nèi)容_第3頁](http://file4.renrendoc.com/view/01a34ce8e7084637a85e15fc65f5d6d5/01a34ce8e7084637a85e15fc65f5d6d53.gif)
![SSH框架的底層機制及原理教學內(nèi)容_第4頁](http://file4.renrendoc.com/view/01a34ce8e7084637a85e15fc65f5d6d5/01a34ce8e7084637a85e15fc65f5d6d54.gif)
![SSH框架的底層機制及原理教學內(nèi)容_第5頁](http://file4.renrendoc.com/view/01a34ce8e7084637a85e15fc65f5d6d5/01a34ce8e7084637a85e15fc65f5d6d55.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。SSH框架的底層機制及原理-HYPERLINK/blog/688890Struts1的工作原理Struts1工作原理圖:1、初始化:struts框架的總控制器ActionServlet是一個Servlet,它在web.xml中配置成自動啟動的Servlet,在啟動時總控制器會讀取配置文件(struts-config.xml)的配置信息,為struts中不同的模塊初始化相應的對象。(面向?qū)ο笏枷?2、發(fā)送請求:用戶提交表單或通過URL向WEB服務器提交請求,請求的數(shù)據(jù)用HTTP協(xié)議傳給web服務器。3、f
2、orm填充:struts的總控制器ActionServlet在用戶提交請求時將數(shù)據(jù)放到對應的form對象中的成員變量中。4、派發(fā)請求:控制器根據(jù)配置信息對象ActionConfig將請求派發(fā)到具體的Action,對應的formBean一并傳給這個Action中的excute()方法。5、處理業(yè)務:Action一般只包含一個excute()方法,它負責執(zhí)行相應的業(yè)務邏輯(調(diào)用其它的業(yè)務模塊)完畢后返回一個ActionForward對象。服務器通過ActionForward對象進行轉(zhuǎn)發(fā)工作。6、返回響應:Action將業(yè)務處理的不同結(jié)果返回一個目標響應對象給總控制器。7、查找響應:總控制器根據(jù)Ac
3、tion處理業(yè)務返回的目標響應對象,找到對應的資源對象,一般情況下為jsp頁面。8、響應用戶:目標響應對象將結(jié)果傳遞給資源對象,將結(jié)果展現(xiàn)給用戶。HYPERLINK/problems/13397ossh框架啟動流程t_blankssh框架啟動流程系統(tǒng)從職責上分為四層:表示層、業(yè)務邏輯層、數(shù)據(jù)持久層和域模塊層。其中使用Struts作為系統(tǒng)的整體基礎架構(gòu),負責MVC的分離,在Struts框架的模型部分,利用Hibernate框架對持久層提供支持,業(yè)務層用Spring支持。具體做法是:用面向?qū)ο蟮姆治龇椒ǜ鶕?jù)需求提出一些模型,將這些模型實現(xiàn)為基本的Java對象,然后編寫基本的DAO接口,并給出Hib
4、ernate的DAO實現(xiàn),采用Hibernate架構(gòu)實現(xiàn)的DAO類來實現(xiàn)Java類與數(shù)據(jù)庫之間的轉(zhuǎn)換和訪問,最后由Spring完成業(yè)務邏輯。系統(tǒng)的基本業(yè)務流程是:在表示層中,首先通過JSP頁面實現(xiàn)交互界面,負責傳送請求(Request)和接收響應(Response),然后Struts根據(jù)配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應的Action處理。在業(yè)務層中,管理服務組件的SpringIoC容器負責向Action提供業(yè)務模型(Model)組件和該組件的協(xié)作對象數(shù)據(jù)處理(DAO)組件完成業(yè)務邏輯,并提供事務處理、緩沖池等容器組件以提
5、升系統(tǒng)性能和保證數(shù)據(jù)的完整性。而在持久層中,則依賴于Hibernate的對象化映射和數(shù)據(jù)庫交互,處理DAO組件請求的數(shù)據(jù),并返回處理結(jié)果。采用上述開發(fā)模型,不僅實現(xiàn)了視圖、控制器與模型的徹底分離,而且還實現(xiàn)了業(yè)務邏輯層與持久層的分離。這樣無論前端如何變化,模型層只需很少的改動,并且數(shù)據(jù)庫的變化也不會對前端有所影響,大大提高了系統(tǒng)的可復用性。而且由于不同層之間耦合度小,有利于團隊成員并行工作,大大提高了開發(fā)效率。Struts1與struts2有什么不同1.Action類Stuts1要求Action類繼承一個抽象基類。Struts1的一個普通問題是使用抽象類編程而不是接口。Struts2Actio
6、n類可以實現(xiàn)一個Action接口,也可以實現(xiàn)其它接口,使可選和定制的服務成為可能。Struts2提供一個ActionSupport基類去實現(xiàn)常用的接口。Action接口不是必須的,任何有execute標識的POJO對象都可以用作Struts2的Action對象。2.線程模式:Struts1Action是單例模式并且必須是線程安全的,因為僅有Action的一個實例來處理所有的請求。單例策略限制了Struts1Action能作的事,并且要在開發(fā)時特別小心。Action資源必須是線程安全的或同步的。Struts2Action對象為每一個請求產(chǎn)生一個實例,因此沒有線程安全問題。3.Servlet依賴:
7、Struts1Action依賴于ServletAPI,因為當一個Action被調(diào)用時,HttpServletResquest和HttpServletResponse被傳遞給execute方法,即Action依賴了容器,測試變得非常麻煩。Struts2Action不依賴于容器,允許Action脫離容器單獨被測試。如果需要,Struts2Action仍然可以訪問初始的request和response。但是,其它的元素減少或者消除了直接訪問HttpServletRequset和HttpServletResponse的必要性。4.捕獲輸入:Struts1使用ActionForm對象捕獲輸入。所有的Ac
8、tionForm必須繼承一個基類。因為其它JavaBean不能用作ActionForm,開發(fā)者經(jīng)常創(chuàng)建多余的類捕獲輸入。動態(tài)Bean可以作為創(chuàng)建傳統(tǒng)ActionForm的選擇,但是,開發(fā)者可能是在重新描述已經(jīng)存在的JavaBean,仍然會導致有冗余的javabean。Struts2直接使用Action屬性作為輸入屬性,消除了對第二輸入對象的需求。Action屬性能夠通過web頁面上的taglibs訪問。Struts2也支持ActionForm模式。(Struts2用普通的POJO來接收數(shù)據(jù))5.表達式語言:Struts1整合了JSTL,但對集合和索引屬性的支持很弱。Struts2可以是使用JS
9、TL,但是也支持一個更加強大和靈活的表達式語言“ObjectGraphNotationLanguage”(OGNL對象圖導航語言).6.綁定值到頁面(view):Struts1使用標準JSP機制把對象綁定到頁面中來訪問,Struts1要傳遞值的時候必須往request里放、往session里放,然后再傳遞到jsp里面,el表達式得到。Struts2使用“ValueStack”技術,使taglib能夠訪問值而不需要把你的頁面和對象綁定起來。ValueStack策略允許通過一系列名稱相同但類型不同的屬性重用頁面。值棧技術非常著名。不需要request、不需要session,直接從Action中取值
10、。7.類型轉(zhuǎn)換:Struts1ActionForm屬性通常都是String類型。Struts1使用Commons-Beanutils進行類型轉(zhuǎn)換。每個類一個轉(zhuǎn)換器,對每一個實例來說是不可配置的。Struts2使用OGNL進行類型轉(zhuǎn)換。提供基本和常用對象的轉(zhuǎn)換器。8.校驗:Struts1支持在ActionForm的validate方法中手動校驗,或者通過CommonsValidator的擴展來校驗。同一個類可以有不同的校驗內(nèi)容,但不能校驗子對象。Struts2支持通過validate方法和Xwork校驗框架來進行校驗。Xwork校驗框架使用為屬性類類型定義的校驗和內(nèi)容校驗,來支持chain校驗子
11、屬性。9.Action執(zhí)行的控制:Struts1支持每一個模塊有單獨的RequestProcessors(生命周期),但是模塊中的所有Action必須共享相同的生命周期。(服務器重啟時,Action生命周期結(jié)束,即生命周期無法控制)。Struts2支持通過攔截器堆棧(InterceptorStacks)為每一個Action創(chuàng)建不同的生命周期。堆棧能夠根據(jù)需要和不同的Action一起使用。(可以控制Action的生命周期)簡單的說:struts1和struts2的核心原理不同:struts1.X是基于servlet的struts2是xwork的變體:他的核心是filterstruts1是單例模式
12、開發(fā),struts2是多例模式。struts1的單例模式好處是節(jié)省內(nèi)存,缺點是并發(fā)性查,非同步。struts2好處是線程安全是同步的每次使用開辟新的內(nèi)存空間,缺點是占用資源多。Model1的原理:Struts1的工作原理:圖2它引入了控制器這個概念,控制器一般由servlet來擔任,客戶端的請求不再直接送給一個處理業(yè)務邏輯的JSP頁面,而是送給這個控制器,再由控制器根據(jù)具體的請求調(diào)用不同的事務邏輯,并將處理結(jié)果返回到合適的頁面。因此,這個servlet控制器為應用程序提供了一個進行前-后端處理的中樞。一方面為輸入數(shù)據(jù)的驗證、身份認證、日志及實現(xiàn)國際化編程提供了一個合適的切入點;另一方面也提供了
13、將業(yè)務邏輯從JSP文件剝離的可能。業(yè)務邏輯從JSP頁面分離后,JSP文件蛻變成一個單純完成顯示任務的東西,這就是常說的View。而獨立出來的事務邏輯變成人們常說的Model,再加上控制器Control本身,就構(gòu)成了MVC模式。實踐證明,MVC模式為大型程序的開發(fā)及維護提供了巨大的便利。其實,MVC開始并不是為Web應用程序提出的模式,傳統(tǒng)的MVC要求M將其狀態(tài)變化通報給V,但由于Web瀏覽器工作在典型的拉模式而非推模式,很難做到這一點。因此有些人又將用于Web應用的MVC稱之為MVC2。正如上面所提到的MVC是一種模式,當然可以有各種不同的具體實現(xiàn),包括您自己就可以實現(xiàn)一個體現(xiàn)MVC思想的程序
14、框架,Struts就是一種具體實現(xiàn)MVC2的程序框架。它的大致結(jié)構(gòu)如圖三所示:圖三圖三基本勾勒出了一個基于Struts的應用程序的結(jié)構(gòu),從左到右,分別是其表示層(view)、控制層(controller)、和模型層(Model)。其表示層使用Struts標簽庫構(gòu)建。來自客戶的所有需要通過框架的請求統(tǒng)一由叫ActionServlet的servlet接收(ActionServletStruts已經(jīng)為我們寫好了,只要您應用沒有什么特別的要求,它基本上都能滿足您的要求),根據(jù)接收的請求參數(shù)和Struts配置(struts-config.xml)中ActionMapping,將請求送給合適的Action
15、去處理,解決由誰做的問題,它們共同構(gòu)成Struts的控制器。Action則是Struts應用中真正干活的組件,開發(fā)人員一般都要在這里耗費大量的時間,它解決的是做什么的問題,它通過調(diào)用需要的業(yè)務組件(模型)來完成應用的業(yè)務,業(yè)務組件解決的是如何做的問題,并將執(zhí)行的結(jié)果返回一個代表所需的描繪響應的JSP(或Action)的ActionForward對象給ActionServlet以將響應呈現(xiàn)給客戶。過程如圖四所示:圖四這里要特別說明一下的是:就是Action這個類,上面已經(jīng)說到了它是Struts中真正干活的地方,也是值得我們高度關注的地方??墒牵P于它到底是屬于控制層還是屬于模型層,存在兩種不同的
16、意見,一種認為它屬于模型層,如:JSPWeb編程指南;另一些則認為它屬于控制層如:ProgrammingJakartaStruts、MasteringJakartaStruts和StrutsKickStart等認為它是控制器的一部分,還有其他一些書如StrutsinAction也建議要避免將業(yè)務邏輯放在Action類中,也就是說,圖3中Action后的括號中的內(nèi)容應該從中移出,但實際中確有一些系統(tǒng)將比較簡單的且不打算重用的業(yè)務邏輯放在Action中,所以在圖中還是這樣表示。顯然,將業(yè)務對象從Action分離出來后有利于它的重用,同時也增強了應用程序的健壯性和設計的靈活性。因此,它實際上可以看作
17、是Controller與Model的適配器,如果硬要把它歸于那一部分,筆者更傾向于后一種看法,即它是Controller的一部分,換句話說,它不應該包含過多的業(yè)務邏輯,而應該只是簡單地收集業(yè)務方法所需要的數(shù)據(jù)并傳遞給業(yè)務對象。實際上,它的主要職責是:校驗前提條件或者聲明調(diào)用需要的業(yè)務邏輯方法檢測或處理其他錯誤路由控制到相關視圖上面這樣簡單的描述,初學者可能會感到有些難以接受,下面舉個比較具體的例子來進一步幫助我們理解。如:假設,我們做的是個電子商務程序,現(xiàn)在程序要完成的操作任務是提交定單并返回定單號給客戶,這就是關于做什么的問題,應該由Action類完成,但具體怎么獲得數(shù)據(jù)庫連接,插入定單數(shù)據(jù)
18、到數(shù)據(jù)庫表中,又怎么從數(shù)據(jù)庫表中取得這個定單號(一般是自增數(shù)據(jù)列的數(shù)據(jù)),這一系列復雜的問題,這都是解決怎么做的問題,則應該由一個(假設名為orderBo)業(yè)務對象即Model來完成。orderBo可能用一個返回整型值的名為submitOrder的方法來做這件事,Action則是先校驗定單數(shù)據(jù)是否正確,以免常說的垃圾進垃圾出;如果正確則簡單地調(diào)用orderBo的submitOrder方法來得到定單號;它還要處理在調(diào)用過程中可能出現(xiàn)任何錯誤;最后根據(jù)不同的情況返回不同的結(jié)果給客戶。二、為什么要使用Struts框架既然本文的開始就說了,自己可以建這種框架,為什么要使用Struts呢?我想下面列舉的
19、這些理由是顯而易見的:首先,它是建立在MVC這種公認的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一個好的控制器和一套定制的標簽庫上,也就是說它的著力點在C和V上,因此,它天生就有MVC所帶來的一系列優(yōu)點,如:結(jié)構(gòu)層次分明,高可重用性,增加了程序的健壯性和可伸縮性,便于開發(fā)與設計分工,提供集中統(tǒng)一的權限控制、校驗、國際化、日志等等;其次,它是個開源項目得到了包括它的發(fā)明者CraigR.McClanahan在內(nèi)的一些程序大師和高手持續(xù)而細心的呵護,并且經(jīng)受了實戰(zhàn)的檢驗,使其功能越來越強大,體系也日臻完善;最后,是它對其他技術和框架顯示出很好的融合性。如,現(xiàn)在,它已經(jīng)與tile
20、s融為一體,可以展望,它很快就會與JSF等融會在一起。當然,和其他任何技術一樣,它也不是十全十美的,如:它對類和一些屬性、參數(shù)的命名顯得有些隨意,給使用帶來一些不便;還有如Action類execute方法的只能接收一個ActionForm參數(shù)等。但瑕不掩瑜,這些沒有影響它被廣泛使用為什么使用Struts2?新版本的Struts2.0是struts的action架構(gòu)和webwork的融合體.依照Struts2.0.1的發(fā)布公告,一些關鍵特性如下:設計簡單:使用抽象類而不是接口是Struts1的一個設計上的問題,這已經(jīng)在Struts2中得到了解決.在Struts2中絕大多數(shù)類都是基于接口的,并且它
21、的絕大多數(shù)核心接口都是獨立于HTTP的.Struts2的Action類是獨立于框架的,可視為單純的POJO.框架的組件都設法保持松耦合單純的Action:Action都是單純的POJO.任何含有execute()方法的java類都可以當作Action類來使用.甚至我們始終都不需要實現(xiàn)接口.反轉(zhuǎn)控制會在開發(fā)Action類的時候得到介紹過,這能讓Action中立于底層框架.不再使用ActionForm:ActionForm特性不再在Structs2中出現(xiàn).簡單的JavaBean即可對Action直接傳遞參數(shù).不再需要全部使用String類型的參數(shù).簡單的測試:Struts2的Action是獨立于H
22、TTP并且中立于框架的.這使得Struts2的程序可以很容易的在沒有模擬對象的情況下測試.巧妙的默認值:大多數(shù)配置元素都設有一個根據(jù)需要設定的默認值.甚至根據(jù)需要基于XML的默認配置文件都可以進行重寫.改良的結(jié)果集:不像Struts1中的ActionForward,Struts2的結(jié)果集靈活的提供了多種類型的輸出,事實上這促進了響應的準備工作.更好的標簽特性:Struts2可以添加樣式表驅(qū)動標記,這使我們創(chuàng)建相同的頁面僅用更少的代碼.Struts2的標簽更有效而且是面向結(jié)果的.Struts2的標簽標記可以通過修改基礎樣式表來修改.個別的標簽標記可以通過編輯FreeMarker的模板來修改.JS
23、P和FreeMarker都完全得到了支持.引入注釋:在Struts2程序中,除了XML和Javaproperties配置文件外,Java5的注釋也可以作為一種選擇.注釋使得XML的使用降至最低.有狀態(tài)的Checkbox:Struts2中的checkbox不需要對false值進行特殊處理.快速開始:很多改變無需重啟web容器即可實現(xiàn).自定義控制器:Struts1可以自定義每一個模塊的請求處理器,如果需要,Struts2可以自定義每一個Action的請求處理.易與Spring整合:Struts2的Action與Spring是友好的,只需添加Spring的bean輕巧的插件:Struts2可以通過添
24、加一個Jar文件來進行擴展,不再需要手動配置!支持AJAX:AJAX主題對提升程序交互有著重要的意義.Struts2框架提供了一套標簽來AJAX化你的程序甚至DOJO.AJAX特性包括:1.AJAX客戶端驗證.2.支持遠程表單提交.(同樣適用于submit標簽)3.先進的div模板提供動態(tài)重載部份HTML4.先進的模板提供遠程加載和計算Javascript的能力.5.AJAX-only選項卡面板的實現(xiàn)6.豐富的發(fā)布/訂閱事件模型7.自動交互完善標簽HYPERLINK/group/topic/10534o深入全面闡釋Struts2的方方面面t_blank深入全面闡釋Struts2的方方面面一、S
25、truts概述Struts是一個用來開發(fā)Model2應用程序的框架。這個框架可以提高開發(fā)工作的速度,因為它提供的下面這些功能解決了Web應用程序開發(fā)過程中的一些常見問題:對頁面導航活動進行管理;對來自用戶的輸入數(shù)據(jù)進行合法性驗證;統(tǒng)一的布局;可擴展性;國際化和本地化;支持Ajax技術。因為Struts是一個Model2框架,所以在使用Struts時還應該遵守以下幾條不成文的規(guī)定。不要在JSP頁面里嵌入Java代碼,應該把所有的業(yè)務邏輯包含在一些被稱為“動作類”(actionclass)的Java類里。在JSP頁面里使用ExpressionLanguage(OGNL)去訪問有關的模型對象。盡量避
26、免編寫自定義標簽(因為自定義標簽的代碼比較難以編寫)。二、升級到Struts2你也許用過Struts1編程,這里提供了一個關于Struts2新功能的簡要介紹。在Struts1里需要使用一個像ActionServlet類這樣的東西作為servlet控制器;Struct2使用了一個過濾器來完成同樣的任務。在Struts2里沒有任何動作表單。在Struts1里,每個HTML表單都對應著一個ActionForm實例,你可以從動作類訪問這個動作表單,并用它來填充數(shù)據(jù)傳輸對象。在Struts2里,HTML表單將被直接映射為一個POJO,而不再需要你創(chuàng)建一個數(shù)據(jù)傳輸對象,因為沒有動作表單,維護工作變得簡單容
27、易了,你不再需要與那么多的類打交道。問題來了:沒有了動作表單,怎樣才能在Struts2里通過編程對用戶輸入進行合法性驗證呢?答案是把驗證邏輯編寫在動作類里。Struts1通過幾個標簽庫提供了一批定制標簽供程序員在JSP頁面里使用,其中最重要的是HTML標簽庫、Bean標簽庫和Logic標簽庫。Servlet2.4里的JSTL和EL(ExpressionLanguage,表達式語言)經(jīng)常被用來代替Bean和Logic標簽庫。Struts2為程序員準備了一個應有盡有的標簽庫,你不再需要JSTL,但在某些場合你可能仍需要EL。在Struts1里,你還需要用到一些Struts配置文件,其中最主要的是存
28、放在各Web應用程序里的WEB-INF子目錄里的struts-config.xml(默認文件名)。在Struts2里,你仍需要用到多個配置文件,但必須把它們存放在WEB-INF/classes子目錄或它的某個下級子目錄里。要想使用Struts2,你的系統(tǒng)里必須有Java5和Servlet2.4(或更高版本)。之所以需要有Java5,是因為Java5里新增加的注解在Struts2里扮演著重要角色。我們撰寫本書時,Java6已經(jīng)發(fā)布,Java7也指日可待,你很可能已經(jīng)在使用Java5或Java6了。在Struts1里,動作類必須擴展自org.apache.struts.action.Action類
29、。在Struts2里,任何一個POJO都可以是一個動作類。不過,我們將在本書第3章說明,在Struts2里最好對ActionSupport類進行擴展。在此基礎上,可用一個動作類來完成相關的動作。Struts2在JSP頁面里使用OGNL來顯示各種對象模型,而不再是JSPEL和JSTL。原本是Struts1組件之一的Tiles現(xiàn)在已經(jīng)發(fā)展為一個獨立的ApacheHTTP沒有“類型”的概念,在HTTP請求里發(fā)送的值都是字符串。在把表單字段映射到非String類型的動作屬性時,Struts會自動對這些值進行必要的轉(zhuǎn)換。這一章將解釋Struts如何完成這類轉(zhuǎn)換,你還將學到如何為更加復雜的情spring工
30、作機制及為什么要用?1.springmvc請所有的請求都提交給DispatcherServlet,它會委托應用系統(tǒng)的其他模塊負責對請求進行真正的處理工作。2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.3.DispatcherServlet請求提交到目標Controller4.Controller進行業(yè)務邏輯處理后,會返回一個ModelAndView5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象6.視圖對象負責渲染返回給客戶端。為什么用:AOP讓開發(fā)
31、人員可以創(chuàng)建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序代碼中。使用AOP后,公共服務(比如日志、持久性、事務等)就可以分解成方面并應用到域?qū)ο笊?,同時不會增加域?qū)ο蟮膶ο竽P偷膹碗s性。IOC允許創(chuàng)建一個可以構(gòu)造對象的應用環(huán)境,然后向這些對象傳遞它們的協(xié)作對象。正如單詞倒置所表明的,IOC就像反過來的JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構(gòu)造(straightconstruction),每一個對象都是用其協(xié)作對象構(gòu)造的。因此是由容器管理協(xié)作對象(collaborator)。Spring即使一個AOP框架,也是一IOC容器。Spring最好的地
32、方是它有助于您替換對象。有了Spring,只要用JavaBean屬性和配置文件加入依賴性(協(xié)作對象)。然后可以很容易地在需要時替換具有類似接口的協(xié)作對象。Spring框架是一個分層架構(gòu),由7個定義良好的模塊組成。Spring模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理bean的方式,如圖1所示。組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯(lián)合實現(xiàn)。每個模塊的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(IOC)模式將應用程序的配置和依賴
33、性規(guī)范與實際的應用程序代碼分開。Spring上下文:Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務,例如JNDI、EJB、電子郵件、國際化、校驗和調(diào)度功能。SpringAOP:通過配置管理特性,SpringAOP模塊直接將面向方面的編程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何對象支持AOP。SpringAOP模塊為基于Spring的應用程序中的對象提供了事務管理服務。通過使用SpringAOP,不用依賴EJB組件,就可以將聲明性事務管理集成到應用程序中。SpringDAO:JDBCDAO抽象層提供了有意義
34、的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應商拋出的錯誤消息。異常層次結(jié)構(gòu)簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關閉連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層次結(jié)構(gòu)。SpringORM:Spring框架插入了若干個ORM框架,從而提供了ORM的對象關系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務和DAO異常層次結(jié)構(gòu)。SpringWeb模塊:Web上下文模塊建立在應用程序上下文模塊之上,為基于Web的應用程序提供了上下文。所以,Spring框架支持與JakartaStru
35、ts的集成。Web模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ?。SpringMVC框架:MVC框架是一個全功能的構(gòu)建Web應用程序的MVC實現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納了大量視圖技術,其中包括JSP、Velocity、Tiles、iText和POI。Spring框架的功能可以用在任何J2EE服務器中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring的核心要點是:支持不綁定到特定J2EE服務的可重用業(yè)務和數(shù)據(jù)訪問對象。毫無疑問,這樣的對象可以在不同J2EE環(huán)境(Web或EJB)、獨立應用程序、測試環(huán)境之間重用。共2頁:12內(nèi)容導航第1頁:Hibernat
36、e工作原理及用的理由(1)第2頁:Hibernate工作原理及用的理由(2)IOC和AOP控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務連接,但在配置文件中描述哪一個組件需要哪一項服務。容器(在Spring框架中是IOC容器)負責將這些聯(lián)系在一起。在典型的IOC場景中,容器創(chuàng)建了所有對象,并設置必要的屬性將它們連接在一起,決定什么時間調(diào)用方法。下表列出了IOC的一個實現(xiàn)模式。Spring框架的IOC容器采用類型2和類型3實現(xiàn)。面向方面的編程即AOP,是一種編程技術,它允許程序員對橫切關注點或橫切典型的職責分界線的行為(例如日志和事務
37、管理)進行模塊化。AOP的核心構(gòu)造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。AOP和IOC是補充性的技術,它們都運用模塊化方式解決企業(yè)應用程序開發(fā)中的復雜問題。在典型的面向?qū)ο箝_發(fā)方式中,可能要將日志記錄語句放在所有方法和Java類中才能實現(xiàn)日志功能。在AOP方式中,可以反過來將日志服務模塊化,并以聲明的方式將它們應用到需要日志的組件上。當然,優(yōu)勢就是Java類不需要知道日志服務的存在,也不需要考慮相關的代碼。所以,用SpringAOP編寫的應用程序代碼是松散耦合的。AOP的功能完全集成到了Spring事務管理、日志和其他各種特性的上下文中。IOC容器Spring設計的核心是org
38、.springframework.beans包,它的設計目標是與JavaBean組件一起使用。這個包通常不是由用戶直接使用,而是由服務器將其用作其他多數(shù)功能的底層中介。下一個最高級抽象是BeanFactory接口,它是工廠設計模式的實現(xiàn),允許通過名稱創(chuàng)建和檢索對象。BeanFactory也可以管理對象之間的關系。BeanFactory支持兩個對象模型。單態(tài)模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton是默認的也是最常用的對象模型。對于無狀態(tài)服務對象很理想。原型模型確保每次檢索都會創(chuàng)建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合。bean工廠的概
39、念是Spring作為IOC容器的基礎。IOC將處理事情的責任從應用程序代碼轉(zhuǎn)移到框架。正如我將在下一個示例中演示的那樣,Spring框架使用JavaBean屬性和配置數(shù)據(jù)來指出必須設置的依賴關系。BeanFactory接口因為org.springframework.beans.factory.BeanFactory是一個簡單接口,所以可以針對各種底層存儲方法實現(xiàn)。最常用的BeanFactory定義是XmlBeanFactory,它根據(jù)XML文件中的定義裝入bean,如清單1所示。清單1.XmlBeanFactoryBeanFactoryfactory=newXMLBeanFactory(new
40、FileInputSteam(mybean.xml);在XML文件中定義的Bean是被消極加載的,這意味在需要bean之前,bean本身不會被初始化。要從BeanFactory檢索bean,只需調(diào)用getBean()方法,傳入將要檢索的bean的名稱即可,如清單2所示。清單2.getBean()MyBeanmybean=(MyBean)factory.getBean(mybean);每個bean的定義都可以是POJO(用類名和JavaBean初始化屬性定義)或FactoryBean。FactoryBean接口為使用Spring框架構(gòu)建的應用程序添加了一個間接的級別。IOC示例理解控制反轉(zhuǎn)最簡單
41、的方式就是看它的實際應用。在對由三部分組成的Spring系列的第1部分進行總結(jié)時,我使用了一個示例,演示了如何通過SpringIOC容器注入應用程序的依賴關系(而不是將它們構(gòu)建進來)。我用開啟在線信用帳戶的用例作為起點。對于該實現(xiàn),開啟信用帳戶要求用戶與以下服務進行交互:信用級別評定服務,查詢用戶的信用歷史信息。遠程信息鏈接服務,插入客戶信息,將客戶信息與信用卡和銀行信息連接起來,以進行自動借記(如果需要的話)。電子郵件服務,向用戶發(fā)送有關信用卡狀態(tài)的電子郵件。三個接口對于這個示例,我假設服務已經(jīng)存在,理想的情況是用松散耦合的方式把它們集成在一起。以下清單顯示了三個服務的應用程序接口。清單3.
42、CreditRatingInterfacePublicinterfaceCreditRatingInterfacePublicBooleangetUserCreditHistoryInformation(ICustomeriCustomer);清單3所示的信用級別評定接口提供了信用歷史信息。它需要一個包含客戶信息的Customer對象。該接口的實現(xiàn)是由CreditRating類提供的。清單4.CreditLinkingInterfacepublicinterfaceCreditLinkingInterfacepublicStringgetUrl();publicvoidsetUrl(Strin
43、gurl);publicvoidlinkCreditBankAccount()throwsException;信用鏈接接口將信用歷史信息與銀行信息(如果需要的話)連接在一起,并插入用戶的信用卡信息。信用鏈接接口是一個遠程服務,它的查詢是通過getUrl()方法進行的。URL由Spring框架的bean配置機制設置,我稍后會討論它。該接口的實現(xiàn)是由CreditLinking類提供的。清單5.EmailInterfacepublicinterfaceEmailInterfacepublicvoidsendEmail(ICustomeriCustomer);publicStringgetFromEm
44、ail();publicvoidsetFromEmail(StringfromEmail);publicStringgetPassword();publicvoidsetPassword(Stringpassword);publicStringgetSmtpHost();publicvoidsetSmtpHost(StringsmtpHost);publicStringgetUserId();publicvoidsetUserId(StringuserId);HYPERLINK/blog/249235Hibernate工作原理及為什么要用?原理:1.讀取并解析配置文件2.讀取并解析映射信息,創(chuàng)
45、建SessionFactory3.打開Sesssion4.創(chuàng)建事務Transation5.持久化操作6.提交事務7.關閉Session8.關閉SesstionFactory為什么要用:1.對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復性代碼。2.Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他很大程度的簡化DAO層的編碼工作3.hibernate使用Java反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性。4.hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數(shù)據(jù)庫,從一對一到多對多的各種復雜關系。2Hiber
46、nate是如何延遲加載?1.Hibernate2延遲加載實現(xiàn):a)實體對象b)集合(Collection)2.Hibernate3提供了屬性的延遲加載功能當Hibernate在查詢數(shù)據(jù)的時候,數(shù)據(jù)并沒有存在與內(nèi)存中,當程序真正對數(shù)據(jù)的操作時,對象才存在與內(nèi)存中,就實現(xiàn)了延遲加載,他節(jié)省了服務器的內(nèi)存開銷,從而提高了服務器的性能。3Hibernate中怎樣實現(xiàn)類之間的關系?(如:一對多、多對多的關系)類與類之間的關系主要體現(xiàn)在表與表之間的關系進行操作,它們都市對對象進行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文件中的many-to-one、one-to-many、many-to-
47、many、4說下Hibernate的緩存機制1.內(nèi)部緩存存在Hibernate中又叫一級緩存,屬于應用事物級緩存2.二級緩存:a)應用及緩存b)分布式緩存條件:數(shù)據(jù)不會被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用、非關鍵數(shù)據(jù)c)第三方緩存的實現(xiàn)5Hibernate的查詢方式Sql、Criteria,objectcomptositionHql:1、屬性查詢2、參數(shù)查詢、命名參數(shù)查詢3、關聯(lián)查詢4、分頁查詢5、統(tǒng)計函數(shù)6如何優(yōu)化Hibernate?1.使用雙向一對多關聯(lián),不使用單向一對多2.靈活使用單向一對多關聯(lián)3.不用一對一,用多對一取代4.配置對象緩存,不使用集合
48、緩存5.一對多集合使用Bag,多對多集合使用Set6.繼承類使用顯式多態(tài)7.表字段要少,表關聯(lián)不要怕多,有二級緩存撐腰7Struts工作機制?為什么要使用Struts?工作機制:Struts的工作流程:在web應用啟動時就會加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象當ActionServlet接收到一個客戶請求時,將執(zhí)行如下流程.-(1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息;-(2)如果ActionForm實例不存在,就創(chuàng)建一個ActionFo
49、rm對象,把客戶提交的表單數(shù)據(jù)保存到ActionForm對象中;-(3)根據(jù)配置信息決定是否需要表單驗證.如果需要驗證,就調(diào)用ActionForm的validate()方法;-(4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActionErrors對象,就表示表單驗證成功;-(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請求轉(zhuǎn)發(fā)給哪個Action,如果相應的Action實例不存在,就先創(chuàng)建這個實例,然后調(diào)用Action的execute()方法;-(6)Action的execute()方法返回一
50、個ActionForward對象,ActionServlet在把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指向的JSP組件;-(7)ActionForward對象指向JSP組件生成動態(tài)網(wǎng)頁,返回給客戶;為什么要用:JSP、Servlet、JavaBean技術的出現(xiàn)給我們構(gòu)建了強大的企業(yè)應用系統(tǒng)提供可能。但用這些技術構(gòu)建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個規(guī)則、一個把這些技術組織起來的規(guī)則,這就是框架,Struts便應運而生。基于Struts開發(fā)的應用由3類組件構(gòu)成:C控制器組件、M模型組件、V視圖組件8Struts的validate框架是如何驗證的?在struts配置文件中配置具體的錯誤提示,再在FormBean中的validate()方法具體調(diào)用。9說下Struts的設計模式MVC模式:web應用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配置好的ActionForm對象被創(chuàng)建,并被填入表單相應的數(shù)據(jù),ActionServler根據(jù)Struts-config.xml文件配置好的設置決定是否需要表單驗證,如果需要就調(diào)用ActionForm的Validate()驗證后選擇將請求發(fā)送到哪個Action,如果Action不存在,ActionServlet會先創(chuàng)建這個對象,然后調(diào)用Action的execute()方法。Execute()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)生產(chǎn)協(xié)作合同范本
- 2025年單位購房協(xié)議樣本
- 2025年戶外雕塑設計與安裝合同協(xié)議
- 2025年節(jié)能服務項目規(guī)劃申請報告范文
- 2025年建筑工程鋼筋班組承包合同樣式
- 2025技術創(chuàng)新與資本投入?yún)f(xié)議范例策劃
- 2025年中外合資企業(yè)員工派遣協(xié)議范本
- 2025年崗位變動勞動合同細則
- 2025年住宅租賃合同解除
- 2025年公共建筑外墻涂裝工程承包合同范本
- 2025年度新能源汽車充電站運營權轉(zhuǎn)讓合同樣本4篇
- 2025年春運出行預測報告-高德地圖
- 第5課 隋唐時期的民族交往與交融 課件(23張) 2024-2025學年統(tǒng)編版七年級歷史下冊
- 【8語期末】蕪湖市2024-2025學年八年級上學期期末考試語文試題
- 2024年江蘇農(nóng)牧科技職業(yè)學院高職單招語文歷年參考題庫含答案解析
- 2025年浙江省金華義烏市人社局招聘雇員歷年高頻重點提升(共500題)附帶答案詳解
- 北師大版八年級上冊數(shù)學期末考試試卷帶答案
- 2024-2025學年人教部編版八年級上語文寒假作業(yè)(四)
- 老年癡呆患者護理課件
- 鐵路安全警示教育課件
- 部編版六年級下冊語文3《古詩三首》雙減分層作業(yè)設計
評論
0/150
提交評論