框架主要涉及技术:Spring + Struts2 + Hibernate + Freemarkerweb
咱们先看看Struts2 工做原理图,这样才方便考虑在设计开发框架时有那些扩展点:框架
ActionFilter和其它过滤器
在web.xml配置这些Filter在Struts自身的Filter以前。 包括全局缺省的ActionFilter、语言编码LocaleFilter、重定向UrlRewriteFilter等等。工具
StrutsPrepareFilter
Struts的Action预处理过滤器。个人作法是写一个子类继承它,如CoreStrutsPrepareFilter,这样我能够在子类中实现诸如
动态加载struts.xml和指定目录指定规则的struts-xxx.xml等。编码
StrutsExecuteFilter
一样是使用写子类继承它,如CoreStrutsExecuteFilter,写根据条件(如Struts相关的配置文件改动了)从新生成ExecuteOperations
(即Dispatcher的高级封装)。spa
Interceptor
拦截器是Struts2的精华。在这里处理包括异常统一处理、权限控制、参数设置、访问历史和某些特定功能的拦截式保存等处理。设计
Action
放置若干处理请求的指定包路径的方法,我设计了BaseAction和GenericAction,BaseAction处理全局的Action公共处理,包括继承ActionSupport,
实现InitializingBean、ModelDriven(这样能够作一些初始化操做以及获得Struts2模型驱动的相关功能)。
GenericAction是基于泛型来写的,实现了增删改查之类的公共方法。还有其它若干的项目相关的公共XXXAction,则根据须要设计。日志
Manager
在Action的Method中,能够调用若干个Manager方法来实现相关业务,事务是写在Manager层的,用的Spring的声明式事务。orm
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
返回时通过的Interceptor
AOP的点也就是before和after,而after时的操做通常就是写日志了。继承