程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Struts2工作原理和框架擴展點

Struts2工作原理和框架擴展點

編輯:關於JSP

 

 

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

 

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

 

 

 

ActionFilter和其它過濾器

在web.xml配置這些Filter在Struts自身的Filter之前。 包括全局缺省的ActionFilter、語言編碼LocaleFilter、重定向UrlRewriteFilter等等。

StrutsPrepareFilter

Struts的Action預處理過濾器。我的做法是寫一個子類繼承它,如CoreStrutsPrepareFilter,這樣我可以在子類中實現諸如

動態加載struts.xml和指定目錄指定規則的struts-xxx.xml等。

StrutsExecuteFilter

同樣是使用寫子類繼承它,如CoreStrutsExecuteFilter,寫根據條件(如Struts相關的配置文件改動了)重新生成ExecuteOperations

(即Dispatcher的高級封裝)。

Interceptor

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

Action

放置若干處理請求的指定包路徑的方法,我設計了BaseAction和GenericAction,BaseAction處理全局的Action公共處理,包括繼承ActionSupport,

實現InitializingBean、ModelDriven(這樣可以做一些初始化操作以及得到Struts2模型驅動的相關功能)。

GenericAction是基於泛型來寫的,實現了增刪改查之類的公共方法。還有其它若干的項目相關的公共XXXAction,則根據需要設計。

Manager

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

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、郵件模板解析等。

返回時經過的Interceptor

AOP的點也就是before和after,而after時的操作一般就是寫日志了。

 

作者 元亨利貞

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved