`

回想一下strut1.x与struts2.x之间区别

阅读更多

   学习struts2后,跟据相关资料和自身想法来整理一下与struts1的区别,以加深理解。其实网上也很多比较二者之间特性的相关文章,所以相映之下,这里也就成拙作了:

 

 

1.首先最大的特点就是在Action类了


Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一 个 ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作 Struts2 的Action对象。

 

2.另外Action的执行机制也是一个区别特性


Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。

 

3.对servlet的依赖程度也是一大变革


Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。

 

4.测试的便捷性


测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

所以说,测试上,struts2比struts1方便多了。

 

5.数据的捕获输入


Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作 ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。

 

6.类型转换

Struts1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。而且,一个Beanutils的创建开销极大。
Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。

 

7.校验方面


Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性

 

8.表达式语言:
Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言-- "Object Graph Notation Language" (OGNL).

 

9.值绑定到页面


Struts 1使用标准JSP机制把对象绑定到页面中来访问。
Struts 2 使用 "ValueStack "技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

 

10.最后,不得不提的很重要一点区别就是:线程模式


Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

 

分享到:
评论

相关推荐

    ssh(spring+strut1.x+hibernate)整合完整教程 附带包

    2. **Struts1.x框架**:Struts1.x是MVC(Model-View-Controller)设计模式的实现,主要用于处理用户请求和展现视图。在SSH整合中,Struts1.x作为前端控制器,接收HTTP请求,调用业务逻辑,然后将结果传递给视图进行...

    struts1,struts教程,struts1.x入门

    9. ** strut1.x的扩展性**:如Tiles框架可以与Struts1集成,实现更复杂的页面布局和模板重用。 10. **预定义的ActionForward**:Struts1提供了一些预定义的ActionForward,如SUCCESS、ERROR等,可以简化Action的...

    Strut-crud.war(Struts的CRUD Demo Sample)

    struts的crud sample demo(struts-crud.war) 可以直接解压查看代码,或者放到工程中运行

    Struts2.5.2的配置及问题解决

    配置文件中的版本号(如`struts-2.5.2`)应与实际使用的Struts版本保持一致,以确保正确解析和执行。 在配置过程中,可能会遇到各种问题。例如,日志配置不完整可能导致Tomcat无法启动或运行错误。在这种情况下,...

    Struts2.chm,StrutsAPI.chm,Struts帮助文档.chm三个文档

    “Struts帮助文档.chm”可能是综合性的用户指南,它除了包含基础概念和API之外,还可能涉及更高级的主题,如国际化、异常处理、表单验证、Ajax支持、Tiles布局、 strut2-dojo-plugin等。这个文档通常会给出实际应用...

    Struts2教程.chm,Struts2教程.chm

    - OGNL是Struts2的默认表达式语言,用于在Action和视图之间传递数据。 - OGNL支持属性访问、方法调用、表达式运算等功能,使得视图渲染更加灵活。 8. **Tiles框架集成** - Struts2可以与Tiles框架集成,实现复杂...

    struts2所有jar包程序文件

    5. `struts2-convention-plugin.jar`和`struts2-spring-plugin.jar`:分别是约定优于配置插件和Spring集成插件,前者简化了Action配置,后者则帮助将Struts2与Spring容器整合。 6. `struts2-dojo-plugin.jar`和`...

    strut1和struts2的区别

    描述strut1和struts2的区别的总结!

    struts2_api.rar_STRUTS2-API_structs2 api_struts2 api_struts2 res

    10. ** strut2_api 和 structs2_api**:这两个标签可能指的是Struts2 API的不同版本或者是对Struts2 API的两种不同称呼,文档可能包含不同版本的API差异和更新内容。 总的来说,这个压缩包文件“struts2_api”对于...

    Struts2的视频学习代码

    9. **Struts2与Spring集成**:Struts2可以方便地与Spring框架集成,实现依赖注入,便于管理Action对象及其依赖。 10. **异常处理**:Struts2提供了全局的异常处理机制,通过`<global-exception-mappings>`标签定义...

    struts2-jquery-plugin-3.1.0.jar

    struts2-jquery-plugin-3.1.0.jar

    Struts2.1.8最基础包完整包.zip

    4. **ognl-2.7.3.jar**: Object-Graph Navigation Language (OGNL)是Struts2中的表达式语言,用于在模型和视图之间传递数据。开发者可以使用OGNL表达式在Action对象和JSP页面间访问和操作对象属性。 5. **commons-...

    ejb3.rar_EJB3 struts2_MyEclipse EJ_ejb strut jboss_jboss_struts2

    标题中的"ejb3.rar_EJB3 struts2_MyEclipse EJ_ejb strut jboss_jboss_struts2"表明这是一个关于企业级Java开发的项目,主要涉及到EJB(Enterprise JavaBeans)3.0、Struts2框架、MyEclipse集成开发环境以及JBoss...

    Struts2入门案例 实现简单的Struts2入门jar包.rar

    5. **OGNL(Object-Graph Navigation Language)**:Struts2的默认表达式语言,用于在Action与JSP页面之间传递数据。OGNL提供了强大的表达式支持,可以在JSP中直接访问Action的属性,简化了视图层的代码。 6. ** ...

    struts2 API帮助文档

    1. **Struts2核心组件** - `struts2-core`:这是Struts2框架的核心模块,包含了处理请求、调度、拦截器、结果类型、动态方法调用等功能。其中,Action接口和ActionSupport类是处理业务逻辑的基础,而.struts.xml...

    struts-2.3.15

    Struts 2是Struts 1的升级版,它在继承了Struts 1优点的基础上,融合了WebWork框架的特性,极大地提高了开发效率和代码质量。 1. **MVC架构**:Struts 2的核心是MVC设计模式,它将业务逻辑、数据模型和用户界面分离...

    Struts的jar包

    1. `struts2-core-2.3.16.3.jar`:这是Struts2框架的核心库,包含了处理请求、拦截器、结果类型、插件机制、配置管理等核心功能。它是使用Struts2进行开发时必不可少的组件。 2. `xwork-core-2.3.16.3.jar`:XWork...

    Struts2实战

    1. Struts2框架的介绍:Struts2是Struts的下一代产品,它是在struts 1和WebWork的技术基础上进行了合并和改进后的新框架。Struts2的出现,标志着Java Web开发的一大进步,它为开发者提供了更加灵活和强大的开发工具...

    strut2的jar包

    1. **struts2-core.jar**:这是Struts2框架的核心库,包含了所有基本的控制器、拦截器、结果类型和其他核心功能。这个JAR文件提供了Action类、Result接口、Interceptor接口以及许多内置的拦截器,如异常处理、参数...

Global site tag (gtag.js) - Google Analytics