精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
詳談Struts2的核心概念(下)

5.4  使用本地的資源文件

         本節(jié)中將介紹另外兩個(gè)接口TextProviderLocalProvider,它們都是為了使用本地的資源文件而設(shè)計(jì)的。

         Java中用戶語(yǔ)言和地區(qū)的信息被封裝在java.util.Local類中,而action則通過一個(gè)定義與com.opensymphony.xwork.LocaleProvider接口的方法判斷使用哪個(gè)Locale獲取用于顯示的信息文本,這個(gè)接口中只定義了一個(gè)方法:

         Public Locale getLocale()

         ActionSupport中,這個(gè)方法的默認(rèn)實(shí)現(xiàn)為:通過調(diào)用AcitonContext.getContext ().getLocale()方法,利用ActionContext獲得locale的值(關(guān)于ActionContext的使用將在后面的章節(jié)詳細(xì)描述)。Struts2通過查詢HttpServletRequest對(duì)象并調(diào)用它的getLocale () 方法將Localaction調(diào)用聯(lián)系起來。

5.5  ActionContextWeb容器發(fā)生聯(lián)系

         Action的接口定義中,excute()方法并沒有HttpServletRequestHttpServletResponse參數(shù)也就是說Struts2Action不用去依賴于任何Web容器(不像Struts 1必須在Web容器中才能運(yùn)行),不用與那些JavaServlet復(fù)雜的請(qǐng)求(Request)、響應(yīng)(Response)關(guān)聯(lián)在一起。但在Web應(yīng)用程序開發(fā)中,往往需要在Action里直接獲取請(qǐng)求(Request)或會(huì)話(Session)的一些信息,甚至需要直接對(duì)JavaServlet Http的請(qǐng)求、響應(yīng)操作。Struts2 提供了一個(gè)工具,用ActionContext對(duì)象來與Web容器發(fā)生聯(lián)系。

         ActionContextcom.opensymphony.xwork.ActionContext)是Action執(zhí)行時(shí)的上下文,上下文可以把它看作是一個(gè)Map,它存放是Action在執(zhí)行時(shí)需要用到的對(duì)象,比如:上下文放有請(qǐng)求的參數(shù)(Parameter)、會(huì)話(Session)、Servlet上下文(ServletContext)、本地化(Locale)信息等。在每次執(zhí)行Action之前都會(huì)創(chuàng)建新的ActionContextActionContext是線程安全的,也就是說在同一個(gè)線程里ActionContext里的屬性是唯一的,這樣的Action就可以在多線程中使用。

5.6  高級(jí)輸入

         應(yīng)用程序經(jīng)常使用JavaBean表示一個(gè)域中的對(duì)象,包括UserAddressBlock在內(nèi)陸的類就是這種JavaBean很好的例子。而在Web程序中很大一部工作都是將信息填充到這些對(duì)象中去和從Bean中獲取數(shù)據(jù)信息在網(wǎng)頁(yè)中表現(xiàn)。本節(jié)將以一個(gè)完整的實(shí)例來說明Sturts 2在這些方面提供了那些便利。

5.7  使用Model-Driven

         Struts2中,提供了兩種Action驅(qū)動(dòng)模式:Property-Driven(屬性驅(qū)動(dòng)),Model-Driven(模型驅(qū)動(dòng)的)。

         模型驅(qū)動(dòng)的Action很像Struts1中的FormBean,在傳遞過程中有一個(gè)單獨(dú)的值對(duì)象來作為參數(shù)的載體,但在Struts2中這個(gè)值對(duì)象不必再繼承任何接口,只要普通JavaBean就可以充當(dāng)模型部分。很多情況下Bean的定義已經(jīng)存在了,而且是不能修改的(如從外部引入的類或者是已經(jīng)被大量代碼引用的類),如果必須實(shí)現(xiàn)某個(gè)接口才能作為FromBean,不得不再新增一個(gè)類,Struts2的這個(gè)改進(jìn)非常及時(shí)。

5.8  使用Property-Driven

         Property-Driven 就是Action將直接用自己的字段來充當(dāng)FormBean的功能,在Struts2入門一章中,HelloReader這個(gè)例子就是采用的這種方法,在Action中直接包含了message屬性和它setget方法。它一般用在頁(yè)面表單比較簡(jiǎn)單的情況使用,而且可以直接把屬性作為Action的字段,這樣就不用在另寫FormBean,減少了重復(fù)代碼。

         上一節(jié)的例子如果使用Property-Driven方法,那就是將Useraction類合并定義,把User中的屬性值直接轉(zhuǎn)移到action中去,在配置文件中也不必再增加modelDriven這個(gè)過濾器。

