struts和struts2的区别是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts和struts2的区别是啥?相关的知识,希望对你有一定的参考价值。
你问的应该是 struts1 和struts2 的区别:Struts2与Struts1的对比
1,在Action实现类方面:
Struts1要求Action类继承一个抽象基类;Struts1的一个具体问题是使用抽象类编程
而不是接口。Struts2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制服务成为可能。
Struts2 提供一个ActionSupport基类 去实现常用的接口。即使Action接口不是必须实现的,只有一个包含
execute方法的POJO类都可以用作Struts2的Action。
2,线程模式方面:
Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。
3,Servlet依赖方面:
Struts1 Action依赖于Servlet API,因为Struts1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。
Struts2 Action 不再依赖于ServletAPI,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。当然,如果Action 需要直接访问HttpServletRequest和HttpServletResponse参数,Struts2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问
HttpServletRequest和HttpServletResponse,从而给开发者更多灵活的选择。
4,可测试方面:
测试Struts1 Action的一个主要问题是execute方法依赖于Servlet于ServletAPI, 这使得Action 仍然的测试要依赖于Web容器。为了脱离Web容器测试Struts1 的Action, 必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象,从而脱离Web容器测试Struts1的Action类。
Struts2Action可以通过初始化,设置属性,调用方法来测试。
5,封装请求参数方面:
Struts1 使用ActionForm对象封装用户的请求参数,所有的ActionForm 必须继承一个
基类:ActionForm。 普通的JavaBean不能用作ActionForm因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts1 提供了动态ActionForm 来简化ActionForm 的开发,但依然需要在配置文件中定义ActionForm; Struts2 直接使用Action 属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的繁琐,实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts1 ActionForm 的模式
Struts 2 提供了ModelDriven 模式, 可以让开发者使用单独的Model 对象来封装用户请求参数,但该Model对象无须继承任何Struts2基类,是一个POJO,从而
降低了代码污染。
6,表达式语言方面:
Struts1 整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍
历,但在对集合和索引属性的支持上则功能不强
Struts2 可以是用JSTL,但它整合了一种更强大和灵活的表达
式语言:OGNL(Object Graph Notation Language),因此,Struts2下的表达式语言功能更加强大。
7,绑定值到视图方面:
Struts1 使用标准JSP机制把对象绑定到视图页面;
Struts2 使用“ValueStack”技术,使标签能够访问值,而不需要把对象和视图页面绑定在一起。
8,类型转换的方面:
Struts 1 ActionForm 属性通常都是String 类型。 Struts1 使用
Commons-Beanutils 进行类型转换,支持基本数据类型和常用对象之间的转换。
9,数据校验的方面:
Struts1 支持在ActionForm 重写 validate方法手动校验,或者通过整合Commonsalidator框架来完成数据校验。
Struts2 支持通过重写validator方法进行校验,也支持整合XWork校验框架进行校验
10,Action执行控制的方面:
Struts1 支持每一个模块对应一个请求处理(既生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。
Struts2支持通过拦截器堆栈为每一个Action 创建不通的生命周期。开发者可以根据需要创建相应堆找,从而和不同的Action一起使用。 参考技术A strust2 是基于mvc模式对servlet的一种封装
servlet是java基于j2ee的是一种实现技术
strust2 由于本身是基于mvc的一种框架,分为几个类块来实现模块功能,
粗略可以理解为 servlet是struts2的父类
struts是servlet功能上的扩展
java中的struts是啥?
struts也是一种框架,目前指struts2。最早出现的Struts1是一个非常著名的框架,它实现了MVC模式。Struts1简单小巧,其中最成 熟的版本是Struts1.2。 之后出现了WebWork框架,其实现技术比Struts1先进,但影响力丌如Struts1。 在框架技术丌断发展过程中,有人在WebWork 核心XWork 的基础上包装了Struts1(算是两种 框架的整合),由此,结合了Struts1的影响力和WebWork 的先进技术,Struts 2诞生了。 所以说,Struts2丌是Struts1的升级,它更像是WebWork 的升级版本 参考技术A struts 2是JAVA web编程的一种常用MVC(即model模型层、view视图层、controller控制层)框架,框架主要是为了使代码具有层次性、降低代码之间的耦合(即松耦合)、便于代码的修改阅读以及项目后期对代码的优化……以上我的个人理解有不准确的地方,请搜索j2ee 框架等相关电子书 参考技术B struts是一个开源框架,是webwork和struts1的结合体,但是又不是综合体。struts重要体现在MVC(当然SpringMVC也一样),个人感觉Struts比SpringMVC好用。 参考技术C 现在java的strtus分为两个版本,而现在strtus应该是第二个版本strtus2,
java web中经典SSH框架中的一位!
他是MVC模式中的控制层(控制用户请求后展现的页面等),
struts2的核心就是action。易于维护,解耦,灵活性更好。
所以他在java web上的地位是很不一般的! 参考技术D 一个MVC的框架
以上是关于struts和struts2的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章