Struts框架原理分析之我见

 

                   struts是早期的成熟MVC前端控制层框架,具有诸多优点,近两天又系统了研究了一下框架的原理,

希望能够从原理上研究一下struts框架的实现思路。也就是说如果理解了这些原理的相关应用技术,就可以自己写出

一个山寨版的struts了,当然根据水平的不同,写出的框架的健壮性、扩展性、重用性肯定会相差很多的。

                    struts的有两个控制器,分别是前端的ActionServlet中心控制器,和后端所有action都需要继承的

Action控制器。真正的开发过程中,项目开发人员并不需要对ActionServlet有过多的了解就可以开发的很happy。

但是这篇随笔我想系统的写一下我最近的研究体会,解析struts架构。从ActionServlet开始,让我们看透struts。

struts并不神秘,构建起这个框架的技术是servlet,jsp,javabean,dom4j或jdom,反射。

 

1.ActionServlet(中心控制器)

ActionServlet需要做的工作是,根据web.xml的struts配置文件的路径,解析struts配置文件(一般用的都是

/WEB-INF/struts-config.xml)。当然不只找配置文件这么简单,还需要初始化一些属性值,如果web.xml没有

指定,就使用默认的值,这是第一个重要步骤。第二步填充ActionFrom,struts框架构建于“Action-Form”模式上

所以这一步非常重要,也是难点。首先根据配置文件,利用反射的Class.forName方法查找匹配的类,如果存在则填充,

不存在则抛出异常。提取页面所有参数名(request.getParameterNames()--Enumeration),接着把参数名与bean

中的属性名进行匹配,若匹配把取出的值填充到bean中(使用BeanUtils技术)保存form对象。如果使用ActionForm

的子类DynaActionForm,则是走另一套类似的方法,只不过不需要使用反射,而是直接对比配置文件的配置属性和

所配置数据类型是否一致。一致就构建进一个内致的formbean对象。然后需要借助Action后端控制器进行操作默认会

调用对应的action的execute方法(前提:action没有继承自DispatchAction之类的特殊Action控制器子类的话)。最终

接收返回的ActionForward,派发请求并查找响应。

                                                                                --------------------------这就是神秘的ActionServlet。

2.Action(后端控制器)

主要包含execute方法,还有其他加起来多达21种可覆写方法。当然这也就体现出了struts框架的完善度。如果我们自己想要在

不看源码的情况下实现这个控制器,我觉得需要挑战一下自己的能力。这里不过多的叙述了。

3.ActionFrom

包含方法:Reset、validate.....9种可覆写方法。实现诸如校验、重置的功能。

4.ActionMapping

这是action的控制方法都要传的一个重要参数对象,包含属性:path,name,type,validate,HashMap:forwards....

5.ActionForward

这是action的控制方法都要返回的一个参数对象,包含属性:name,path,redirect....

                                                                              ---------------------------以上就是struts的核心类。

 struts的插件实现是给了一个Plugin接口,其中有两个接口方法来实现的。说白了就是在struts启动的时候,会加载

插件的初始化方法或者配置文件。

 当然除了上述的主要核心内容外struts也要实现许多其他的功能类,来实现国际化,模块异常,链式结构,页面标签处理,

可视化结构,以及一些我所没有用到的功能。这些源代码没有研究,目前资历尚浅,有待今后研究。

总结:

不要因为现在有了struts2,JSF,甚至更新的JavaFX技术,就不去学好老框架,每个框架都有它的智慧所在。况且掌握

一个框架又不难,所以更没有理由拒绝。

 

posted on 2009-02-07 17:35  施杨  阅读(2869)  评论(0编辑  收藏  举报

导航