Struts2工作原理和框架扩展点
2014-06-03 10:59
218 查看
/article/5600361.html
框架主要涉及技术: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时的操作一般就是写日志了。
http://marshal.easymorse.com/index.html%3Fp=177.html
方便为Struts2扩展功能。
主要作用:
简化开发,提高开发效率,有人写插件,封装技术细节,其他人使用;
代码复用,封装的插件,可以重复利用;
提高软件开发的质量,插件被反复使用,bug应该较少。
Struts2 插件的文档:http://struts.apache.org/2.0.11/docs/plugins.html
Struts2的插件机制,类似eclipse或者firefox的插件机制,和Struts1.x有很大区别。
Struts2插件由单一的jar文件组成,包括:类文件和配置文件(扩展、替代或者添加到已有的框架功能中)。
安装插件:通过复制(并且复制依赖jar文件)到classpath。
配置插件:插件的jar文件中包含struts-plugin.xml,和struts.xml文件格式相同。
该配置文件可以:
定义新的package、result、interceptor、action
覆盖框架的常量
引入新的扩展点实现类
框架中一些受欢迎,但是可选的属性通过插件方式发布。应用程序发布时可以留下所有插件,也可以只包含其中使用到的。插件可以包含在原始代码中,也可以是第三方发布的。
注意:插件的加载没有特定次序。插件不能互相依赖。插件可以依赖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)
配置文件都加载完毕后,各个插件才可以使用这些配置。
扩展点:
com.opensymphony.xwork2.ObjectFactory:单例的,用于创建action、result和interceptor,属性是struts.objectFactory
com.opensymphony.xwork2.ActionProxyFactory:创建Action的代理
com.opensymphony.xwork2.util.ObjectTypeDeterminer:确定数据类型
org.apache.struts2.dispatcher.mapper.ActionMapper:确定请求对应的action
org.apache.struts2.dispatcher.multipart.MultiPartRequest:处理文件上传的请求
org.apache.struts2.views.freemarker.FreemarkerManager:加载和处理freemarker的模板
org.apache.struts2.views.velocity.VelocityManager:加载和处理velocity的模板
框架主要涉及技术: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时的操作一般就是写日志了。
http://marshal.easymorse.com/index.html%3Fp=177.html
方便为Struts2扩展功能。
主要作用:
简化开发,提高开发效率,有人写插件,封装技术细节,其他人使用;
代码复用,封装的插件,可以重复利用;
提高软件开发的质量,插件被反复使用,bug应该较少。
Struts2 插件的文档:http://struts.apache.org/2.0.11/docs/plugins.html
Struts2的插件机制,类似eclipse或者firefox的插件机制,和Struts1.x有很大区别。
Struts2插件由单一的jar文件组成,包括:类文件和配置文件(扩展、替代或者添加到已有的框架功能中)。
安装插件:通过复制(并且复制依赖jar文件)到classpath。
配置插件:插件的jar文件中包含struts-plugin.xml,和struts.xml文件格式相同。
该配置文件可以:
定义新的package、result、interceptor、action
覆盖框架的常量
引入新的扩展点实现类
框架中一些受欢迎,但是可选的属性通过插件方式发布。应用程序发布时可以留下所有插件,也可以只包含其中使用到的。插件可以包含在原始代码中,也可以是第三方发布的。
注意:插件的加载没有特定次序。插件不能互相依赖。插件可以依赖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)
配置文件都加载完毕后,各个插件才可以使用这些配置。
扩展点:
com.opensymphony.xwork2.ObjectFactory:单例的,用于创建action、result和interceptor,属性是struts.objectFactory
com.opensymphony.xwork2.ActionProxyFactory:创建Action的代理
com.opensymphony.xwork2.util.ObjectTypeDeterminer:确定数据类型
org.apache.struts2.dispatcher.mapper.ActionMapper:确定请求对应的action
org.apache.struts2.dispatcher.multipart.MultiPartRequest:处理文件上传的请求
org.apache.struts2.views.freemarker.FreemarkerManager:加载和处理freemarker的模板
org.apache.struts2.views.velocity.VelocityManager:加载和处理velocity的模板
相关文章推荐
- Struts2工作原理和框架扩展点
- Struts2工作原理和框架扩展点
- Struts2工作原理和框架扩展点
- Struts2工作原理和框架扩展点(转)
- 框架对Struts2的扩展
- 三大框架的工作原理(Struts1、Struts2、Spring、Hibernate)
- Struts2验证框架的使用和扩展
- 框架之初识Struts2 概念及工作原理
- 请求框架struts2的工作原理
- 三大框架的工作原理(Struts1、Struts2、Spring、Hibernate)
- 三大框架的工作原理(Struts1、Struts2、Spring、Hibernate)
- 【框架学习】Struts2(一)工作原理
- 为何不使用spring、struts2、easyjweb等开源框架
- 为何不使用spring、struts2、easyjweb等开源框架
- 扩展Spring系列(2) ---Spring对各种数据访问框架的集成机制
- 为何不使用spring、struts2、easyjweb等开源框架
- SCA服务框架扩展实践
- 用ASP.NET AJAX框架扩展HTML Map控件
- 为何不使用spring、struts2、easyjweb等开源框架
- myseam,一个jboss seam2.0 的功能的扩展框架