struts1的配置比struts2麻烦很多。不仅要在.xml里写繁多的配置,多数也还要写一个FormBean来和action对应。struts2配置简单。不用继续servlet,任何一个带有方法的类都能当作action来使用。 Struts1和Struts2是两个著名的MVC框架,它们都是Apache Struts项目的一部分,用于构建基于Java的Web应用程序。虽然两者在核心理念上相似,但在实现方式和设计上存在显著差异,这些差异体现在多个方面。 让我们从Action类的实现开始。在Struts1中,Action类必须继承一个抽象基类,这是它的一个局限,因为它要求开发者使用抽象类而非接口进行编程。而在Struts2中,Action类可以实现Action接口,也可以实现其他接口以获取自定义服务。更重要的是,Struts2允许任何带有execute方法的普通Java对象(POJO)作为Action,提供了更大的灵活性。 线程模型是另一个关键区别。Struts1的Action类是单例模式的,这意味着所有请求都会共享同一个Action实例,这就要求Action是线程安全的,增加了开发时的复杂性。相比之下,Struts2的Action为每个请求创建一个新的实例,消除了线程安全问题,简化了资源管理。 在Servlet依赖性上,Struts1的Action直接依赖于Servlet API,执行方法接收HttpServletRequest和HttpServletResponse参数。而Struts2的Action与容器解耦,尽管仍能访问请求和响应,但通过其他机制减少了对Servlet API的直接依赖,增强了可测试性。 测试方面,Struts1的Action由于execute方法直接暴露了Servlet API,测试通常需要依赖容器。Struts2 Action则更容易进行单元测试,支持依赖注入,可以直接初始化、设置属性并调用方法进行测试。 输入捕获方面,Struts1使用ActionForm对象来收集用户输入,ActionForm必须继承基类,有时会导致代码冗余。Struts2则直接将Action的属性作为输入属性,不再需要额外的ActionForm,支持更丰富的对象类型,如业务对象,简化了数据绑定。 在表达式语言上,Struts1整合了JSTL EL,但支持有限。Struts2引入了更强大的OGNL,提供了更全面的对象图遍历和集合操作支持。 在视图层,Struts1依赖JSP标准机制绑定对象,而Struts2采用ValueStack技术,允许taglib访问值栈中的值,无需在视图和对象之间建立硬绑定,提高了代码复用性。 类型转换方面,Struts1的ActionForm属性通常是字符串,依赖于Commons-Beanutils进行类型转换,转换器配置不够灵活。Struts2则使用OGNL进行类型转换,提供更强大的内置转换器。 在验证功能上,Struts1支持在ActionForm的validate方法中进行手动验证,或者使用Commons Validator扩展。Struts2提供了更高级的验证机制,可以通过注解或配置文件定义验证规则,甚至可以对子对象进行验证。 Struts2在很多方面改进了Struts1的设计,包括Action的灵活性、线程安全性、测试友好性、输入处理、表达式语言、视图绑定、类型转换和验证机制,使其更适合现代Web应用的开发需求。
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 一个基于JAVA的类魔塔小游戏 a Java based MagicTowerlike game.zip网络安全
- 基于 SpringBoot 开发的员工的季度绩效考核系统.zip
- 微信自动抢红包动态库.zip程序资源学习资料参考
- 新年快乐的烟花代码.zip
- kotlin 实践微信插件助手, 目前支持抢红包(支持微信最新版本 7.0.0及7.0.3).zip
- 多模态大模型在视觉领域的全面调查
- iOS微信自动抢红包和防撤回插件.zip小程序
- 富士打印机(DocuCentre S2110)打印、扫描驱动下载
- 升腾威讯C73N笔记本无线网卡Win10驱动(稳定支持WiFi6)
- Java Web实验报告三:基于Jquery的表单验证插件