为了对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的开发将有很好的借鉴意义。
<script></script>
分享到:
相关推荐
以上就是关于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简介**:Struts2是一个基于MVC模式的开源Web应用框架,它继承了Struts1的一些特性,并在此基础上进行了很多改进,使得开发更加便捷高效。 - **学习目的**:通过学习Struts2框架,掌握其基本原理和使用...
Struts2是一个基于MVC设计模式的Java web框架,它在功能和配置上与Struts1.x有着显著的区别。Struts2实际上是建立在Webwork框架之上,采用了Webwork的核心技术,如XWork库。尽管如此,Struts2仍然保留了动作驱动的...
Struts2是Apache软件基金会的一个开源项目,它是Struts1.x的升级版,引入了许多改进和新特性。Struts2的核心目标是提供一个结构化的、可扩展的和灵活的框架,以便开发者可以更专注于业务逻辑的实现,而不是底层的...
6. **Servlet API**: Struts2与Servlet容器(如Tomcat、Jetty)紧密集成,因此需要Servlet API的相关库,如`javax.servlet-api-3.x.jar`和`jsp-api-2.x.jar`(具体版本根据你的服务器环境而定)。 7. **其他辅助库*...
确保在类路径下有`struts2-core-x.x.x.jar`,并导入相关的依赖。 2. **编写Action**:创建一个Action类,处理文件上传请求,并保存文件。 ```java public class UploadAction extends ActionSupport { private ...
1. **引入依赖**:首先,你需要在项目的pom.xml文件中添加Apache POI和Struts2的依赖。对于POI,通常使用最新稳定版,例如POI 4.x系列,对于Struts2,可能需要根据你的项目确定合适的版本。 2. **创建Excel模板**:...
不过,其工作原理和配置方式与Struts 1.x有所不同。 总的来说,Struts的验证框架Validate是提高应用质量的重要工具,通过合理利用,可以确保数据的有效性,减少潜在的错误,从而提升用户体验。理解并熟练掌握其使用...
详细的讲解了struts1.X部分,由浅入深的分析了strtus的内容,对一些难懂的部分,外加了部分代码做参考讲解,看完后能对struts有一个更新的认识
当用户提交表单时,Struts2框架会自动将输入的验证码与session中的验证码进行比较,如果匹配则通过验证,否则提示错误。 总结,通过Struts2实现验证码功能,主要涉及到Action配置、验证码生成类的设计以及前端展示...
在进行Web开发时,我们经常会遇到Ajax GET请求发送中文参数时出现乱码的问题...在提供的压缩包文件`strtus-ajax-by-get-zh-garbled`中,可能包含了关于Struts框架下解决Ajax GET请求中文乱码的示例代码,可以参考学习。