为了对Struts2和Strtus1.x进行全面的比较,让读者了解这两种框架各自的优缺点,以便于在自己的项目中,根据实际情况,选择合适的框架,对它们两者进行比较,总结了如下表分析比较。
特性 |
Struts1.x |
Struts2 |
Action类 |
Struts1.x要求Action类要扩展自一个抽象基类。Struts1.x的一个共有的问题是面向抽象类编程而不是面向接口编程。 |
Struts2
的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。Struts2提供一个名叫ActionSupport的基
类来实现一般使用的接口。当然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts
2的Action对象来使用。 |
线程模型 |
Struts1.x Action类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。 |
Struts2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器给每一个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)。 |
Servlet 依赖 |
Struts1.x的Action类依赖于servlet API,当Action被调用时,以HttpServletRequest和HttpServletResponse作为参数传给execute方法。 |
Struts2
的Action和容器无关。Servlet上下文被表现为简单的Maps,允许Action被独立的测试。Struts2的Action可以访问最初的请
求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问HttpServletRequest或HttpServletResponse。 |
易测性 |
测试Struts1.x的主要问题是execute方法暴露了Servlet API这使得测试要依赖于容器)。第三方的扩展,如Struts TestCase,提供了一套Struts1的模拟对象(来进行测试)。 |
Struts2的Action可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也是测试变得更简单。 |
捕获输入 |
Struts1.x
使用ActionForm对象来捕获输入。象Action一样,所有的ActionForm必须扩展基类。因为其他的JavaBean不能作为
ActionForm使用,开发者经常创建多余的类来捕获输入。DynaBeans可以被用来作为替代ActionForm的类来创建。但是,开发者可能
是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。 |
Struts2直接使用Action属性作
为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs
访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven
特性简化了taglib对POJO输入对象的引用。 |
表达式语言 |
Struts1.x整合JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合和索引属性的支持很弱。 |
Struts2使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL)。 |
将值绑定到页面 |
Struts1.x使用标准JSP机制来绑定对象到页面上下文。 |
Struts2使用“ValueStack”技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。 |
类型转换 |
Struts1.x的ActionForm属性经常都是String。Struts 1.x使用Commons-Beanutils来进行类型转换。转换每一个类,而不是为每一个实例配置。 |
Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。 |
验证 |
Struts1.x支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。 |
Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性 |
Action执行控制 |
Struts1.x支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。 |
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。 |
六、 结论
前面已经简要介绍了Struts2的起源,并详细对比了Struts2和Struts1.x的差异,读者应该对Struts2的基础有所了解了——包括
高层的框架概念和基础的请求流程,并理解Struts1.x和Struts2两者之间在Action方面的差别,Struts2加强了对拦截器与IoC的
支持,而在Struts1.x中,这些特性是很难想象的。
同时,读者应该明白:Struts2是WebWork的升级,而不是
Struts 1.x的升级。虽然Struts
2提供了与Struts1.x的兼容,但已经不是Struts1.x的升级。对于已有Struts1.x开发经验的开发者而言,Struts1.x的开发
经验对于Struts2并没有太大的帮助;相反,对于已经有WebWork开发经验的开发者而言,WebWork的开发经验对Struts2的开发将有很
好的借鉴意义。
分享到:
相关推荐
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。然而,随着时间的推移,Struts2的早期版本暴露了一些安全漏洞,这使得系统容易受到攻击。本教程将详细解释如何将Struts2的...
Struts1.x是一个经典的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在国际化(i18n)方面,Struts1提供了强大的支持,使得应用程序可以适应不同语言和地区的用户需求。以下是关于Struts1.x国际化...
JSTL的各种标签文件和struts的标签文件,带strtus.jar包c-1_0.tld,c-1_0-rt.tld,c.tld,fmt-1_0.tld,fmt-1_0-rt.tld,fmt.tld,fn.tld,permittedTaglibs.tldscriptfree.tld,sql-1_0.tld,sql-1_0-rt.tld,sql....
Struts2和Struts1是两个非常著名的Java Web框架,它们在处理请求时通常会在URL中显式地显示.action或.do后缀。然而,为了提供更友好的用户体验和增强安全性,有时我们需要隐藏这些扩展名。本篇文章将详细介绍如何在...
struts2-core-2.2.3.1-sources.jar struts2-core-2.2.3.1-sources.jar struts2-core-2.2.3.1-sources.jar
1、升级所需要的jar(见附件): freemarker-2.3.22.jar ognl-3.0.19.jar struts2-convention-plugin-2.3.32.jar struts2-core-2.3.32.jar struts2-spring-plugin-2.3.32.jar xwork-core-2.3.32.jar 2、删除...
1. **Action类与Result**:Struts2的核心是Action类,它是业务逻辑的载体。Action类负责接收用户请求,处理数据,并通过Result返回相应的视图。Result定义了如何将控制权传递给视图,如JSP页面或FreeMarker模板。 2...
10. **数据校验**:Struts 2提供了强大的表单数据验证功能,可以通过XML或注解定义验证规则,可以进行客户端和服务器端的数据校验,确保输入数据的正确性。 综上所述,Struts 2.3.15作为一个成熟的Web开发框架,...
Struts2是一个流行的Java Web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用。从Struts2.3到Struts2.5的升级是一个重要的步骤,因为每个新版本通常包含了安全更新、性能改进以及新功能。在升级过程...
"strtus2.3.15.1"很可能是这个版本的压缩包本身,包含Struts2框架的所有必要组件,如核心库、依赖库、示例应用、配置文件等。开发者可以解压这个文件,然后将相应的JAR文件添加到他们的项目中,或者按照类包替换说明...
在Java EE领域,Struts 2是Struts 1的后续版本,它提供了更强大的功能和灵活性,使得开发者能够更加高效地处理MVC(Model-View-Controller)架构。Struts 2的核心在于其Action类,它负责处理HTTP请求,并与业务逻辑...
这个API文档是开发者理解和使用Struts2框架的关键资源,包含了大量的类、接口和方法的详细说明,帮助开发者有效地利用Struts2的功能。 Struts2框架的核心特性包括: 1. **Action类**:这是处理用户请求的核心组件...
本资源包含"struts2所有jar包程序文件",是开发者进行Struts2应用开发不可或缺的组件集合。 在Java Web开发中,jar(Java Archive)文件是一种归档格式,用于打包多个类文件和相关的元数据。Struts2框架的jar包通常...
Struts2和Hibernate是两种非常重要的Java开源框架,它们在企业级Web开发中扮演着核心角色。Struts2是一款强大的MVC(Model-View-Controller)框架,它为构建基于J2EE的Web应用程序提供了结构化的支持。而Hibernate则...
总结来说,配置Struts2框架在MyEclipse中的主要步骤包括:创建Web项目、配置web.xml、导入库文件、创建Action类、编写struts.xml配置文件、创建JSP页面以及部署和启动服务器。这个过程是每个Java Web开发者在使用...
Struts2的核心组件包括Action、Result、Interceptor(拦截器)等,这些组件通过特定的接口进行交互。Action接口定义了处理用户请求的方法,如execute(),开发者通常会自定义Action类来实现业务逻辑。Result接口则...
1. 配置Struts2:在web.xml中配置Struts2的前端控制器DispatcherServlet,设置struts-default.xml和struts-plugin.xml等核心配置文件。 2. 集成Spring:在Struts2的配置文件中引入Spring插件,配置Spring的...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化且易于管理的企业级应用程序。在当今网络安全日益重要的环境下,使用HTTPS协议来确保数据传输的安全性变得至关重要。Struts2支持HTTPS配置,可以...
11. **测试支持**:Struts2提供了JUnit测试支持,方便进行单元测试和集成测试,确保代码质量。 通过阅读《Struts2_入门参考手册.pdf》,你将深入理解这些概念,并学习如何配置Struts2应用,创建Action,使用拦截器...
1. Struts2框架的介绍:Struts2是Struts的下一代产品,它是在struts 1和WebWork的技术基础上进行了合并和改进后的新框架。Struts2的出现,标志着Java Web开发的一大进步,它为开发者提供了更加灵活和强大的开发工具...