关于struts1与struts2
1.Action方面
Action是整个Struts框架的核心内容,Struts1.x与Struts2的Action模型很大的区别。Struts2是一个 pull-MVC架构 ,从开发者角度看,就是说需要显示给用户的数据可以直接从Action中获取,而不像 Struts1.x那样,必须把相应的Bean存到Page、Request或者Session中才能获取。Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。在Struts2中,处理业务逻辑的方法(通常是execute方法)返回的对象不是ActionForward,而是String。在Struts1.x中,只有“execute”方法才能处理该Action的业务逻辑, 但在Struts2中并非必要,任何声明为public String methodName() 方法,都能通过配置来调用Action。
Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Action是接口;
Struts2的Action 可以实现一个Action接口,也可实现其他接口,还可以不实现任何接口,这使得可选和定制的服务成为可能。在Struts2中,它提供了一个ActionSupport基类去实现 常用的接口。注意,Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
2.线程模式方面
Struts1的Action是线程安全的单例模式,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心,因为Action使用的资源必须是线程安全的或同步的。
Struts2的Action对象为每一个请求产生一个实例,因此没有线程安全问题。Struts2中的ActionContext为Action的执行提供了环境,而 ActionContext 实质上是一个 ThreadLocal 变量。
3.对servlet的依赖方面
Struts1的Action与Servlet API是紧耦合的。
Struts2的Action 并不依赖于Servlet容器,允许Action脱离容器单独被测试。
4.可测试性方面
测试Struts1的Action的一个主要问题是execute方法暴露了servlet API,这使得测试要依赖于容器。
Struts2的Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
5.输入捕获方面
Struts1使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类,因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。
Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
6.表达式语言方面
Struts1 整合了JSTL,因此可以使用JSTL的EL。
Struts2 可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL(Object Graph Notation Language)。
7.绑定值到页面方面
Struts1使用标准JSP机制把对象绑定到页面中来访问;
Struts2 通过ValueStack可以使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
8.类型转换方面
Struts1的ActionForm属性通常都是String类型,Struts1借助于Apache的Commons-Beanutils进行类型转换。
Struts2使用OGNL进行类型转换,并且提供基本和常用对象的转换器。
9.数据校验方面
Struts1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。
Struts2支持通过validate方法和XWork校验框架(拦截器机制)来进行校验。
10.对Action执行的控制方面
Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期;
Struts2支持通过拦截器堆栈(InterceptorStacks)为每一个Action创建不同的生命周期。
11.对IOC的应用
Struts2是以Webwork 2作为基础发展出来。而在Webwork 2.2之前的Webwork版本,其自身有一套控制反转的实现,Struts2推荐大家通过Spring实现控制反转。
12.struts2的拦截机制
拦截器(Interceptor) 在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。在Webwork的中文文档的解释为:拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时,也提供了一种可以提取action中可重用的部分的方式。
- Struts1.x的标准框架中不提供任何形式的拦截器,虽然有一个名为SAIF的附加项目则实现了这样的功能,但它的适用的范围还很有限。
- 拦截器是Struts2的一个强有力的工具。Struts2许多的功能(feature)都是构建于它之上,如国际化、类型转换器、数据校验、异常处理等。
关于struts1与struts2的更多相关文章
- jsp\struts1.2\struts2 中文件上传(转)
jsp\struts1.2\struts2 中文件上传 a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现c.在sturts2中实现现在把Code与大家 ...
- Struts1与Struts2的12点区别
Struts1与Struts2的12点区别 1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Str ...
- 浅析Struts1和Struts2的Action线程安全问题 转
浅析Struts1和Struts2的Action线程安全问题 转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...
- Struts1和Struts2的区别和对比(完整版)
Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...
- Struts1、Struts2和SpringMVC剖析【转载】
前段框架用了不少,今天就来做个总结.网上关于Struts1.Struts2.SpringMVC的文章有很多,这里的内容就是基于它们,来做个比较. 这三个框架是按照上面的顺序,依次出现的,它们都是对MV ...
- Struts2五、Struts1与Struts2的区别
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Ac ...
- Struts1和Struts2对照
最近学习Struts1和Struts2.好多人.提到非常多的信息. Struts2不从Struts1进化. Struts2的前身WebWork. 呢,看了一些资料,下边就来比較比較. 一.架构分析 S ...
- Struts1和Struts2的区别和对比
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 ...
- struts1和struts2和springMVC的区别和介绍
MVC是web开发常用的模式,M即模型层(Model):主要由javabean来实现.V即视图层(View):主要由jsp.velocity.freemarker等.C即控制层(Controller) ...
- Struts1与Struts2的那些事
一.概述 Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的全部请求.Struts1框架有3个重要组成部分:Action.ActionForm和Act ...
随机推荐
- HM16.0之PCM模式——xCheckIntraPCM
参考:https://blog.csdn.net/cxy19931018/article/details/79781042 1.源代码: /** Check R-D costs for a CU wi ...
- Ubuntu 磁盘满了处理方法。
Ubuntu 磁盘满了处理方法: 1. 如果是虚拟机安装ubuntu,直接给虚拟机安装ubuntu 系统所在的盘符动态分配一点磁盘容量,就可以了. 2. 如果不是虚拟机安装ubuntu,那么有两个办法 ...
- 发布 npm遇到的问题
npm publish 遇到 403 怎么办? 这说明你没有切换到 npm 原始源,那么你只需要用 npm config delete registry 删除淘宝源,然后再 publish. publ ...
- Locust性能测试1--简介安装及基本使用
1. Locust简介 Locust是易于使用的分布式用户负载测试工具,旨在对网站(或其他系统)进行负载测试,并弄清一个系统可以处理多少个并发用户,Locust翻译过来是蝗虫的意思,在测试期间,意在一 ...
- docker-compose 官网下载特别慢怎么办?
docker compose 官放推荐的下载方式是这样的: sudo curl -L "https://github.com/docker/compose/releases/download ...
- ORB-SLAM: A Versatile and Accurate Monocular SLAM System 笔记(二)
4. 自动地图初始化 地图初始化的目标是两个帧之间相对位姿来三角化一系列的点云(riangulate an initial set of map points),这个操作是独立与场景且不需要人为的干预 ...
- go语言字符串的处理与json转换
1 字符串的处理 可以通过Go标准库中的strings和strconv两个包中的函数进行相应的操作 1 字符串的操作 func Contains(s, substr string) bool 字符串s ...
- vim编辑器 与etc目录
第1章 目录结构 1.1 vim vim故障 vim 是vi的升级版本 vi类似于文本文档 vim类似于notepad++ 编辑 必须先安装vim命令 yum -y insta ...
- tars 部署
1. mysql url: 192.168.101.3 port: 3306 pw: 123456 一键部署 sudo ./linux-install.sh localhost 123456 en0 ...
- webpack3.10.0(入门系列基本概念1)
一.概念 webpack的核心是一个用于现代JavaScript应用程序的静态模块打包程序.当webpack处理您的应用程序时,它会递归地构建一个依赖图,其中包含应用程序所需的每个模块,然后将所有这些 ...