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,如需转载请自行联系原作者

相关文章
|
ARouter 索引
|
9月前
|
Java 数据库连接 数据库
spring高级源码笔记:深入理解阿里spring源码核心思想及框架应用
Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层 SpringMVC 和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的 Java EE 企业应⽤开源框架。
111 0
|
11月前
|
前端开发 Java 数据库连接
《SSH框架》---SSH框架与框架
我们首先网上商城使用的是ssh框架,百度得到:SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架。
|
12月前
|
前端开发 Java Spring
Spring MVC源码 - 00开篇主题框架一览
Spring MVC源码 - 00开篇主题框架一览
66 0
Spring MVC源码 - 00开篇主题框架一览
|
XML 前端开发 Java
框架技术,Struts2入门配置
框架技术,Struts2入门配置
131 0
框架技术,Struts2入门配置
|
Java 应用服务中间件 容器
Struts2的工作原理解析
Struts2的工作原理解析
282 0
Struts2的工作原理解析
|
Java Spring
【实战】Spring生成beanName冲突的解决之道:附源码分析
【实战】Spring生成beanName冲突的解决之道:附源码分析
467 0
【实战】Spring生成beanName冲突的解决之道:附源码分析
|
消息中间件 设计模式 Java
Spring 源码学习(七)扩展功能 下篇(二)
在前面的 Spring 源码学习系列的文章中,深入分析和学习了 BeanFactoryPostProcessor ,主体是 BeanFactory 的后处理器,这次来学习主体是 Bean 的后处理器:BeanPostProcessor。
|
Java Spring
Spring 源码学习(七)扩展功能 下篇(一)
在前面的 Spring 源码学习系列的文章中,深入分析和学习了 BeanFactoryPostProcessor ,主体是 BeanFactory 的后处理器,这次来学习主体是 Bean 的后处理器:BeanPostProcessor。
Spring 源码学习(七)扩展功能 下篇(一)
|
设计模式 Java Spring
Spring原理学习系列之四:Spring AOP原理(从源码层面分析)-------下部
在上一篇文章中,我们通过跟踪源码调用,一步一步找到了Spring框架中处理AOP的源头,明确了框架中AOP调用的整个过程。本篇文章将侧重探讨其中使用到的代理模式,它是23种java设计模式种的一种比较常用的结构型设计模式,在很多框架中经常可以看到它的身影,同时在我们自己的实际编码中在一些场景下我们也可以使用这种设计模式来组织实现自己的代码,将代码逻辑与实际业务进行解耦。
Spring原理学习系列之四:Spring AOP原理(从源码层面分析)-------下部