框架学习:webWork框架和struts2框架的结构和分析
2016-03-21 21:05
288 查看
在上篇博客中,我简单的介绍了我们分层开发中每一层中拥有的框架,而且介绍了我常用的框架struts1的结构和原理分析,那么今天我继续介绍我熟悉的框架struts2的框架的结构和原理分析。
在说struts2框架之前,我要先介绍另外一个框架webwork框架,这个框架也是一个mvc的框架,这个框架的设计思路是采用拦截链将用户的请求的数据转发到Action中,并负责将Action的处理结果转换成对用户的响应。它的这种设计思路能够和ServletAPI分离,鉴于我们的上篇博客介绍的struts1的缺点,所以webwork框架解决了struts1的这个缺点。
我们来看一下webwork框架的结构图:
有了这个流程图,我就不给大家讲解具体的原理流程了,它采用的是拦截链的机制,通过这些拦截链完成用户的相应请求,从而与servletAPI分离,当与servlet分离开的时候,也就是表明和容器解耦了;另外,我们从结构图中看到它的视图模版有jsp、FreeMarker等等,它的表示层技术比struts1框架的饱满许多。
所以,webwork框架解决了struts1框架存在的问题,而且它的设计思路是非常好的,鉴于此,struts2框架就在struts1框架的基础上引入了webwork框架的设计思路应运而生了。所以我们就能够发现struts2兼具struts1的特性而且通过引入webwork框架的设计思路解决了struts1的一些缺点。
struts2框架的大致的体系图:
从图中我们能够看出它是引入的webwork框架的设计思路,而且它也是基于mvc的一个开源的框架。之后我们来说一下struts2框架的一个执行流程(流程图和webwork框架非常类似):
浏览器发送请求,通过几层过滤器完成一些功能,之后到actionmapper中,之后将请求传到核心控制器中
核心控制器filterDispatcher根据请求决定调用合适的Action
调用webwork的拦截器链自动请求通用功能,如校验之类的操作
回调action的execute方法,获取用户请求执行相应的业务逻辑
之后返回字符串,匹配result,之后跳转到相应的视图或其他的文档
之后在执行相应的拦截器链自动请求功能,随后转到web客户端。
这样我们就对struts2框架的结构上的东西做了一个简单的介绍。在上篇博客讲解了struts1框架,所以有必要在这里对他俩进行一下对比(我仅仅总结了五条我认为比较重要的,以后如果发现其他的在随时补充):
在Action实现类方面的对比(struts1的Action继承action,struts2实现接口,也可以不实现,可以定制服务)
线程模式方面的对比(struts1存在线程安全问题,struts2不存在)
ServletAPI依赖方面的对比(struts1依赖servletAPI,struts2不是)
可测性方面的对比(struts1难测试,依赖容器,struts2不是)
封装请求参数的对比(struts1使用actionform;struts2直接写到action,并且支持pojo对象)
这篇博客就介绍到这里,宏观上的学习以前一直做的不好,所以这段时间一直在解决这个学习上出现的问题,希望我的这些重构的框架学习博客能够对大家有所帮助。下节课我会继续介绍我经常使用的框架的结构和执行流程的分析,敬请关注!
在说struts2框架之前,我要先介绍另外一个框架webwork框架,这个框架也是一个mvc的框架,这个框架的设计思路是采用拦截链将用户的请求的数据转发到Action中,并负责将Action的处理结果转换成对用户的响应。它的这种设计思路能够和ServletAPI分离,鉴于我们的上篇博客介绍的struts1的缺点,所以webwork框架解决了struts1的这个缺点。
我们来看一下webwork框架的结构图:
有了这个流程图,我就不给大家讲解具体的原理流程了,它采用的是拦截链的机制,通过这些拦截链完成用户的相应请求,从而与servletAPI分离,当与servlet分离开的时候,也就是表明和容器解耦了;另外,我们从结构图中看到它的视图模版有jsp、FreeMarker等等,它的表示层技术比struts1框架的饱满许多。
所以,webwork框架解决了struts1框架存在的问题,而且它的设计思路是非常好的,鉴于此,struts2框架就在struts1框架的基础上引入了webwork框架的设计思路应运而生了。所以我们就能够发现struts2兼具struts1的特性而且通过引入webwork框架的设计思路解决了struts1的一些缺点。
struts2框架的大致的体系图:
从图中我们能够看出它是引入的webwork框架的设计思路,而且它也是基于mvc的一个开源的框架。之后我们来说一下struts2框架的一个执行流程(流程图和webwork框架非常类似):
浏览器发送请求,通过几层过滤器完成一些功能,之后到actionmapper中,之后将请求传到核心控制器中
核心控制器filterDispatcher根据请求决定调用合适的Action
调用webwork的拦截器链自动请求通用功能,如校验之类的操作
回调action的execute方法,获取用户请求执行相应的业务逻辑
之后返回字符串,匹配result,之后跳转到相应的视图或其他的文档
之后在执行相应的拦截器链自动请求功能,随后转到web客户端。
这样我们就对struts2框架的结构上的东西做了一个简单的介绍。在上篇博客讲解了struts1框架,所以有必要在这里对他俩进行一下对比(我仅仅总结了五条我认为比较重要的,以后如果发现其他的在随时补充):
在Action实现类方面的对比(struts1的Action继承action,struts2实现接口,也可以不实现,可以定制服务)
线程模式方面的对比(struts1存在线程安全问题,struts2不存在)
ServletAPI依赖方面的对比(struts1依赖servletAPI,struts2不是)
可测性方面的对比(struts1难测试,依赖容器,struts2不是)
封装请求参数的对比(struts1使用actionform;struts2直接写到action,并且支持pojo对象)
这篇博客就介绍到这里,宏观上的学习以前一直做的不好,所以这段时间一直在解决这个学习上出现的问题,希望我的这些重构的框架学习博客能够对大家有所帮助。下节课我会继续介绍我经常使用的框架的结构和执行流程的分析,敬请关注!
相关文章推荐
- Java编程学习——访问权限
- 框架学习:struts1框架的结构和分析
- Java之多线程断点下载的实现
- Hadoop 1.x 使用eclipse集成环境运行WordCount程序
- Java 进阶 之 并发编程 Lock
- java静态变量和静态方法优缺点
- 【java算法】汉诺塔问题求解
- 蓝桥杯 java 序列求和
- 蓝桥杯 JAVA 入门训练 圆的面积
- n个人循环报数1-3问题
- Java 进阶 之 并发编程 Synchronized
- Struts2工作原理
- struts2的核心和工作原理
- 蓝桥杯JAVA Fibonacci数列
- java语言程序设计第十版(Introduce to java 10th) 课后习题 chapter6-29
- java基本知识点
- Java之HashMap在多线程情况下导致死循环的问题
- Java 进阶 之 检查型异常与非检查型异常
- java语言程序设计第十版(Introduce to java 10th) 课后习题 chapter6-28
- Java核心知识点-Java编译原理