Struts1、WebWork、Struts2介绍
一、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一起使用。
Struts1、WebWork、Struts2介绍的更多相关文章
- struts1和struts2和springMVC的区别和介绍
MVC是web开发常用的模式,M即模型层(Model):主要由javabean来实现.V即视图层(View):主要由jsp.velocity.freemarker等.C即控制层(Controller) ...
- Struts1和Struts2的区别和对比(完整版)
Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...
- struts2学习笔记(一)—— struts2介绍及入门程序
一.struts2概述 1.1 什么是struts2? 在介绍Struts2之前,先来认识一下Struts1.Struts1是最早的基于MVC模式的轻量级web框架,他能够合理的划分代码结构,并包含了 ...
- jsp\struts1.2\struts2 中文件上传(转)
jsp\struts1.2\struts2 中文件上传 a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现c.在sturts2中实现现在把Code与大家 ...
- 浅析Struts1和Struts2的Action线程安全问题 转
浅析Struts1和Struts2的Action线程安全问题 转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...
- Struts1、Struts2和SpringMVC剖析【转载】
前段框架用了不少,今天就来做个总结.网上关于Struts1.Struts2.SpringMVC的文章有很多,这里的内容就是基于它们,来做个比较. 这三个框架是按照上面的顺序,依次出现的,它们都是对MV ...
- Struts1和Struts2对照
最近学习Struts1和Struts2.好多人.提到非常多的信息. Struts2不从Struts1进化. Struts2的前身WebWork. 呢,看了一些资料,下边就来比較比較. 一.架构分析 S ...
- Struts1与Struts2的那些事
一.概述 Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的全部请求.Struts1框架有3个重要组成部分:Action.ActionForm和Act ...
- Struts在Web.xml中的配置及Struts1和Struts2的区别
(1)配置Struts的ActionServlet <servlet>元素来声明ActionServlet <servlet-name>元素:用来定义Servle ...
- struts1和struts2原理解析
1.struts1和struts2 是2个完全不同的框架 其实struts2核心就是 webwork框架 struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截 ...
随机推荐
- ExtJS的4.1新特性简要介绍
ExtJS的4.1新特性简要介绍 一.动态加载机制 Ext.require动态加载任何类,并且会加载依赖类: 二.新类系统 •类定义:ExtJS4.0以后应入了Ext.define方法,他通过类的字符 ...
- 数据库建表的时候报 “1215 Cannot add foreign key constraint”
很大原因是因为: 引用表中的字段类型和被引用的主键的类型不统一. 比如说学生表中有一个班级ID字段引用班级表. 班级表的ID是int类型,学生表中的班级ID是Varchar类型. 肯定会提示上述121 ...
- Linux:crontab的安装以及使用方法
安装crontab: [root@wulaoer ~]# yum install vixie-cron [root@wulaoer ~]# yum install crontabs 说明:vixie- ...
- 如何创建一个要素数据类 IField,IFieldEdit,IFields,IFieldsEditI,GeometryDef,IGeometryDefEdit接口
如何创建一个要素数据类 创建要素类用到了IFeatureWorkspace.CreateFeatureClass方法,在这个方法中有众多的参数,为了满足这些参数,我们要学习和了解下面的接口. IFie ...
- 微信小程序实例教程(二)
第五章:微信小程序名片夹详情页开发 今天加了新干货!除了开发日志本身,还回答了一些朋友的问题. 闲话不多说,先看下「名片盒」详情页的效果图: 备注下大致需求:顶部背后是轮播图,二维码按钮弹出模态框信息 ...
- IT人常用的网站
一.网页设计类 蓝色理想 http://www.blueidea.com 网页设计师联盟 http://www.68design.net 网页设计大本营 http://www.code-123.com ...
- ecos的app包管理
install 安装 install app_name1 app_name2 有时候要用-o参数,把所有安装过程需要的参数带入进去(安装过程的参数放在app/$app_name/task.php里in ...
- linux usb installer
其实很简单,手册上有,cp debian....iso /dev/sdc,但是要把sdc上的分区删掉了先. This will only work if it is a hybrid ISO cont ...
- 说说JSON和JSONP,浅析JSONP解决AJAX跨域问题
说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服 ...
- pip install -r requirements.txt 安装mysqldb失败 解决方案
在pip.log中出现sh: 1: mysql_config: not found等一坨报错,因为没有安装另一个包: 只要原因是没有安装:libmysqlclient-dev sudo apt-get ...