关于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 ...
随机推荐
- 计算机网络-应用层(5)P2P应用
P2P系统的索引:信息到节点位置(IP地址+端口号)的映射 在文件共享(如电驴中):利用索引动态跟踪节点所共享的文件的位置.节点需要告诉索引它拥有哪些文件.节点搜索索引从而获知能够得到哪些文件 在即时 ...
- 如何使用SPSSAU计算耦合协调度?
什么是耦合协调度模型 耦合协调度模型用于分析事物的协调发展水平.耦合度指两个或两个以上系统之间的相互作用影响,实现协调发展的动态关联关系,可以反映系统之间的相互依赖相互制约程度.协调度指耦合相互作用关 ...
- redis数据库基础篇
一.Redis介绍 Redis 是一个高性能的key-value数据格式的内存缓存,NoSQL数据库.NOSQL:not only sql,泛指非关系型数据库.关系型数据库: (mysql, orac ...
- laravel+vue+vuetify(下载图片到本地)
vue.js如何根据后台返回来的图片url进行图片下载 downloadByBlob(url,name) { let image = new Image() ...
- CET-4 Word 计划表
a {text-decoration: none} CET-4 计划表 Sun Mon Tue Wed Thu Fri Sat 9/1 List-1 9/2 List-2 *List-1 9/3 Li ...
- Google解析Json库Gson
1.资料 官网: http://groups.google.com/group/google-gson 代码: https://github.com/google/gson jar包下载: http: ...
- openresty(nginx+lua)初识
1.新增项目配置文件: vim /usr/example/example1.conf --将以下内容加入example1.conf server { listen 80; server_name _; ...
- ZT:做一个连自己都羡慕的人
当你越来越杰出时,自然有人关注你, 当你越来越有能力时,自然会有人看得起你, 改变自己,你才有自信,梦想才会慢慢的实现. 做最好的自己,懒可以毁掉一个人,勤可以激发一个人! 不要等夕阳西下的时候才对自 ...
- 8成以上的java线程状态图都画错了,看看这个-图解java并发第二篇
本文作为图解java并发编程的第二篇,前一篇访问地址如下所示: 图解进程线程.互斥锁与信号量-看完还不懂你来打我 图形说明 在开始想写这篇文章之前,我去网上搜索了很多关于线程状态转换的图,我惊讶的发现 ...
- js去掉最右边的逗号
str=(str.substring(str.length-1)==',')?str.substring(0,str.length-1):str;