一、Struts1

1、Struts1原理简介

Struts1框架以ActionServlet作为控制器核心,整个应用由客户端请求驱动。当客户端向Web应用发送请求时,请求被Struts1的核心控制器ActionServlet拦截,ActionServlet根据请求决定是否需要调用业务逻辑控制器处理用户请求(实际上,业务逻辑控制器还是控制器,它只是负责调用模型来处理用户请求),当用户请求处理完成后,其处理结果会通过jsp呈现给用户。

Struts1,控制器就是它的核心,Struts1的控制器分为核心控制器和业务逻辑控制器。核心控制器就是ActionServlet,由Sturts1框架提供;业务逻辑控制就是用户自定义的Action,由应用开发者提供。

Struts1的运行流程:

2、MVC分析

(1)、Model

Struts1的Model部分由底层的业务逻辑组件充当,这些业务逻辑组件封装了底层数据库访问、业务逻辑方法实现。

(2)、View

Struts1的View部分采用Jsp实现。不支持FreeMarker、Velocity等模板技术,支持的表现层技术单一。

(3)、Controller

由两个部分组成。

系统核心控制器:由Struts1框架提供,就是系统的ActionServlet。

业务逻辑控制器:由Struts1框架提供,就是用户自己实现的Action实例。

3、优缺点

对于Struts1框架而言,因为它与JSP/Servlet耦合非常紧密,因为导致了很多缺陷--------这也就是Struts2出现的原因。

(1)、支持的表现层技术单一

不支持FreeMarker、Velocity等模板技术。控制器并没有直接执行转发请求,而仅仅返回一个逻辑视图名(ActionForward对象)----实际的转发放在配置文件中。

(2)、与Servlet严重耦合,难于测试

对于处理请求的execute方法,它有四个参数,ActionMapping、ActionForm、HttpServletRequest和HttpServletResponse。

(3)、代码严重依赖于Struts1 API,属于侵入式设计

Action类的设计,导致了较低的代码复用。

二、WebWork

1、WebWork原理简介

从处理流程看,与Struts1非常类似,核心都由控制器组成,并且都分为两个部分,核心控制器ServletDispatch和业务逻辑控制器Action。WebWork使用OGNL表达式语言,可以访问值栈。并且建立在XWork之上,使用ServletDispatcher作为核心控制器,处理HTTP的响应和请求。支持更多的表现层技术,如FreeMarker和XSLT等。而且采用了一种更加松耦合的设计,使测试起来更加方便,允许系统从B/S结构向C/S结构转换。

数据流程图如下:

2、优点

(1)、Action无需与Servlet API耦合,更加容易测试。

(2)、Action无需与WebWork耦合,代码重用高

(3)、支持更多的表现层技术。

三、Struts2

1、Struts2原理简介

Struts2采用了WebWork的设计核心,使用了大量的拦截器来处理用户请求,从而允许用户的业务逻辑控制器与Servlet API分离。Struts2控制器组件是Struts2框架的核心,事实上,所有MVC框架都是由控制器组件为核心的。正如前边提到的,Struts2的控制器由两个部分:FilterDispatcher和业务控制器Action。

使用拦截器作为处理(Advice),以用户的业务逻辑控制器为目标,创建一个控制器代理。控制器代理负责处理用户请求,处理用户请求时回调业务控制器的execute方法,该方法返回值决定了呈现怎么样的视图资源。

Struts2的体系概图如下:

2、Struts2处理流程

(1)、浏览器发送请求。如mypage.action

(2)、核心控制器FilterDispatcher根据请求决定调用合适的Action。

(3)、WebWork的拦截器自动对请求应用通用功能,如workflow、validation或文件上传等

(4)、回调Action的execute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作,即可以是保存到数据库,也可以检索信息。

(5)、Action的execute方法处理结果信息将被发送到浏览器中。而且支持很多的视图技术。

3、Struts2与Struts1的对比

(1)、在Action实现类方面:Struts1要求Action继承一个抽象基类,而不是接口;Struts2都可以实现,并且提供一个ActionSupport基类去实现常用的接口。

(2)、线程模式方面:Struts1 Action是单例模式,必须是线程安全的,因为仅有一个Action实例来处理所有请求。Struts2没有线程安全问题,因为Action对象为每一个请求产生一个实例。

(3)、Servlet依赖方面:Struts1 Action依赖于Servlet API,但是Struts2不依赖。

(4)、可测试方面:Struts1 Action不易于测试。Struts容易测试。

(5)、表达式语言方面:Struts1可以使用JSTL,Struts2也可以用JSTL,但是更支持OGNL

(6)、绑定值到视图:Struts1采用jsp机制。Struts2采用valueStack技术,使标签库能访问值,不需要把对象和视图页面绑定在一起。

(7)、类型转换:Struts1 ActionForm属性通常都是String类型,使用Commons-Beanutils进行类型转换,每一个类一个转换器,转换器不可配置。Struts2使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换。

(8)、数据校验:Struts1支持在ActionForm重写validate方法,手动校验,或者通过Commons alidator框架完成校验。Struts2支持重写validate方法,也支持XWork校验。

(9)、Acion执行控制:Struts1每一个模块对应一个请求处理,每个模块必须共享相同的生命周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。

最新文章

  1. 分布式搜索引擎Elasticsearch的简单使用
  2. php变量和数组大小限制
  3. C语言结构体-struct
  4. 关于配置服务器(IIS7)(二)
  5. python描述符descriptor(二)
  6. java执行命令行
  7. LCM Cardinality
  8. ReactiveCocoa & FRP & MVVM
  9. Eclipse读取含有extjs的项目文件时卡死或者编写ExtJS时卡
  10. 利用js 生成不同li标签的点击事件
  11. 微信小程序wx.request接口
  12. HDMI接口的PCB设计
  13. Machine Learning 学习笔记1 - 基本概念以及各分类
  14. Office在线预览及PDF在线预览的实现方式
  15. BM求递推式模板
  16. HDU P2222 Keywords Search
  17. 查看MySQL日志数据binlog文件
  18. Mac怎样改动开机password
  19. spark(三)从hbase取数据
  20. 网络:W5500用浏览器配置设备

热门文章

  1. IE6下绝对定位元素父级宽高是奇数,绝对定位元素的right和bottom值会有1个像素的偏差
  2. PAT (Advanced Level) 1059. Prime Factors (25)
  3. Linux下VNC配置多个桌面和修改密码 不会当系统重启vnc失效
  4. E/WindowState(643): getStack: Window{33f867f8 u0 Starting com.xxxxxx.ooooo}
  5. iOS常用宏定义
  6. Python核心编程第二版(中文).pdf 目录整理
  7. struts2.0 s标签_小小鸟_百度空间
  8. RunLoop基础
  9. ZOJ 3780 Paint the Grid Again
  10. linux分区-df