日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Struts2工作原理和框架扩展点

發(fā)布時(shí)間:2024/4/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2工作原理和框架扩展点 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://www.cnblogs.com/winstonyan/archive/2011/11/13/struts2_flow_and_extends.html

框架主要涉及技術(shù):Spring + Struts2 + Hibernate + Freemarker

我們先看看Struts2 工作原理圖,這樣才方便考慮在設(shè)計(jì)開發(fā)框架時(shí)有那些擴(kuò)展點(diǎn):

  • ActionFilter和其它過(guò)濾器
    在web.xml配置這些Filter在Struts自身的Filter之前。 包括全局缺省的ActionFilter、語(yǔ)言編碼LocaleFilter、重定向UrlRewriteFilter等等。
  • StrutsPrepareFilter
    Struts的Action預(yù)處理過(guò)濾器。我的做法是寫一個(gè)子類繼承它,如CoreStrutsPrepareFilter,這樣我可以在子類中實(shí)現(xiàn)諸如
    動(dòng)態(tài)加載struts.xml和指定目錄指定規(guī)則的struts-xxx.xml等。
  • StrutsExecuteFilter
    同樣是使用寫子類繼承它,如CoreStrutsExecuteFilter,寫根據(jù)條件(如Struts相關(guān)的配置文件改動(dòng)了)重新生成ExecuteOperations
    (即Dispatcher的高級(jí)封裝)。
  • Interceptor
    攔截器是Struts2的精華。在這里處理包括異常統(tǒng)一處理、權(quán)限控制、參數(shù)設(shè)置、訪問(wèn)歷史和某些特定功能的攔截式保存等處理。
  • Action
    放置若干處理請(qǐng)求的指定包路徑的方法,我設(shè)計(jì)了BaseAction和GenericAction,BaseAction處理全局的Action公共處理,包括繼承ActionSupport,
    實(shí)現(xiàn)InitializingBean、ModelDriven(這樣可以做一些初始化操作以及得到Struts2模型驅(qū)動(dòng)的相關(guān)功能)。
    GenericAction是基于泛型來(lái)寫的,實(shí)現(xiàn)了增刪改查之類的公共方法。還有其它若干的項(xiàng)目相關(guān)的公共XXXAction,則根據(jù)需要設(shè)計(jì)。
  • Manager
    在Action的Method中,可以調(diào)用若干個(gè)Manager方法來(lái)實(shí)現(xiàn)相關(guān)業(yè)務(wù),事務(wù)是寫在Manager層的,用的Spring的聲明式事務(wù)。
  • ViewManager
    由于系統(tǒng)用的是Freemarker模板技術(shù),所以解析模板的方式有兩種:1)通過(guò)Struts自帶的FreemarkerManager;2)通過(guò)FreeMarkerTemplateUtils
    來(lái)解析。為了方便擴(kuò)展(比如寫一些自定義的Freemarker方法等),我對(duì)兩種方式都寫了子類進(jìn)行擴(kuò)展。
    CoreFreemarkerManager在struts.xml中配置:
    <constant name="struts.freemarker.manager.classname"? value="com.xxxx.framework.core.freemarker.CoreFreemarkerManager" />
    CoreFreeMarkerTemplateUtils則就是一個(gè)工具類了。一般適用于CMS、郵件模板解析等。
  • 返回時(shí)經(jīng)過(guò)的Interceptor
    AOP的點(diǎn)也就是before和after,而after時(shí)的操作一般就是寫日志了。


  • http://marshal.easymorse.com/index.html%3Fp=177.html

    方便為Struts2擴(kuò)展功能。

    主要作用:

    • 簡(jiǎn)化開發(fā),提高開發(fā)效率,有人寫插件,封裝技術(shù)細(xì)節(jié),其他人使用;
    • 代碼復(fù)用,封裝的插件,可以重復(fù)利用;
    • 提高軟件開發(fā)的質(zhì)量,插件被反復(fù)使用,bug應(yīng)該較少。

    Struts2 插件的文檔:http://struts.apache.org/2.0.11/docs/plugins.html

    Struts2的插件機(jī)制,類似eclipse或者firefox的插件機(jī)制,和Struts1.x有很大區(qū)別。

    Struts2插件由單一的jar文件組成,包括:類文件和配置文件(擴(kuò)展、替代或者添加到已有的框架功能中)。

    安裝插件:通過(guò)復(fù)制(并且復(fù)制依賴jar文件)到classpath。

    配置插件:插件的jar文件中包含struts-plugin.xml,和struts.xml文件格式相同。

    該配置文件可以:

    • 定義新的package、result、interceptor、action
    • 覆蓋框架的常量
    • 引入新的擴(kuò)展點(diǎn)實(shí)現(xiàn)類

    框架中一些受歡迎,但是可選的屬性通過(guò)插件方式發(fā)布。應(yīng)用程序發(fā)布時(shí)可以留下所有插件,也可以只包含其中使用到的。插件可以包含在原始代碼中,也可以是第三方發(fā)布的。

    注意:插件的加載沒有特定次序。插件不能互相依賴。插件可以依賴struts2核心部分的類,但是不能依賴其他插件的類。

    框架加載配置文件的次序:

    • struts-default.xml (bundled in the Core JAR)
    • struts-plugin.xml (as many as can be found in other JARs)
    • struts.xml (provided by your application)

    配置文件都加載完畢后,各個(gè)插件才可以使用這些配置。

    擴(kuò)展點(diǎn):

    • com.opensymphony.xwork2.ObjectFactory:單例的,用于創(chuàng)建action、result和interceptor,屬性是struts.objectFactory
    • com.opensymphony.xwork2.ActionProxyFactory:創(chuàng)建Action的代理
    • com.opensymphony.xwork2.util.ObjectTypeDeterminer:確定數(shù)據(jù)類型
    • org.apache.struts2.dispatcher.mapper.ActionMapper:確定請(qǐng)求對(duì)應(yīng)的action
    • org.apache.struts2.dispatcher.multipart.MultiPartRequest:處理文件上傳的請(qǐng)求
    • org.apache.struts2.views.freemarker.FreemarkerManager:加載和處理freemarker的模板
    • org.apache.struts2.views.velocity.VelocityManager:加載和處理velocity的模板

    總結(jié)

    以上是生活随笔為你收集整理的Struts2工作原理和框架扩展点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。