`

面试题锦 java

阅读更多

Struts1 和 Struts2的比较

比较项 Struts1 Struts2
Action类 Struts1要求Action类继承一个抽象基类,这是Struts1针对抽象类而不是接口编程的一个普遍问题 Struts2的 Action可以实现Action接口,也可以实现提供的其他服务的接口。Struts2提供了ActionSupport基类来实现常用的接口。在 Struts2中Action接口不是必须的,任何包含execute()方法的POJO类都可以作为Action
线程模型 Struts1 的Action是单例模式,所有针对这个Action的请求都由它的唯一实例进行处理,因此它必须是线程安全的。单例策略限制了Struts1的Action所能做的事,并且在开发时要小心,Action的资源必须是线程安全或同步的 Struts2的Action为每一个请求实例化一个对象,这样就没有线程安全的问题。实际上Servlet容器每次处理请求时,都会产生许多被丢弃的对象,但并没有证据证明更多的对象会产生性能和垃圾回收问题
Servlet依赖 Struts1 的Action依赖Servlet API Struts2的Action不依赖Web容器,Servlet上下文对象被表示为一个简单的Map对象。另外Struts2仍然可以访问原始的HttpServletRequest和HttpServletResponse对象。
输入捕获 Struts1使用ActionForm对象来捕获输入。并且所有的ActionForm需要继承ActionForm基类,开发者常常创建过多的类来获得输入 Struts2直接使用Action的属性来封装请求参数,避免了使用另外的输入对象。
绑定值到视图 Struts1 使用标准的JSP机制把对象绑定到页面上下文,以便在页面中访问动态数据 Struts2使用”值栈”技术,让标签库可以访问值,而不需要将视图和它呈现的对象类型绑定在一起
验证 Struts1支持通过重写ActionForm的Validate()方法进行手动验证,或者使用Commons Validator验证框架进行验证,同一个类可以有不同的验证上下文,但不能使用为对象属性的类定义的验证规则对子对象进行验证 Struts2支持重写ActionSupport的Validate()方法进行手动验证,或者使用XWork验证框架进行验证。XWork验证框架支持使用对象属性所属的类和验证上下文定义的验证规则来验证对象的子属性
Action执行的控制 Struts1 支持每一个模块一个单独的请求处理器(生命周期),但是在模块中的所有Action必须共享相同的生命周期 Struts2 支持使用拦截器栈为每一个Action创建不同的生命周期,如果需要,也可以创建自定义的拦截器栈,和不同的Action一起使用
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics