代码改变世界

Struts2工作原理和框架扩展点

2011-11-13 00:18  颜超敏  阅读(2454)  评论(0编辑  收藏  举报

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

我们先看看Struts2 工作原理图,这样才方便考虑在设计开发框架时有那些扩展点:

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的高级封装)。
  4. Interceptor
    拦截器是Struts2的精华。在这里处理包括异常统一处理、权限控制、参数设置、访问历史和某些特定功能的拦截式保存等处理。
  5. Action
    放置若干处理请求的指定包路径的方法,我设计了BaseAction和GenericAction,BaseAction处理全局的Action公共处理,包括继承ActionSupport,
    实现InitializingBean、ModelDriven(这样可以做一些初始化操作以及得到Struts2模型驱动的相关功能)。
    GenericAction是基于泛型来写的,实现了增删改查之类的公共方法。还有其它若干的项目相关的公共XXXAction,则根据需要设计。
  6. Manager
    在Action的Method中,可以调用若干个Manager方法来实现相关业务,事务是写在Manager层的,用的Spring的声明式事务。
  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、邮件模板解析等。
  8. 返回时经过的Interceptor
    AOP的点也就是before和after,而after时的操作一般就是写日志了。

 

 

 

颜超敏的电子商务博客,企业级电子商务软件系统研发顾问和资深Java架构师,通过本博客分享电子商务软件研发经验和Java架构设计和开发经验
广义的电子商务的范围很广,国际商会认为,电子商务是指对整个贸易活动实现电子化。从涵盖范围方面可以定义为:交易各方以电子交易方式,而不是通过当面交换或直接面谈方式,进行的任何形式的商业交易;从技术方面可以定义为:电子商务是一种多技术的集合体,包括交换数据(如电子数据交换、电子邮件)、获得数据(共享数据库、电子公告牌)以及自动捕获数据(条形码)等。 电子商务涵盖的业务包括:信息交换、售前售后服务(提供产品和服务的细节、产品使用技术指南、回答顾客意见)、销售、电子支付(使用电子资金转账、信用卡、电子支票、电子现金)、组建虚拟企业(组建一个物理上不存在的企业,集中一批独立的中小公司的权限,提供比任何单独公司多得多的产品和服务)、公司和贸易伙伴可以共同拥有和运营共享的商业方式等。