6  Result類型介紹

         Result是在Action執(zhí)行完,一個(gè)結(jié)果返回后決定發(fā)生什么事的類。開發(fā)者可以自由的根據(jù)他們的應(yīng)用和環(huán)境的需要?jiǎng)?chuàng)建自己的Result類型。例如在Struts2ServletVelocity結(jié)果類型已經(jīng)被創(chuàng)建用來顯示web應(yīng)用程序的畫面。本節(jié)將介紹Struts2 內(nèi)置的幾種Result類型和如何自定義開發(fā)Result

6.1  內(nèi)置Result類型

         所有的Result類型都實(shí)現(xiàn)了com.opensymphony.xwork.Result接口。這個(gè)接口是所有action執(zhí)行結(jié)果的通用接口,不管這個(gè)結(jié)果是用來顯示一個(gè)網(wǎng)頁(yè)還是產(chǎn)生一個(gè)E-mail,發(fā)送一個(gè)JMS消息還是別的。

         struts-default.xml中定義了系統(tǒng)提供的缺省Result類型,把它們映射為action配置中可以引用的名字,在action配置就就不用再使用長(zhǎng)類名直接使用這些別名就可以了。

6.2  默認(rèn)Result

         Dispatcher Result是最常用的一種result,它也是Struts2默認(rèn)的result,又稱為通用resutaction執(zhí)行完后,請(qǐng)求會(huì)導(dǎo)向?qū)?yīng)的View,相當(dāng)于<jsp:forword>標(biāo)簽實(shí)現(xiàn)的跳轉(zhuǎn)功能。將同一個(gè)HTTP請(qǐng)求中的內(nèi)容分發(fā)至某一個(gè)頁(yè)面(dispatcher類型的result的使用)只要配置文件包含了struts-default.xml,而且package繼承了struts-default,那么使用dispatcher result并不需要其他設(shè)置。示例:

         <result name="success" type="dispatcher">

           <param name="location">foo.jsp</param>

         </result>

6.3  頁(yè)面跳轉(zhuǎn) Result

         Redirect ResultDispatcher Result作用類似也是實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)。對(duì)上次的響應(yīng)將重定向到指定的位置,可以理解為在客戶端跳轉(zhuǎn)用戶又重新請(qǐng)求了一個(gè)新的URLredirect是重新產(chǎn)生一個(gè)新的request,因此原來request保存的東西將不再有效,比如不能通過再requet.getAtrribute()取得對(duì)象,也不能取得action的實(shí)例、errorsfield errors等。

         Redirect ResultDispatcher Result的區(qū)別于源于JSP篇中<jsp:forward>標(biāo)簽與response.redeiret()的區(qū)別。

6.4  創(chuàng)建action

         Chain Result是一種result 類型,它基于自己的攔截器stack(堆棧)和result調(diào)用一個(gè)action,這樣允許一個(gè)action附帶著原來的狀態(tài)將請(qǐng)求轉(zhuǎn)到目標(biāo)action

         Struts2提供把多個(gè)Action按照預(yù)先定義好的順序或者流程鏈接起來的能力。這個(gè)特性通過給指定的Action設(shè)置一個(gè)Chain Result,然后通過一個(gè)ChainingInterceptor攔截目標(biāo)Action來實(shí)現(xiàn)。

6.5  整合各種View技術(shù)

         VelocityFreemarkerJasperReportsxslt4result都是為了整合不同的視圖技術(shù)而設(shè)計(jì)的。

         1Velocity Result:Velocity是一個(gè)基于java的模板引擎(template engine)。

         2Freemarker Result:Freemarker也是一個(gè)模板引擎,允許JavaServlet保持圖形設(shè)計(jì)同應(yīng)用程序邏輯的分離,這是通過在模板中密封HTML完成的。模板用servlet提供的數(shù)據(jù)動(dòng)態(tài)地生成 HTML

         3JasperReports result:JasperReports是一個(gè)基于Java的開源報(bào)表工具,它可以在Java環(huán)境下像其他IDE報(bào)表工具一樣來制作報(bào)表。

         4XSLT Result:XSLT ResultXSLT來轉(zhuǎn)換action對(duì)象到XML

6.6  自定義result

         Struts2也允許用戶自定義自己的result類型,只要實(shí)現(xiàn)com.opensymphony.xwork2.Result接口就可以了。如代碼5-29所示,模擬了一種result作用是根據(jù)處理結(jié)果將給指用戶發(fā)送一份E-mail。這個(gè)result需要4個(gè)參數(shù)tofromsubjectbody

