struts2和struts1区别,学习Struts2与1的区别,有人说是:Struts1 Action 是单例的模式并且必须是线程安全的,
struts2和struts1区别,学习Struts2与1的区别,有人说是:Struts1 Action 是单例的模式并且必须是线程安全的,详细介绍
本文目录一览: structs1和structs2的区别
struts1与struts2本质区别 :
1 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts 2的Action。
2 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts 1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。
3 Servlet依赖方面的对比:Struts 1 Action依赖于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。 当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和 HttpServletResponse,从而给开发者更多灵活的选择。
4 可测性方面的对比:测试Struts 1 Action的一个主要问题是execute方法依赖于Servlet API,这使得Action的测试要依赖于Web容器。为了脱离Web容器测试Struts 1的Action,必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而可以脱离Web容器测试Struts 1的Action类。Struts 2 Action可以通过初始化、设置属性、调用方法来测试。
5 封装请求参数的对比:Struts 1使用ActionForm对象封装用户的请求参数,所有的ActionForm必须继承一个基类:ActionForm。普通的JavaBean不能用作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts 1提供了动态ActionForm来简化ActionForm的开发,但依然需要在配置文件中定义ActionForm;Struts 2直接使用Action 属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts 1 ActionForm的模式,Struts 2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继承任何Struts 2基类,是一个POJO,从而降低了代码污染。
6 表达式语言方面的对比:Struts 1整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;Struts 2可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2下的表达式语言功能更加强大。
7 绑定值到视图的对比:Struts 1使用标准JSP机制把对象绑定到视图页面;Struts 2使用“ValueStack”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。
8 类型转换的对比:Struts 1 ActionForm 属性通常都是String类型。Struts 1使用Commons-Beanutils进行类型转换,每个类一个转换器,转换器是不可配置的;Struts 2使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换。
9 数据校验的对比:Struts 1支持在ActionForm重写validate方法中手动校验,或者通过整合Commons alidator框架来完成数据校验。Struts 2支持通过重写validate方法进行校验,也支持整合XWork校验框架进行校验。
10 Action执行控制的对比:Struts 1支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。Struts 2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。
Struts1与struts2有什么区别?
一个是1 ,一个是2,这是最大的区别,技术方面,1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置什么actionform之类的,反正很麻烦,所以依赖性比较强,2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入的操作,速度相对1来说慢一点。
别人的答案 copy过来的
你就当作俩不同的框架看待吧
Struts2与Struts1的对比
Action 类:
Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:
Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
Servlet 依赖:
Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。
可测性:
测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:
Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经 常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存 在的JavaBean(仍然会导致有冗余的javabean)。
Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。
表达式语言:
Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).
绑定值到页面(view):
Struts 1使用标准JSP机制把对象绑定到页面中来访问。
Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
类型转换:
Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。
Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
校验:
Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
Action执行的控制:
Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
struts1 和 struts2的区别
struts1和struts2 是2个完全不同的框架,其实struts2核心就是 webwork框架
struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。Struts 1框架有3个重要组成部分:Action、ActionForm和ActionForward对象。ActionForm必须实现ActionForm的基类,设计上并不是真正的POJO。
struts2核心控制器是FilterDispatcher,Struts 2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action的execute方法来处理用户请求。显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。
struts2与struts1的区别
1.struts1的action是单例模式且必须是线程安全的,action的一个实例处理所有请求.
struts2的action对象为每个请求产生一个实例,没有线程安全问题.
struts1的action依赖于servlet api,struts2的action不依赖与容器,允许脱离容器单独测试.
2.struts1的execute方法依赖于servlet api,使得测试要依赖于容器.struts2的action可以通过初始化,设置属性,调用方法来测试,依赖注入支持是测试更容易.
struts1试用ActionForm对象捕获输入,普通JavaBean不能捕获输入.动态bean可以作为ActionForm的选择,但是是在重复描述已经存在的Javabean.
struts2直接试用action属性作为输入属性,消除了对第二个输入对象的需求.也支持ActionForm模式,这种ModelDriven特性简化了tiglib对POJO对象的应用.
3.struts1整合的JSTL,试用JSTL EL,EL有基本对象图遍历功能,但是对集合和索引属性的支持很弱
struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--
Object Graph Notation Language(OGNL)
4.struts1试用标准jsp机制把对象绑定到页面中来访问
struts2试用ValueStack技术,允许试用一系列名称相同但类型不同的属性重用页面
5.struts1的ActionForm通常都是String类型,试用BeanUtils进行类型转换
struts2使用OGNL进行类型转换,提供基本和常用对象的转化器.
6.struts1支持在ActionForm的validate方法中手动效验,或者通过validator扩展效验
struts2支持通过validate方法和XWork效验框架来进行效验
7.struts1支持每个模块有单独的request生命周期,但是模块中的所有action必须共享相同的生命周期
struts2支持通过拦截器interceptor stacks为每个action创建不同的生命周期。
差别很大,要这样说:struts2与struts1有什么共同点,可能更合理一点。
1.struts1的action是单例模式且必须是线程安全的,action的一个实例处理所有请求.
struts2的action对象为每个请求产生一个实例,没有线程安全问题.
struts1的action依赖于servlet api,struts2的action不依赖与容器,允许脱离容器单独测试.
2.struts1的execute方法依赖于servlet api,使得测试要依赖于容器.struts2的action可以通过初始化,设置属性,调用方法来测试,依赖注入支持是测试更容易.
struts1试用ActionForm对象捕获输入,普通JavaBean不能捕获输入.动态bean可以作为ActionForm的选择,但是是在重复描述已经存在的Javabean.
struts2直接试用action属性作为输入属性,消除了对第二个输入对象的需求.也支持ActionForm模式,这种ModelDriven特性简化了tiglib对POJO对象的应用.
3.struts1整合的JSTL,试用JSTL EL,EL有基本对象图遍历功能,但是对集合和索引属性的支持很弱
struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--
Object Graph Notation Language(OGNL)
4.struts1试用标准jsp机制把对象绑定到页面中来访问
struts2试用ValueStack技术,允许试用一系列名称相同但类型不同的属性重用页面
5.struts1的ActionForm通常都是String类型,试用BeanUtils进行类型转换
struts2使用OGNL进行类型转换,提供基本和常用对象的转化器.
6.struts1支持在ActionForm的validate方法中手动效验,或者通过validator扩展效验
struts2支持通过validate方法和XWork效验框架来进行效验
7.struts1支持每个模块有单独的request生命周期,但是模块中的所有action必须共享相同的生命周期
struts2支持通过拦截器interceptor stacks为每个action创建不同的生命周期
希望能够帮助你。
java中Struts1和Struts2有什么区别 ?
两者的区别:
Action 类:
◆Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
◆Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:
◆Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
◆Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
Servlet 依赖:
◆Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
◆Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。
可测性:
◆测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
◆Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:
◆Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
◆ Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。
表达式语言:
◆Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
◆Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).
绑定值到页面(view):
◆ Struts 1使用标准JSP机制把对象绑定到页面中来访问。
◆Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
类型转换:
◆Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。
◆Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
校验:
◆Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
◆Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
Action执行的控制:
◆Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
◆Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
在网上个你找了个比较经典的介绍:
两者的区别:
Action 类:
◆Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
◆Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:
◆Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
◆Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
Servlet 依赖:
◆Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
◆Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。
可测性:
◆测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
◆Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:
◆Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
◆ Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。
表达式语言:
◆Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
◆Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).
绑定值到页面(view):
◆ Struts 1使用标准JSP机制把对象绑定到页面中来访问。
◆Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
类型转换:
◆Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。
◆Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
校验:
◆Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
◆Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
Action执行的控制:
◆Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
◆Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
Struts1的模板比较死而Struts2比较灵活而且比较好用,而且还添加了一些跟强大的功能,等你们学到以后就会明白了!!
struts2是基于webwork的,和struts1属于完全不同的框架,只是沿用struts的名字而已
一个是1 ,一个是2,这是最大的区别,技术方面,1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置什么actionform之类的,反正很麻烦,所以依赖性比较强,2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入的操作,速度相对1来说慢一点。。。。 楼主采纳吧!!!!
Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物。
简单来说二者的区别是:
一个是Stuts1 ,一个是Stuts2,这是最大的区别,技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强;而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入的操作,速度相对Stuts1来说慢一点。
一、MVC简介
Struts2是一个兼容Struts1和WebWork的MVC框架,既然,提到了MVC框架,就不得不对MVC框架做一个简单介绍,仅限于简单介绍,如果,想了解更多的MVC的知识可以查看相关的文档,或者找一本Struts1的书籍,相信上面关于MVC的篇幅不会很少。言归正传,其实,Java目前出现的这些框架而言,其最终目的都是为了接触耦合,不论是Spring、Hibernate或MVC框架,目的都是为了接触耦合增加复用。MVC接触的是View和Model间的耦合。
MVC包含三个基础部分:Model、View和Controller,这三个部分以最小的耦合协同工作,以增加程序的可扩展性和可维护性。各个部分的实现技术可以总结如下:
1)Model:JavaBean、EJB的EntityBean
2)View:JSP、Struts的TagLib
3)Controller:Struts的ActionServlet、Action
概括起来MVC的优点主要有一下方面:
1)多个视图可以对应一个模型。按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护
2)模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,例如,使用JSP页面、Velocity模板或者直接产生Excel文档等
3)应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性
4)控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用户请求权限的概念
5)MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码
对于MVC的概念性的东西也就废话到此,其关键的地方就是各个模块的实现技术分别是什么。
二、Struts2简介
Struts2既然是从Struts1发展而来,但实际上Struts2与Struts1在框架的设计思想上面还是有很大的区别,Struts2是以WebWork的设计思想为核心,为什么Struts2不沿用Struts1的设计思想,毕竟Struts1在目前的企业应用中还是有非常大的市场在的,那么,来看下Struts1的一些缺点吧:
1)支持的表现层技术单一
2)与Servlet API严重耦合,这点可以从Action的Execute的方法声明里面就可以看的出来
3)代码依赖Struts1 API,有侵入性,这点可以从写Action类和FormBean的时候看的出来,Action必须实现Struts的Action类
而Struts2之所以以WebWork的设计思想为其核心,一点就是最近WebWork的上升势头,再就是WebWork没有Struts1上面的那些缺点,更符合MVC的设计思想,也更利于代码的复用。
基于以上介绍可以看的出,Struts2体系结构与Struts1的体系结构有很大的差别,Struts1是使用ActionServlet做为其中心处理器,Struts2则使用一个拦截器(FilterDispatcher)做为其中心处理器,这样做的一个好处就是将Action类和Servlet API进行了分离。
Struts2的简单处理流程如下:
1)浏览器发送请求
2)中心处理器根据struts.xml文件查找对应的处理请求的Action类
3)WebWork的拦截器链自动对请求应用通用功能,例如:WorkFlow、Validation等功能
4)如果Struts.xml文件中配置Method参数,则调用Method参数对应的Action类中的Method方法,否则调用通用的Execute方法来处理用户请求
5)将Action类中的对应方法返回的结果响应给浏览器
三、Struts2与Struts1对比
1)Action类的实现方式:
Struts1的Action在实现的时候必须扩展Action类或者Action的子类,Struts2的Action类实现的时候可以不用实现任何类和接口,虽然Struts2中提供一个ActionSupport类,但是,不是必须的。
2)Struts1的Action类是单例模式,必须设计成线程安全的,Struts2则为每一个请求产生一个实例
3)Struts1的Action类依赖与Servlet API,从其execute的方法签名可看出,execute方法有两个Servlet的参数HttpServletRequest和HttpServletResponse,Struts2则不依赖于Servlet API
4)以为Struts1依赖于Servlet API这些Web元素,因此对Struts1的Action进行测试的时候是很困难的,需要借助与其他的测试工具,Struts2的Action可以象测试其他的一些Model层的Service类一样进行测试
5)Struts1的Action与View通过ActionForm或者其子类进行数据传递,虽然也有LazyValidationForm这样的ActionForm的出现,但是,还是不能象其他层面那样通过一个简单的POJO进行数据传递,而Struts2将这样的奢望变成了现实
6)Struts1绑定了JSTL,为页面的编写带来方便,Struts2整合了ONGL,也可以使用JSTL,因此,Struts2下的表达式语言更加强大
四、Struts2与WebWork对比
Struts2实际上就是WebWork2.3,不过,Struts2还是与WebWork有少许的差别:
1)Struts2不再支持内置IOC容器,改用Spring的IOC容器
2)Struts2对于Webwork的一些Ajax的特性的标签改用Dojo进行替换
struts和struts2的区别
1、配置文件格式不同
2、struts1有from类和action类,属性封装from类里,在struts2里只有action类,属性封装action类里
3、页面调用是struts1 是*.do struts2 是*.action
我认为struts2要比struts1,简单、方便、快捷。就是用着比struts1好
以上是我开发的体会,下面是我找的资料
主要表现在如下几个方面:
在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的POJO。
线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。Struts2的Action是一个请求对应一个实例。没有线程安全方面的问题。
Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。这使程序难于测试。Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。
封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph NavigationLanguage)。
绑定值到视图技术:Struts1使用标准的JSP,Struts2使用“ValueStack”技术。
类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便的使用。
数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。
Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。
struts1和struts2 是2个完全不同的框架,其实struts2核心就是 webwork框架
struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。Struts 1框架有3个重要组成部分:Action、ActionForm和ActionForward对象。ActionForm必须实现ActionForm的基类,设计上并不是真正的POJO。
struts2核心控制器是FilterDispatcher,Struts 2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action的execute方法来处理用户请求。显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。 望采纳
struts1.x和struts2.x的区别如下:
1、struts1要求Action类继承一个抽象基类,而不是接口。 struts2的action类可以实现一个action接口,也可以实现其他接口。
2、sturts1 action是单例模式,线程是不安全的。 struts2 action线程是安全的,action为每一个请求都生成了一个实例。
3、sturts1过去依赖serlet API,不容易测试。 struts2不依赖于容器,允许Action脱离容器单独被测试。
4、Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。
Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
5、Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。 Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言-Object Graph Notation Language(OGNL).
6、Struts 1使用标准JSP机制把对象绑定到页面中来访问。
Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
7、Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。 Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
8、Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。 Struts2支持通过validate方法和XWork校验框架来进行校验。
9、工作流程的区别:
1)struts的工作流程:
2)struts2的工作流程:
学习Struts2与1的区别,有人说是:Struts1 Action 是单例的模式并且必须是线程安全的,
Struts2是线程安全的,你上边的解释就是完全正确的。1是不安全的,你上边的说明也是正确的。所以根据这些特别,使用1的时候要注意线程的问题,不要使用全局变量,就是公用变量。另外1还必须继承Action,2不需要。
2是线程安全的,即,每个实例都有自己单独的线程,这样的话就不会被别的实例线程所影响.
Struts1 是线程不安全的。Struts2 是线程安全的。
struts1的每个action其实只对应一个实例,而action本身又不带属性,如果你给其action加入了属性的话,那么,所有的请求都调用这个action,那么就共享这个数据了,但是,你加入的属性本身是没有进行线程安全的处理的,因此是不安全的。struts1本身是采用单例来进行处理的,而且不考虑action有成员变量的问题,因此,它本身也就不用考虑线程安全的问题,但是你可以自己实现线程安全。
Struts2 则综合了struts1和webwork实现了线程的安全。这也是struts2 和struts1有很大不同的根本原因。
java编程中,struts1,struts2,hibernate,spring,ajax分别有什么作用或者说他们的应用面主要是哪些?
Struts 是用于构建MVC模型的B/S架构的网络应用.简单来说,就是可以用来做一个三层架构的网站.hibernate是用来做持久化和ORMapping的.Spring主要是用来做IOC(控制反转)容器和管理Bean的.Spring也集成了一些其它方面的功能,例如AOP(面向切面编程),ORMapping,任务调度,java Mail等等.ajax并非是java独有,也跟java没有很直接的联系.ajax主要是提供了一个可以使你的Web应用变得像桌面应用一样反应迅速的机制.使用ajax的动态页面只需要刷新需要更新数据的部分.而不需要整个页面刷新.因此,也有人称ajax是局部刷新技术.
Struts 1 跟Struts 2 的功能差不多(可以理解为1代,2代),最大的区别是机制不同,Struts 1 的Action需要继承框架定义的Action,Struts 2的Action不需要继承.因此Struts 1比struts 2有更强的代码侵入性.另外,Struts 2提供了一个比Struts 1更完善的参数传递机制.因此总体来说,2比1好.
这个问题面试时有问到,struts1在项目中位于业务逻辑层,最大的特点实现了页面显示与逻辑相分离,不过我们现在的项目没怎么用到。
struts2可以说是struts1的加强版吧,也只是了解会用就行了。
hibernate 数据访问层 用来与数据库进行交互,优点大大简化了数据库的重复操作,提高了开发效率。
spring 主要是用来将框架整合起来,核心技术有IOC和AOP。
ajax 无刷新大大改善了用户体验,主要实现原理 。。。 。。。算了 下班了走了。。。
Struts1我不清楚,Struts2主要是里面的标签,方便!Hibernate就是数据层了嘛,Sping是管理Struts跟Hibernate,Ajax是页面不刷新就能访问数据库,也就是写JavaScript,可能说得不全,因为我现在也正在学习Struts,Sping还没学呢!
共同学习。
struts1,struts2应用于j2ee的MVC框架,主要用于页面展现,参数校验和处理,以及跳转控制;
hibernate是j2ee的持久层框架,用来封装对JDBC的操作,避免了逻辑层直接写SQL语句,而是用HQL语句这种面向对象的操作去和数据库打交道,该框架封装了数据库存取的细节,对于业务层来说不必关心底层数据库,只需要调用API操作数据即可;
spring是j2ee的业务层框架,该框架应用十分广泛,因此也非常重要,spring框架采用插件和配置形式彻底摆脱了ejb厚重的包依赖,同时由于动态代理功能(AOP),因此封装了很多有用的业务功能,比如事务,数据源,消息订阅,Mbean,包裹了持久层的代理等等,使用非常方便;该框架广泛使用在程序的业务层当中;
ajax是一种前台的展示技术,一般用在页面局部刷新当中,以提供更好的用户体验,由于用户体验较好,调用服务器程序不必刷新整个页面,因此常常导致滥用,ajax使用场景一般在用户登录判断,整个页面数据量大并需要返回一小部分数据时使用,目前java有许多的ajax框架,比如比较流行的dwr框架,该框架允许ajax调用js函数如同调用java方法一样简单明了。
struts1和struts2的区别,hibernate和ibatis的区别?
二楼看好了在回答啊,误人子弟啊。struts1
和struts2根本就是2个完全不同的mvc框架啊。struts2
核心是webwork,只不过借着struts
的名头而已,机制完全不同嘛。
struts
耦合了servlet
API,struts2怎完全脱离里servlet
API,两者一点儿关系都没有哦。