Struts2 与 Struts1 是两种不同的 Java Web 开发框架,它们在多个关键方面存在显著差异。我们来看一下Action类的设计模式。 在Struts1中,Action类需要继承一个抽象基类,通常是`Action`类。这种方式强制开发者进行继承编程,这在某些情况下可能会限制代码的灵活性。而在Struts2中,Action类可以实现`Action`接口,也可以实现其他自定义接口,提供了更高的可定制性。Struts2还提供了一个`ActionSupport`基类,包含了常用的接口实现,如国际化和异常处理。值得注意的是,Struts2的Action对象并不强制实现特定接口,任何包含`execute`方法的Plain Old Java Object(POJO)都可以作为Action使用,这大大增加了代码的可复用性。 在线程模型方面,Struts1的Action是单例模式,意味着一个Action实例会处理所有请求。因此,Action及其属性必须是线程安全的,开发者需要额外考虑线程同步问题。相比之下,Struts2的Action为每个请求创建一个新的实例,避免了线程安全问题,同时减少了内存管理和性能的影响,因为现代Web容器已经优化了对象的创建和销毁。 在依赖Servlet API上,Struts1的Action直接依赖于HttpServletRequest和HttpServletResponse,这使得Action难以脱离容器独立测试。而Struts2 Action不依赖于容器,允许开发者更容易地进行单元测试。尽管Struts2仍能访问请求和响应对象,但它通过其他设计降低了对Servlet API的直接依赖。 在测试方面,Struts1的Action由于直接暴露了Servlet API,测试需要依赖容器,通常需要使用Struts TestCase这样的第三方工具。而Struts2 Action可以通过依赖注入、设置属性和调用方法进行测试,提高了测试的便利性。 对于输入数据的处理,Struts1使用ActionForm对象来收集表单数据,ActionForm通常需要继承基类,可能导致过多的类创建。Struts2则直接使用Action的属性作为输入属性,消除了ActionForm的需要,支持富对象类型的属性,这简化了数据绑定和验证过程。 在表达式语言方面,Struts1整合了JSTL EL,但其对集合和索引属性的支持有限。Struts2引入了更强大的OGNL(Object Graph Notation Language),支持更复杂的对象图遍历和表达式操作。 绑定值到视图(View)的方式,Struts1使用JSP标准机制,而Struts2采用了ValueStack技术,使得TagLib可以无需将对象绑定到视图,提高了页面的复用性。 在类型转换上,Struts1的ActionForm属性多为String类型,通过Commons-Beanutils进行类型转换,转换器不可配置。而Struts2利用OGNL进行类型转换,提供了更多内置的转换器,并支持自定义转换。 对于数据验证,Struts1的验证通常在ActionForm的validate方法中手动进行,或通过Commons Validator扩展。Struts2则采用XWork验证框架,支持在validate方法和XML配置中进行验证,同时可以对子对象进行验证,提供了更灵活的验证规则。 Struts2在设计模式、线程模型、测试性、数据处理、表达式语言、视图绑定、类型转换以及验证机制等多个方面都进行了改进,使得开发更加便捷,测试更加容易,同时也增强了框架的灵活性和可扩展性。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- apache-maven-3.6.1-bin.zip
- c593f5fc-d4a7-4b43-8ab2-51afc90f3f62
- IIR滤波器参数计算函数
- WPF树菜单拖拽功能,下级目录拖到上级目录,上级目录拖到下级目录.zip
- CDH6.3.2版本hive2.1.1修复HIVE-14706后的jar包
- 鸿蒙项目实战-天气项目(当前城市天气、温度、湿度,24h天气,未来七天天气预报,生活指数,城市选择等)
- Linux环境下oracle数据库服务器配置中文最新版本
- Linux操作系统中Oracle11g数据库安装步骤详细图解中文最新版本
- SMA中心接触件插合力量(插入力及分离力)仿真
- 变色龙记事本,有NPP功能,JSONview功能