7  攔截器(Interceptors)介紹

         攔截器(Interceptor)是Struts2的一個(gè)強(qiáng)有力的工具,有許多功能都是構(gòu)建于它之上,如國(guó)際化、轉(zhuǎn)換器,校驗(yàn)等。InterceptorStruts2的一大特色,在執(zhí)行action之前和之后可以使請(qǐng)求通過一個(gè)或多個(gè)Interceptor。多個(gè)連接器組合在一起實(shí)現(xiàn)某一個(gè)功能稱為interceptor鏈(Interceptor Chain,在Struts2中稱為攔截器棧Interceptor Stack)。interceptor鏈就是將interceptor按一定的順序聯(lián)結(jié)成一條鏈。在訪問被攔截的方法或字段時(shí),interceptor鏈中的interceptor就會(huì)按其之前定義的順序被調(diào)用。

7.1  Interceptor的原理

         Struts2interceptor實(shí)現(xiàn)相對(duì)簡(jiǎn)單。當(dāng)請(qǐng)求到達(dá)Struts2ServletDispatcher時(shí),Struts2會(huì)查找配置文件,并根據(jù)其配置實(shí)例化相對(duì)的interceptor對(duì)象,然后串成一個(gè)列表(list),最后一個(gè)一個(gè)地調(diào)用列表中的攔截器,

 

 

 

 

 

 

 

 

 

7.2  內(nèi)置攔截器介紹

         Struts2包含了許多內(nèi)置的interceptor,它們提供了很多核心功能和可選的高級(jí)特性。interceptorstruts.default.xml文件中被定義,而一些默認(rèn)的interceptor棧及interceptor的命名也被定義其中。框架中提供了很多實(shí)用的Interceptor,可以隨時(shí)使用它們的名字來調(diào)用這些interceptor

7.3  使用內(nèi)置interceptor

         本節(jié)將介紹幾種常用interceptor的用法:

         1.使用timeraction即時(shí)

         2.使用logger aciton提供日志

         3.使用校驗(yàn)

         4.準(zhǔn)備action

         5.實(shí)現(xiàn)ModelDriven

         6tokentoken-session

 

 

 

 

 

 

 

 

7.4  內(nèi)置攔截器棧介紹

         除了內(nèi)置的interceptor之外,struts.xml還包含了內(nèi)置的interceptor組合,可以通過具體的命名的interceptor棧來使用它們。

7.5  自定義攔截器

         自定義一個(gè)攔截器需要3個(gè)步驟:

         1)自定義一個(gè)實(shí)現(xiàn)Interceptor接口的類。

         2)在strutx.xml中注冊(cè)上一步中定義的攔截器。

         3)在需要使用的Action中引用上述定義的攔截器,為了方便也可將攔截器定義為默認(rèn)的攔截器,這樣在不加特殊聲明的情況下所有的Action都被這個(gè)攔截器攔截。

8  小結(jié)

         本文講述的是Struts2的核心構(gòu)成元素及其使用方法,使讀者對(duì)Sturts 2的體系結(jié)構(gòu)有了一個(gè)清晰的認(rèn)識(shí)。Struts2是一個(gè)開放的系統(tǒng),它的很多實(shí)現(xiàn)對(duì)用戶來說都是透明的,它們?cè)?/span>struts-default.xml 中配置,開發(fā)人員配置自己的元素在struts.xml中,這個(gè)文件是可以拆分并按用戶需要組織的。Struts2的核心部分由actioninterceptorresult3個(gè)主要部分構(gòu)成,Interceptor是它最大特色。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
struts 上傳文件的大小限制說明 需要注意
struts2.0之struts.xml詳解
struts2的攔截器 和actionInvocation
servlet/filter/listener/interceptor區(qū)別與聯(lián)系
struts2自定義攔截器
Struts2 攔截器實(shí)現(xiàn)權(quán)限控制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 武山县| 唐山市| 布尔津县| 府谷县| 霍州市| 陆川县| 庆云县| 湖口县| 白河县| 宁乡县| 奇台县| 新安县| 翁牛特旗| 昌黎县| 肇源县| 平凉市| 繁昌县| 图木舒克市| 海兴县| 姜堰市| 兴国县| 邹城市| 台安县| 兴隆县| 垣曲县| 林甸县| 清远市| 民乐县| 庆阳市| 汉阴县| 南漳县| 永福县| 西充县| 南靖县| 光山县| 博兴县| 福鼎市| 浮梁县| 冀州市| 邳州市| 余干县|