版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、Struts 2概述(免費傳播文檔 從我做起),Struts 1.0原理,ActionServlet,JSP,JavaBean,數(shù)據(jù)庫,Action,ActionForm,ActionMapping,1,2,3,4,5,6,開發(fā)時只需關(guān)注:·兩個核心組件:ActionFormAction·一個配置文件,1、頁面提交的數(shù)據(jù)封裝到ActionForm中2、通過請求路徑查找Struts-config.xml中
2、Action的配置,找到并調(diào)用對應(yīng)的Action,Controller(控制器),,Model(模型),,View(視圖),,,,,,,查找ActionMapping,找到正確的JSP頁面,并轉(zhuǎn)發(fā),,配置文件,struts-config.xml配置Form Bean和Action Bean服務(wù)器啟動時,Struts裝載struts-config.xml信息,,Struts 1.0
3、的缺點,所支持的表現(xiàn)層技術(shù)比較單一只支持JSP,不支持目前流行的FreeMarker、Velocity等與Servlet API耦合嚴(yán)重,難于測試它完全是基于Servlet API的,所以在Struts 1的業(yè)務(wù)邏輯控制器內(nèi),充滿了大量的Servlet API。Servlet嚴(yán)重依賴于Web服務(wù)器,尤其是HttpServletRequest和HttpServletResponse兩個參數(shù),通常由Web容器負(fù)責(zé)實例化。一旦脫離了W
4、eb服務(wù)器,Action將很難測試。屬于侵入式設(shè)計Action中包含了大量的Struts1.0的API ,影響了代碼的重構(gòu)。一旦系統(tǒng)需要重構(gòu)時,這些Action類將完全沒有利用價值,成為一堆廢品。,Struts2,Struts2是在WebWork2基礎(chǔ)發(fā)展而來的。和struts1一樣, Struts2也屬于MVC框架。不過有一點大家需要注意的是:盡管Struts2和struts1在名字上的差別不是很大,但Struts2和struts
5、1在代碼編寫風(fēng)格上幾乎是不一樣的。那么既然有了struts1,為何還要推出struts2。主要是因為struts2有以下優(yōu)點:1 > 在軟件設(shè)計上Struts2沒有像struts1那樣跟Servlet API和struts API有著緊密的耦合,Struts2的應(yīng)用可以不依賴于Servlet API和struts API。 Struts2的這種設(shè)計屬于無侵入式設(shè)計,而Struts1卻屬于侵入式設(shè)計。public class O
6、rderListAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {}}2> Struts2提供了攔截器,實現(xiàn)如權(quán)限攔截等功能
7、。3> Strut2提供了類型轉(zhuǎn)換器,我們可以把特殊的請求參數(shù)轉(zhuǎn)換成需要的類型。在Struts1中,如果我們要實現(xiàn)同樣的功能,就必須向Struts1的底層實現(xiàn)BeanUtil注冊類型轉(zhuǎn)換器才行。4> Struts2提供支持多種表現(xiàn)層技術(shù),如:JSP、freeMarker、Velocity等5> Struts2的輸入校驗可以對指定方法進行校驗,解決了Struts1長久之痛。6> 提供了全局范圍、包范圍和Ac
8、tion范圍的國際化資源文件管理實現(xiàn),Struts 1.0的缺點,,public class LoginAction extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throw
9、s AuctionException { LoginForm loginForm = (LoginForm)form; //當(dāng)用戶名為scott,密碼為tiger時返回成功 if (“scott”.equals(loginForm.getUsername() && “
10、tiger”.equals(loginForm.getPassword()){ return mapping.findForward(“success”);}else{ return mapping.findForward(“error"); } }},業(yè)務(wù)邏輯控制器必須繼承Struts 1提供的Action類,//將其強制類型轉(zhuǎn)
11、換為登錄用的ActionForm,返回一個ActionForward對象,Struts 2,Struts 2以WebWork優(yōu)秀的設(shè)計思想為核心,吸收了Struts 1的部分優(yōu)點,建立了一個兼容WebWork和Struts 1的MVC框架。,WebWork,WebWork是由OpenSymphony組織開發(fā)的,致力于組件化和代碼重用的J2EE Web框架WebWork支持更多的表現(xiàn)層技術(shù),有更好的適應(yīng)性。例如:Velocity、F
12、reeMarkerWebWork采用了一種更加松耦合的設(shè)計,讓Action不再與Servlet API耦合。使單元測試更加方便。Action無須與WebWork耦合,具有更好的代碼重用率。,什么是Struts2?,Struts框架架構(gòu)Struts2的體系與Struts1.x體系差別非常大,因為Struts2使用了WebWork的設(shè)計核心(XWork)。在Struts2中使用攔截器來處理用戶請求,從而允許用戶業(yè)務(wù)邏輯控制器與Se
13、rvlet API分離。,MVC / Struts2架構(gòu),Struts 2控制器,業(yè)務(wù)邏輯控制器ActionStruts 2 的業(yè)務(wù)控制器并沒有與ServletAPI耦合,所以無法處理客戶請求,而Struts 2提供了系列攔截器負(fù)責(zé)將HttpServletRequest請求中的參數(shù)解析出來,然后輸出給Action 。,Struts 2工作流程結(jié)構(gòu),(1)客戶端提交一個(HttpServletRequest)請求。(2)請求被提交到一
14、系列(主要是3層)的過濾器(Filter),如(ActionContextCleanUp、其他過濾器(SiteMesh等)、FilterDispatcher)。注意:這里是有順序的,先是ActionContext CleanUp,再是其他過濾器(SiteMesh等),最后到FilterDispatcher。(3)FilterDispatcher接收到請求后,詢問ActionMapper是否需要調(diào)用某個Action來處理這個(HttpS
15、ervletRequest)請求,如果ActionMapper決定需要調(diào)用某個Action,F(xiàn)ilterDispatcher則把請求的處理交給 ActionProxy。(4)ActionProxy通過Configuration Manager(struts.xml)詢問框架的配置文件,找到需要調(diào)用的Action類(該Action類一般是程序員自定義的處理請求的類)。(5)ActionProxy創(chuàng)建一個ActionInvocation
16、(Action的調(diào)用者)實例,同時ActionInvocation通過代理模式調(diào)用Action。但在調(diào)用之前,ActionInvocation會根據(jù)配置加載Action相關(guān)的所有Interceptor(攔截器)。(6)一旦Action執(zhí)行完畢,ActionInvocation根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果result。然后根據(jù)結(jié)果返回對應(yīng)的視圖呈現(xiàn)給客戶端(JSP、FreeMarker等)。,Struts 2體系結(jié)
17、構(gòu),ActionMapper和ActionMapping,org.apache.struts2.dispatcher.mapper.ActionMapper接口在HTTP請求和action調(diào)用請求之間提供了一個映射。當(dāng)給定一個HTTP請求時,ActionMapper根據(jù)請求的URI來查找是否有對應(yīng)的action調(diào)用,(1)如果有,則返回一個描述了action調(diào)用的ActionMapper;(2)如果沒有匹配的actio
18、n調(diào)用請求,則返回null.Struts2框架對該接口提供的默認(rèn)實現(xiàn)是org.apache.struts2.dispatcher.mapper.DefaultActionMapper.,ActionProxy和ActionInvocation,ActionProxy在XWork中和真正的Action充當(dāng)代理的角色,在通過框架執(zhí)行Action的過程中,因為是使用代理而不是直接操縱對象,所以可以在代理中封裝攔截器、等額外代碼。Act
19、ionProxy持有ActionInvocation對象。ActionInvocation代表了action執(zhí)行的當(dāng)前狀態(tài)。,Struts2的處理流程,FilterDispatcher,Interceptor,Action,Result,Jsp/html,用戶請求,Struts2內(nèi)置的一些攔截器或用戶自定義攔截器,用戶編寫的action類,類似struts1中的Action,類似struts1中的forward,響應(yīng),FilterDis
20、patcher是Struts 2框架的核心控制器,它負(fù)責(zé)攔截由/*指定的所有用戶請求,當(dāng)用戶請求到達(dá)時,該Filter會過濾用戶的請求。默認(rèn)情況下,如果用戶請求的路徑不帶后綴或者后綴以.action結(jié)尾,這時請求將被轉(zhuǎn)入Struts 2框架處理,否則Struts 2框架將略過該請求的處理。當(dāng)請求轉(zhuǎn)入Struts 2框架處理時會先經(jīng)過一系列的攔截器,然后再到Action。,Struts2,一個HTTP請求到達(dá)Struts2的FilterD
21、ispatcher之后,就會被轉(zhuǎn)換成一個action command.這個action command在穿越了一系列Struts2和XWork的攔截器(1~3)之后,最后執(zhí)行用戶編寫的Action實例。在Action執(zhí)行后,響應(yīng)還會穿越相同的攔截器,按照與請求相反的順序即攔截器(3~1).最后通過Struts2的HttpServletResponse轉(zhuǎn)換成Web可識別的響應(yīng),如JSP。,Struts2與XWork2之間的交互圖,S
22、truts2與XWork2之間的交互圖,搭建Struts2開發(fā)環(huán)境,搭建Struts2環(huán)境時,我們一般需要做以下幾個步驟的工作:1》找到開發(fā)Struts2應(yīng)用需要使用到的jar文件.2》編寫Struts2的配置文件3》在web.xml中加入Struts2框架啟動配置,FilterDispatcher核心控制器控制器負(fù)責(zé)攔截所有的客戶端請求,然后 通過讀取配置文件來確定交給哪個Action繼續(xù)處理。FilterDispatche
23、r只需要在web.xml文件中配置一下。init()方法中將會讀取類路徑下默認(rèn)的配置文件struts.xml完成初始化操作。注意:struts2讀取到struts.xml的內(nèi)容后,以javabean形式存放在內(nèi)存中,以后struts2對用戶的每次請求處理將使用內(nèi)存中的數(shù)據(jù),而不是每次都讀取struts.xml文件, struts2 org.apache.struts2.dispatcher.F
24、ilterDispatcher struts2 /* ,Struts 2控制器,攔截器(Interceptor)攔截器能在action被調(diào)用之前和被調(diào)用之后執(zhí)行一些“代碼”。Struts2框架的大部分核心功能都是通過攔截器來實現(xiàn)的,如防止重復(fù)提交、類型轉(zhuǎn)換、對象封裝、校驗、文件上傳、頁面預(yù)裝載等等,都是在攔截器的幫助下實現(xiàn)的。每一個攔截器都是獨立裝載的(pluggable),我們可以
25、根據(jù)實際的需要為每一個action配置它所需要的攔截器。,Struts 2控制器,配置攔截器struts.xml1、定義攔截器2、使用攔截器, …… /success.jsp /login.jsp ,,定義攔截器name指定攔截
26、器的名字Class指定攔截器對應(yīng)的Java類型,,使用攔截器,默認(rèn)的攔截棧,Struts 2控制器,業(yè)務(wù)邏輯器ActionStruts 2應(yīng)用中起作用的業(yè)務(wù)控制器不是用戶定義的Action,而是系統(tǒng)生成的Action代理,但該Action代理以用戶定義的Action為目標(biāo)。因為Struts 2 的業(yè)務(wù)控制器并沒有與ServletAPI耦合,所以無法處理客戶請求,而Struts 2提供了系列攔截器負(fù)責(zé)將HttpServletRequ
27、est請求中的參數(shù)解析出來,然后輸出給Action 。Action就是一個普通的Java類,該類定義了一些屬性,并為屬性提供了對應(yīng)的setter和getter方法。除此之外, Action 還提供了一個execute方法來處理。,Struts 2控制器,import com.opensymphony.xwork2.ActionSupport;public class HelloWorld extends ActionSupport
28、 {private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String execute() th
29、rows Exception { setMessage("你好!Struts 2!"); System.out.println(getText("HelloWorld.message")); return SUCCESS; }},,,,Struts 2控制器,Action類有如下優(yōu)勢:Action類完全是一個POJO,因
30、此具有很好的代碼復(fù)用性。Action類無需與Servlet API耦合,因此進行單元測試非常簡單。Action類的execute方法僅返回一個字符串作為處理結(jié)果,該處理結(jié)果可映射到任何的視圖,甚至是另一個Action。,Struts 2的配置文件,當(dāng)Struts 2創(chuàng)建系統(tǒng)的Action代理時,需要使用Struts 2的配置文件。Struts 2的配置文件:struts.xml:配置Action的文件定義了Struts 2的系
31、列Action,定義Action時,指定該Action的實現(xiàn)類,并定義該Action處理結(jié)果與視圖資源之間的映射關(guān)系。struts.properties配置:定義Struts2程序運行時所需的一些常量信息。Struts 2全局屬性的文件。,Struts 2的配置文件, /HelloWorld.jsp /HelloPOJO.j
32、sp /Login.jsp /success.jsp ,,定義Action的實現(xiàn)類,,result元素指定execute方法返回值和視圖資源之間的映射關(guān)系result元素可以有多個其中name指定了execute方法返回的字符串,而type指定轉(zhuǎn)向的資源類型,此處轉(zhuǎn)向的資源可以是JSP、FreeMarker等,甚至是
33、另一個Action,Struts 2的配置文件,struts.properties:Struts 2全局屬性的文件。struts.properties文件的形式是系列的key、value對,它指定了Struts 2應(yīng)用的全局屬性。,#指定Struts 2處于開發(fā)狀態(tài)struts.devMode = false//指定當(dāng)Struts 2配置文件改變后,Web框架是否重新加載Struts 2配置文件struts.configurat
34、ion.xml.reload=true,使用Struts2實現(xiàn)登錄,struts2-core-2.x.x.jar :Struts 2框架的核心類庫xwork-core-2.x.x.jar :XWork類庫,Struts 2在其上構(gòu)建ognl-2.6.x.jar :對象圖導(dǎo)航語言(Object Graph Navigation Language),struts2框架通過其讀寫對象的屬性freemarker-2.3.x.jar :St
35、ruts 2的UI標(biāo)簽的模板使用FreeMarker編寫commons-logging-1.x.x.jar :ASF出品的日志包,Struts 2框架使用這個日志包來支持Log4J和JDK 1.4+的日志記錄。commons-fileupload-1.2.1.jar 文件上傳組件,2.1.6版本后必須加入此文件,1,導(dǎo)入Struts2類庫,在Struts的下載包中有一個struts2-blank-2.1.6.war的應(yīng)用,只需要將其
36、WEB-INF/lib目錄中的JAR拷貝到Project的WEB-INF/lib目錄下便可,不可隨便導(dǎo)入其它的JAR,應(yīng)按需要導(dǎo)入,否則會出現(xiàn)異常。,http://struts.apache.org/download.cgi,使用Struts2實現(xiàn)登錄,在web.xml文件中配置FilterDispatcher。,2, struts2.0 org.apache.struts2.dispatcher.FilterDispatcher
37、 struts2.0 /* ,使用Struts2實現(xiàn)登錄,開發(fā)Action,3,public class LoginAction {private String name;private String password;/**在此方法里實現(xiàn)業(yè)務(wù)邏輯處理*/public String execute() throws Exception {if(this.name.equals("sa&quo
38、t;) && this.password.equals(“123”))return "success";else return "error";} setter/getter},,提供屬性參數(shù)及set/get方法通過ioc的方法將頁面的參數(shù)注入到Action類中,配置struts.xml文件在WEB-INF/classes(實際在src目錄下創(chuàng)建便可)
39、目錄下創(chuàng)建struts.xml文件,在文件中對Action類進行配置,并將action與結(jié)果頁面關(guān)聯(lián)在一起。,4, /success.jsp /error.jsp ,,,引入dtd文件,對Action類進行配置,使用Struts2實現(xiàn)登錄,編寫login.jsp及相關(guān)結(jié)果頁面,5, ,,,Act
40、ion中的url路徑與struts.xml中保持一樣,表單元素名稱與Action類中的屬性名稱保持一致,Struts2.0中的Action,Struts 2.0的Action講解 有Struts 1.x經(jīng)驗的都知道Action是Struts的核心內(nèi)容,當(dāng)然Struts 2.0也不例外。不過,Struts 1.x與Struts 2.0的Action模型很大的區(qū)別。,Struts2.0中的Action,Struts2.0中的Act
41、ion幾種方式雖然,理論上Struts 2.0的Action無須實現(xiàn)任何接口或繼承任何類型,但是,我們?yōu)榱朔奖銓崿F(xiàn)Action,大多數(shù)情況下會采用以下二種方式對Action進得處理: 繼承com.opensymphony.xwork2.ActionSupport 實現(xiàn)com.opensymphony.xwork2.Action默認(rèn)情況下:重載(Override)或覆寫(Overload)其中的 String
42、execute() throws Exception,ActionSupport類的使用,雖然使用現(xiàn)在的Action可以進行一系列的工作,但是想要更快更方便地進行開發(fā),可以使Action類繼承com.opensymphony.xwork2.ActionSupport類。ActionSupport類是輔助Action類能夠更好地完成工作的基類,它實現(xiàn)了幾個接口并包含了一組默認(rèn)的實現(xiàn)。在實際開發(fā)中通常要讓Action類繼承ActionS
43、upport類,該類可以使Action方便地進行數(shù)據(jù)驗證、國際化等工作,只需在Action中完成這些功能的具體實現(xiàn)就可以了。ActionSupport類所實現(xiàn)的接口主要有: Action, LocaleProvider, TextProvider, Validateable, ValidationAware,Struts2.0中的Action,使用ActionSupport的方式下面我們針對前面的登錄的例子進行改造,主要改造以
44、下二個環(huán)節(jié):,實現(xiàn)Action接口,Action接口:,Action接口的使用,這5個常量就是在日常開發(fā)中業(yè)務(wù)邏輯方法中返回的字符串,可以簡化和標(biāo)準(zhǔn)化execute方法的返回值。 execute()方法則是Action接口定義的一個默認(rèn)的業(yè)務(wù)邏輯方法,在我們自定義的Action類中只需要重寫該方法即可,Struts2會默認(rèn)地調(diào)用execute方法。,Struts2.0中的Action,public class LoginAction e
45、xtends ActionSupport {private String name;private String password;public String execute() throws Exception {if(this.name.equals("sa") && this.password.equals(“123”))return SUCCESS;//這里采用的是一個常量值el
46、se return ERROR;}//通過此種方式,可以簡化使用,當(dāng)然在ActionSupport類中也可以采}//用此種方式,因為ActionSupport是Action的實現(xiàn)類,接收用戶數(shù)據(jù)問題,開發(fā)Web應(yīng)用程序,首先應(yīng)會遇到對用戶輸入數(shù)據(jù)的接收,傳統(tǒng)的Web應(yīng)用程序是由開發(fā)人員調(diào)用HttpServletRequest的getparameter(String name)方法從請求中獲取數(shù)據(jù),而Web框架都提供了數(shù)據(jù)綁定機制
47、。Struts2框架通過攔截器負(fù)責(zé)提取請求參數(shù),并將請求數(shù)據(jù)封裝到相應(yīng)的Action實例的屬性或?qū)iT的模型的屬性。,使用action類的屬性接收用戶輸入在某些應(yīng)用中,只傳輸了少量的屬性,如果像struts1.x系統(tǒng)中將屬性封裝為ActionFrom這樣的方式,好象不可取(比如針對搜索這類應(yīng)用) 。在struts2中,可以直接使用action的屬性來接收用戶的輸入,比如前面在登錄中的案例就是采用這種方式。使用此種方式注意以下二點:
48、在action類中提供對應(yīng)的屬性及set/get方法在頁面表單中將表單元素的name屬性與action中的屬性名稱一樣,如何在Action中接收用戶輸入,接收用戶輸入的幾種方式在Struts2.0中有如下幾種方式可以獲得用戶輸入信息,具體方式如下:使用action類的屬性接收用戶輸入使用領(lǐng)域?qū)ο蠼邮沼脩糨斎胧褂肕odelDriven的方式接收用戶輸入,接收數(shù)據(jù)方式:使用action屬性接收用戶輸入,直接在Action里定
49、義各種Java基本類型的字段(屬性),使這些字段與表單數(shù)據(jù)相對應(yīng),前面我們做的示例屬于字段驅(qū)動模式。,使用領(lǐng)域?qū)ο蠼邮沼脩糨斎?在Action類中使用POJO類接收用戶輸入?yún)?shù)在Struts2中支持直接使用領(lǐng)域?qū)ο髞斫邮沼脩糨斎氲臄?shù)據(jù)。,public class LoginAction implements Action { private User user;public String execute() thr
50、ows Exception { //業(yè)務(wù)處理}Set/Get…,,在Action類中直接使用POJO對象, ,,在表單元素的name屬性值user為Action類中的屬性名password為pojo類中的屬性名,舉例login.jsp,編寫User類,編寫LoginAction類,struts.xml,使用ModelDriven Action,通過i
51、mplements ModelDriven使用領(lǐng)域?qū)ο笤赟truts2中,可以讓Action類實現(xiàn)(implments)ModelDriven(com.opensymphony.xwork2.ModelDriven)接口,來直接操作應(yīng)用程序中的領(lǐng)域?qū)ο螅试S在Web層和業(yè)務(wù)邏輯層使用相同的對象。ModelDriven接口中只有一個方法,該方法返回一個用于接收用戶輸入數(shù)據(jù)的模型對象,如下:,public T getModel
52、(), ,,在頁面中,模型對象中的屬性可以直接通過屬性名來訪問,而不需要象user.name這種方式,public class LoginAction implements Action,ModelDriven {private User user=new User();//注意實例化POJO對象public String execute() throws
53、Exception { //業(yè)務(wù)邏輯處理}public User getModel() {return user;},,實現(xiàn)了Action與ModelDriven接口注意用到了范型,所以要求jdk為1.5以上,在Action中訪問Servlet API,Struts2中的Action并沒有和任何Servlet API耦合,這樣框架更具靈活性,更易測試。但是,有時候我們必須訪問Servlet API,例如要使用req
54、uest對象,或者跟蹤HTTP Session用戶狀態(tài)等。Struts2框架提供了兩種方式來訪問Servlet API。,訪問Servlet API對象,如何訪問request、session、application等在struts2中的execute不像Struts 1.x的那樣可以在參數(shù)中引入Servlet API,但是在開發(fā)Web應(yīng)用程序當(dāng)然免不了跟這些對象打交道。在Strutx 2.0你可以有兩種方式獲得這些對象:
55、非IoC(控制反轉(zhuǎn)Inversion of Control)方式和IoC方式。 非IoC方式 要獲得上述對象,通過使用com.opensymphony.xwork2.ActionContext類。IoC方式 要使用IoC方式,我們首先要告訴IoC容器(Container)想取得某個對象的意愿,通過實現(xiàn)相應(yīng)的接口做到這點,如果我要取得Servlet API中的一些對象,如request、res
56、ponse或session等,應(yīng)該怎么做?,與Servlet API解耦的訪問方式,非IOC方式為了避免與Servlet API耦合在一起,方便Action類做單元測試,Struts2對HttpServletRequest、HttpSession和ServletContext進行了封裝,構(gòu)造了三個Map對象來替代這三種對象,在Action中,直接使用HttpServletRequest、HttpSession、ServletCon
57、text對應(yīng)的Map對象來保存和讀取數(shù)據(jù)。要獲得這三個Map對象,可以使用com.opensymphony.xwork2.ActionContext類。,public Object get(Object key)ActionContext類沒有提供類似getRequest()這樣的方法來獲取封裝了的HttpServletRequest的Map對象。要得到request對象的Map對象, 需要為get()方法傳遞參數(shù)“reques
58、t”public Map getSession()獲得封裝了HttpSession的Map對象public Map getApplication()獲取封裝了ServletContext的Map對象,public class LoginAction extends ActionSupport {private String username;ActionContext context;Map request;Ma
59、p session;Map application;public String execute() throws Exception {context=ActionContext.getContext();request=(Map) context.get("request");session=context.getSession();application=context.getAp
60、plication();request.put("req", "requst屬性");session.put("ses", "sesion屬性");application.put("app", "application屬性");return SUCCESS;}...省略username
61、的get/set方法},struts.xml配置如下:,/loginSuc.jsp,login.jsp內(nèi)容如下:,/login.action">用戶名:,loginSuc.jsp的主要內(nèi)容如下:,${requestScope.req}${sessionScope.ses}${applicationScope.app}以下使用scope.getAttribute的形式來接
62、受request:session:application:分析:通過ActionContext的getContext靜態(tài)方法得到ActionContext對象,然后ActionContext對象調(diào)用get方法來獲取一個存儲在request范圍中的對象。我們使用el或通過request.getAttribute這樣的方式均可以獲取對象值,這說明了這些Map request對象實際是存儲在request范圍內(nèi)的對象。
63、,與Servlet API解耦的訪問方式,IOC方式除了利用ActionCotext來獲取request、session、application對象這種方式外,還可以采用在Action類中實現(xiàn)某些特定的接口的方式,讓Struts2框架在運行時向Action實例注入request、session和application對象,與之有關(guān)的三個接口和它們的方法如下所示:,org.apache.struts2.interceptor.Req
64、uestAware 框架利用該接口,向Action實例注入request Map對象。該接口有void setRequest(Map request) org.apache.struts2.interceptor.SessionAware 框架利用該接口,向Action實例注入session Map對象。該接口有;void setSession(Map session) org.apache.st
65、ruts2.interceptor.ApplicationAware 框架利用該接口,向Action實例注入application Map對象。該接口有void setApplication(Map application),public class LoginAction implements Action,RequestAware,SessionAware,ApplicationAware {public Map r
66、equest;//在這里將通過ioc的方式注入,注意是Map類型public Map session;public Map application;public User user;public String execute() throws Exception { request.put(“user”,user);//將user對象放到request作用域中 session.put(“user”,user);//將u
67、ser對象放到session作用域中 application.put(“user”,user);//將user對象放到application作用域中}//request,session.application對象對應(yīng)的Set/get方法public void setRequest(Map request) {this.request=request;}public void setSession(Map s
68、ession) {this.session=session;},依賴注入與控制反轉(zhuǎn):所謂依賴注入就是一個對象自己本身的初始化是依賴其它對象。比如這里Map request這些對象會依賴struts2來給其初始化,稱為依賴注入,而依賴注入的就表示,這些對象的控制權(quán)不再由此類本身掌握,而是交給了別的對象,即是控制權(quán)反轉(zhuǎn)了。 強調(diào):方式二是開發(fā)中主要用的方式,應(yīng)重點掌握,與Servlet API耦合的訪問方式,非IOC方式前
69、面采用的用Map對象來封裝Servlet API。如果想要在action類中直接使用HttpServletRequest、HttpServletResponse、ServletContext這些對象,在struts2中又能以什么的方式提供支持啦(此種方式的不足就是與Servlet API耦合,在測試時需要Servlet容器)?在struts2中可以直接獲取HttpServletRequest和ServletContext對象,可以使用o
70、rg.apache.struts2.ServletActionContext類,該類是ActionContext的子類,在這個類中定義了下面的二個靜態(tài)方法:,public static HttpServletRequest getRequest() 得到HttpServletRequest對象public static HttpServletResponse getResponse() 得到HttpServletResp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于struts2.0的外企會議管理系統(tǒng)
- 基于struts 2.0的物業(yè)管理系統(tǒng)的設(shè)計與實現(xiàn)【文獻(xiàn)綜述】
- 基于struts 2.0的物業(yè)管理系統(tǒng)的設(shè)計與實現(xiàn)【開題報告】
- 等級保護2.0 ppt課件
- struts
- 30288.基于struts的教學(xué)管理系統(tǒng)實現(xiàn)
- 基于Struts框架的教學(xué)考評系統(tǒng)設(shè)計與實現(xiàn).pdf
- struts外文翻譯
- struts標(biāo)簽總結(jié)
- 信息技術(shù)應(yīng)用能力提升工程 2.0 2.0c4教學(xué)反思
- 基于Struts框架的網(wǎng)絡(luò)教學(xué)平臺的研究與實現(xiàn).pdf
- 教學(xué)ppt
- 基于STRUTS的勝利學(xué)院成人教育教學(xué)系統(tǒng).pdf
- struts面試題
- 基于Struts架構(gòu)的J2EE教學(xué)管理系統(tǒng).pdf
- 基于Struts和設(shè)計模式的個性化網(wǎng)上教學(xué)論壇.pdf
- 護理教學(xué)ppt格式ppt課件
- struts_hibernate_demo.zip
- xml_struts_config.txt
- struts-mvc外文翻譯
評論
0/150
提交評論