Struts2工做原理和框架擴展點

框架主要涉及技術:Spring + Struts2 + Hibernate + Freemarkerweb

咱們先看看Struts2 工做原理圖,這樣才方便考慮在設計開發框架時有那些擴展點:框架


  1. ActionFilter和其它過濾器
    在web.xml配置這些Filter在Struts自身的Filter以前。 包括全局缺省的ActionFilter、語言編碼LocaleFilter、重定向UrlRewriteFilter等等。工具

  2. StrutsPrepareFilter
    Struts的Action預處理過濾器。個人作法是寫一個子類繼承它,如CoreStrutsPrepareFilter,這樣我能夠在子類中實現諸如
    動態加載struts.xml和指定目錄指定規則的struts-xxx.xml等。編碼

  3. StrutsExecuteFilter
    一樣是使用寫子類繼承它,如CoreStrutsExecuteFilter,寫根據條件(如Struts相關的配置文件改動了)從新生成ExecuteOperations
    (即Dispatcher的高級封裝)。spa

  4. Interceptor
    攔截器是Struts2的精華。在這裏處理包括異常統一處理、權限控制、參數設置、訪問歷史和某些特定功能的攔截式保存等處理。設計

  5. Action
    放置若干處理請求的指定包路徑的方法,我設計了BaseAction和GenericAction,BaseAction處理全局的Action公共處理,包括繼承ActionSupport,
    實現InitializingBean、ModelDriven(這樣能夠作一些初始化操做以及獲得Struts2模型驅動的相關功能)。
    GenericAction是基於泛型來寫的,實現了增刪改查之類的公共方法。還有其它若干的項目相關的公共XXXAction,則根據須要設計。日誌

  6. Manager
    在Action的Method中,能夠調用若干個Manager方法來實現相關業務,事務是寫在Manager層的,用的Spring的聲明式事務。orm

  7. ViewManager
    因爲系統用的是Freemarker模板技術,因此解析模板的方式有兩種:1)經過Struts自帶的FreemarkerManager;2)經過FreeMarkerTemplateUtils
    來解析。爲了方便擴展(好比寫一些自定義的Freemarker方法等),我對兩種方式都寫了子類進行擴展。
    CoreFreemarkerManager在struts.xml中配置:
    <constant name="struts.freemarker.manager.classname"  value="com.xxxx.framework.core.freemarker.CoreFreemarkerManager" />
    CoreFreeMarkerTemplateUtils則就是一個工具類了。通常適用於CMS、郵件模板解析等。xml

  8. 返回時通過的Interceptor
    AOP的點也就是before和after,而after時的操做通常就是寫日誌了。繼承

相關文章
相關標籤/搜索