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技术,就不去学好老框架,每个框架都有它的智慧所在。况且掌握

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

 本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2009/02/07/1385956.html,如需转载请自行联系原作者

相关文章
|
5月前
|
JSON 前端开发 Java
Spring第四课,MVC终章,应用分层的好处,总结
Spring第四课,MVC终章,应用分层的好处,总结
|
Java 数据库连接 数据库
spring高级源码笔记:深入理解阿里spring源码核心思想及框架应用
Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层 SpringMVC 和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的 Java EE 企业应⽤开源框架。
210 0
|
前端开发 Java 数据库连接
《SSH框架》---SSH框架与框架
我们首先网上商城使用的是ssh框架,百度得到:SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架。
|
Java 应用服务中间件 容器
Struts2的工作原理解析
Struts2的工作原理解析
312 0
Struts2的工作原理解析
|
XML 前端开发 Java
框架技术,Struts2入门配置
框架技术,Struts2入门配置
155 0
框架技术,Struts2入门配置
|
XML 前端开发 Java
springmvc配置的全解析,致敬即将远去的mvc
springmvc配置的全解析,致敬即将远去的mvc
542 0
springmvc配置的全解析,致敬即将远去的mvc
|
缓存 开发框架 Java
如果有人问你 JFinal 如何集成 EhCache,把这篇文章甩给他
废话不多说,就说一句:在 JFinal 中集成 EhCache,可以提高系统的并发访问速度。 可能有人会问 JFinal 是什么,EhCache 是什么,简单解释一下。 JFinal 是一个基于Java 语言的极速 Web 开发框架,用起来非常爽,谁用谁知道。EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干的特点,用起来非常爽,谁用谁知道。 JFinal 本身已经集成了 EhCache 这个缓存插件,但默认是没有启用的。那怎么启用呢? 请随我来。
下一篇
无影云桌面