【SSH进阶之路】深入源码,详解Struts基本实现流程(七)
2015-12-13 22:58
525 查看
通过一步步的封装我们实现了Struts的基本雏形,我们解决了Struts怎么实现MVC的问题,我们现在仅仅有了Struts的基础,对Struts的学习才刚刚开始,这篇我们要通过对比MVC来理解Struts的执行流程,最后深入Struts的源码,一看究竟。
M:业务逻辑,业务数据可以重复使用,我们经常说的javabean(其实struts没有实现业务层,也无法实现)
V:显示逻辑,同一份数据,对应多中显示方法,JSP代码实现
C:控制流程器,Servlet代码实现。
我们通过时序图看一下MVC模式的执行流程,如下图所示:
从前面几篇博客,我们知道了Struts是基于JSP和Servlet的一个开源的Web应用框架,对MVC进行了高度封装,并且我们从MVC一步步的封装了一个Struts。
目录:
【SSH进阶之路】Struts基本原理
+ 实现简单登录(二)
【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三)
【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)
【SSH进阶之路】一步步重构MVC实现Struts框架——彻底去掉逻辑判断(五)
【SSH进阶之路】一步步重构MVC实现Struts框架——完善转向页面,大功告成(六)
那我们就先画一个跟我们前面的例子一致,并且也跟MVC大致相同的时序图,为了帮助大家理解Struts的整个更详细的流。如下所示:
深入源码:
我们理解Struts的基本流程之后,我们还需要深入源码一看究竟,我们学Struts不仅仅是为了使用,还要理解它的真正原理。如果你只为了简单的使用,可以到此为止,如果你想成为一个优秀的架构师,你还不能止步。
时序图如下所示:
从上面的图中我们可以发现ActionServlet几乎完成了Struts的所有的功能,跟MVC的控制器一样,起到了非常重要的作用,我们再将它更加细粒度的解析一下,如下图所示:
从上面的流程图,我们可以发现RequestProcessor起到了至关重要的作用,完成了截取URL,设置映射关系,以及反射创建ActionForm,然后设置值,再反射创建Action,最后再执行execute方法,完成转向。此时,我们的思路已经非常清晰了。下面我用自己的语言总结一下Struts的流程。
我们已经看完了Struts的基本流程以及也深入源码看了一遍Struts的实现流程,下面我们需要用自己的语言来总结一下。
1) 客户端发出http请求。
2)根据web.xml配置,该请求被ActionServlet接收。
3)根据struts-config.xml配置,ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。
4)是否验证,需要验证则调用ActionForm的validate方法,验证失败则跳转到input,成功则继续。
5)Action从ActionForm获得数据,调用javabean(Model)中的业务方法处理数据。
6)Action返回ActionForward对象,跳转到相应JSP页面或Action。
7)返回http响应到客户端。
上面的流程到处都是,看一看还行,看两看就烦,我们还是以一张图进行梳理:
引子:
下篇博客,我们会更新一些Hibernate的内容,先从基本原理入手,再给大家搭建Hibernate的开发环境,现实简单实例。
MVC
M:业务逻辑,业务数据可以重复使用,我们经常说的javabean(其实struts没有实现业务层,也无法实现)
V:显示逻辑,同一份数据,对应多中显示方法,JSP代码实现
C:控制流程器,Servlet代码实现。
我们通过时序图看一下MVC模式的执行流程,如下图所示:
Struts
从前面几篇博客,我们知道了Struts是基于JSP和Servlet的一个开源的Web应用框架,对MVC进行了高度封装,并且我们从MVC一步步的封装了一个Struts。
目录:
【SSH进阶之路】Struts基本原理
+ 实现简单登录(二)
【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三)
【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)
【SSH进阶之路】一步步重构MVC实现Struts框架——彻底去掉逻辑判断(五)
【SSH进阶之路】一步步重构MVC实现Struts框架——完善转向页面,大功告成(六)
那我们就先画一个跟我们前面的例子一致,并且也跟MVC大致相同的时序图,为了帮助大家理解Struts的整个更详细的流。如下所示:
大致流程:
深入源码:
我们理解Struts的基本流程之后,我们还需要深入源码一看究竟,我们学Struts不仅仅是为了使用,还要理解它的真正原理。如果你只为了简单的使用,可以到此为止,如果你想成为一个优秀的架构师,你还不能止步。时序图如下所示:
从上面的图中我们可以发现ActionServlet几乎完成了Struts的所有的功能,跟MVC的控制器一样,起到了非常重要的作用,我们再将它更加细粒度的解析一下,如下图所示:
从上面的流程图,我们可以发现RequestProcessor起到了至关重要的作用,完成了截取URL,设置映射关系,以及反射创建ActionForm,然后设置值,再反射创建Action,最后再执行execute方法,完成转向。此时,我们的思路已经非常清晰了。下面我用自己的语言总结一下Struts的流程。
Struts流程
我们已经看完了Struts的基本流程以及也深入源码看了一遍Struts的实现流程,下面我们需要用自己的语言来总结一下。
1) 客户端发出http请求。
2)根据web.xml配置,该请求被ActionServlet接收。
3)根据struts-config.xml配置,ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。
4)是否验证,需要验证则调用ActionForm的validate方法,验证失败则跳转到input,成功则继续。
5)Action从ActionForm获得数据,调用javabean(Model)中的业务方法处理数据。
6)Action返回ActionForward对象,跳转到相应JSP页面或Action。
7)返回http响应到客户端。
上面的流程到处都是,看一看还行,看两看就烦,我们还是以一张图进行梳理:
总结
最后,相信经过这一遍遍的对比和分析,你已经对Struts的基本原理了如指掌。引子:
下篇博客,我们会更新一些Hibernate的内容,先从基本原理入手,再给大家搭建Hibernate的开发环境,现实简单实例。
相关文章推荐
- 【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三)
- 【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)
- 【SSH进阶之路】一步步重构MVC实现Struts框架——彻底去掉逻辑判断(五)
- 【SSH进阶之路】一步步重构MVC实现Struts框架——完善转向页面,大功告成(六)
- 从头认识java-13.6 类型擦除(type erasure)
- 【SSH进阶之路】Spring简介,搭建Spring环境——轻量级容器框架(一)
- [spring-framework]Spring定时器的配置和使用
- 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)
- [javase学习笔记]-5.3 数组操作中常见问题
- 【SSH进阶之路】Spring的IOC逐层深入——为什么要使用IOC[实例讲解](二)
- 【SSH进阶之路】Spring的IOC逐层深入——依赖注入的两种实现类型(四)
- 【SSH进阶之路】Spring的IOC逐层深入——源码解析之IoC的根本BeanFactory(五)
- java 容器、二叉树操作、107
- 【SSH进阶之路】Spring的AOP逐层深入——AOP的基本原理(六)
- Maven - 构建Struts2项目
- Maven - 构建Struts2项目
- Maven - 构建Struts2项目
- 【SSH进阶之路】Spring的AOP逐层深入——采用注解完成AOP(七)
- 【SSH进阶之路】一步步重构容器实现Spring框架——从一个简单的容器开始(八)
- 【SSH进阶之路】一步步重构容器实现Spring框架——解决容器对组件的“侵入式”管理的两种方案--主动查找和控制反转(九)