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

Struts框架原理分析之我见相关推荐

  1. Struts流程分析+源码分析

    1.初始化工作 读取配置---转换器-----读取插件 当struts-config.xml配置文件加载到内存,则会创建两个map:ActionConfigs,FromBeans.这两个map都交由M ...

  2. Scrapy_redis框架原理分析并实现断点续爬以及分布式爬虫

    1. 下载github的demo代码 1.1 clone github scrapy-redis源码文件 git clone https://github.com/rolando/scrapy-red ...

  3. SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  4. 程序职业分析之我见,p民p话

    脑子歪了,记录一下: 关键字: 软件工程  设计 分析  UML技术 看了一下关于程序外包 outsourcing,相关知识,有2方面认识: 开发者个人的职业层次定位 和 自己作项目的细节问题. 个体 ...

  5. springmvc框架原理分析

    2019独角兽企业重金招聘Python工程师标准>>> springmvc全名是spring web mvc,springmvc是spring的一个模块,并且看名字即可知道,spri ...

  6. 最大的商业价值来自给人自由--------------解放生产力与互联网用户分析之我见

    生产力决定生产关系,生产关系制约生产力.首先要弄清 互联网就是一种有效的生产关系表现形式.互联网作为一种生产关系的组织形式, 如果一旦起到一种解放和促进生产力发展的作用,必将取得极大的成功. 互联网上 ...

  7. Struts2漏洞分析,漏洞波及全系版本

    Struts漏洞分析    Apache Struts团队已经发布了Struts 2.3.15.1安全更新版本.在Struts2.3.15.1版本之前,存在着严重的安全漏洞,如果现在一些比较大的网站是 ...

  8. ARouter原理分析

    目录 运行阶段 解析 ClassName 初始化 Warehouse Postcard 的补全 执行跳转 总结 ARouter组件化框架原理分析 编译阶段 运行阶段 初始化 加载理念 跳转 ARout ...

  9. IDEA优雅整合Maven+SSM框架(详细思路+附带源码)

    前言: 网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时候你可能思路全无 ~中招了咩~ ,还有一些同学依 ...

最新文章

  1. 程序员必知8大排序3大查找(三)
  2. eclipse中jboss启动时50s错误提示
  3. android gpio操作
  4. 《数据中心虚拟化技术权威指南》一2.2 数据中心网络拓扑
  5. DVWA--SQL Injection (盲注)--四个级别
  6. plotly django_使用Plotly为Django HTML页面进行漂亮的可视化
  7. Cloud一分钟 | 马云发表致股东的公开信;5G算什么?中国已着手研究6G相关工作...
  8. SpringBoot集成Flowable_Jsite已发任务菜单报500
  9. DownloadManager不好用?试试ZlsamDownloadService
  10. [SQL]查询及删除重复记录的SQL语句
  11. IOS安全、逆向、反编译
  12. Mac Homebrew命令报错/usr/local/Homebrew/Library/Homebrew/version.rb:368:in `initialize’
  13. php $act,PHP_php Undefined index和Undefined variable的解决方法,$act=$_POST['act']; 用以上代码总 - phpStudy...
  14. 设置及清除Excel打开密码的两种方法
  15. 修改dns服务器有什么用,修改dns的好处是什么?
  16. 前有狗屁不通文章生成器 | 后有申论生成器
  17. windows操作系统杂谈
  18. 【正点原子Linux连载】第二十章 V4L2摄像头应用编程-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1
  19. sqlserver语法
  20. java中的线程池有哪些,分别有什么作用?

热门文章

  1. Google 的开源技术protobuf 简介与例子
  2. Javascript创建类的七种方法
  3. 孤陋寡闻了吧?Python 居然可以做这30件神奇好玩的事情(附教程)
  4. kafka+zookeeper内外网双网卡配置(针对不同网段)
  5. 依赖版本控制-pom文件介绍
  6. Hive的基本操作-创建表的格式
  7. AOP日志-前置通知操作
  8. Response_案例2_输出字符数据
  9. logback日志记录器讲解
  10. spring配置详解-属性注入(p名称空间SPEL表达式)