一:struts的优缺点

优点:

1、开源:

2、利用Struts提供的taglib可以大大节约开发时间。

3、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。

4、表现与逻辑分离

5、表单验证解决了请求数据的验证问题,增强了系统健壮性。

6、便于团队开发

缺点:

1、大量的使用标签,对于初学者难度较大。

2、ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)

3、配置文件太过于复杂 每改变一次配置文件 都要重启tomcat

Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

为了防止编程过程中出现了乱码 要写一个过滤器来过滤字符

1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts 2的Action。 2) 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts 1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。 3) Servlet依赖方面的对比:Struts 1 Action依赖于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。 当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和HttpServletResponse,从而给开发者更多灵活的选择。 4) 可测性方面的对比:测试Struts 1 Action的一个主要问题是execute方法依赖于Servlet API,这使得Action的测试要依赖于Web容器。为了脱离Web容器测试Struts 1的Action,必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而可以脱离Web容器测试Struts 1的Action类。Struts 2 Action可以通过初始化、设置属性、调用方法来测试。 5) 封装请求参数的对比:Struts 1使用ActionForm对象封装用户的请求参数,所有的ActionForm必须继承一个基类:ActionForm。普通的JavaBean不能用作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts 1提供了动态ActionForm来简化ActionForm的开发,但依然需要在配置文件中定义ActionForm;Struts 2直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts 1 ActionForm的模式,Struts 2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继承任何Struts 2基类,是一个POJO,从而降低了代码污染。 6) 表达式语言方面的对比:Struts 1整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;Struts 2可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2下的表达式语言功能更加强大。 7) — 绑定值到视图的对比:Struts 1使用标准JSP机制把对象绑定到视图页面;Struts 2使用“ValueStack”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。 8) 类型转换的对比:Struts 1 ActionForm 属性通常都是String类型。Struts 1使用Commons-Beanutils进行类型转换,每个类一个转换器,转换器是不可配置的;Struts 2使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换。 9) 数据校验的对比:Struts 1支持在ActionForm重写validate方法中手动校验,或者通过整合Commons alidator框架来完成数据校验。Struts 2支持通过重写validate方法进行校验,也支持整合XWork校验框架进行校验。 10) Action执行控制的对比:Struts 1支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。Struts 2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。 11) 捕获输入:Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。

java struts技术_java技术框架之:struts相关推荐

  1. java多线程必杀技_Java技术大牛必备25个必杀技你都知道吗

    你需要精通面向对象分析与设计(OOA/OOD).设计模式(GOF,J2EEDP)以及综合模式.你应该了解UML,尤其是class.object.interaction以及statediagrams. ...

  2. java接口匿名内部类_JAVA技术分享:接口,内部类,匿名内部类

    原标题:JAVA技术分享:接口,内部类,匿名内部类 接口: 接口中只有抽象方法,而没有非抽象方法 特点: 1:接口不能被实例化,只能通过多态的形式,让子类实例化 2:接口的子类 A:可以是具体类,但是 ...

  3. java论文翻译_Java技术(外文文献翻译)

    内容介绍 网络编程 历史上的网络编程都倾向于困难.复杂,而且极易出错. 程序员必须掌握与网络有关的大量细节,有时甚至要对硬件有深刻的认识.一般地,我们需要理解连网协议中不同的"层" ...

  4. java map 数组_java技术Spring集合属性

    集合属性 在Spring中可以通过一组内置的XML标签来配置集合属性,例如:<list>,<set>或<map>. 1 数组和List 配置java.util.Li ...

  5. java包含关系图_Java——Spring框架完整依赖关系图!再复习了解加工一下吧?

    因为spring-core依赖了commons-logging,而其他模块都依赖了spring-core,所以整个spring框架都依赖了commons-logging,如果有自己的日志实现如log4 ...

  6. java测试步骤_java测试框架的方法

    项目开发过程中使用的单元测试框架有Junit.TestNG以及Mockito,Junit和TestNG使用的比较多,Mockito最近才开始使用. TestNG与JUnit的相同点 1. 使用anno ...

  7. java netty教程_Java NIO框架Netty教程(一) – Hello Netty

    先啰嗦两句,如果你还不知道Netty是做什么的能做什么.那可以先简单的搜索了解一下.我只能说Netty是一个NIO的框架,可以用于开发分布式的Java程序.具体能做什么,各位可以尽量发挥想象.技术,是 ...

  8. Java服务提供_JAVA 服务提供者框架介绍

    服务提供者框架是指:多个服务提供者实现一个服务,系统为客户端提供多个实现,并把他们从多个实现中解耦出来.服务提供者的改变对它们的客户端是透明的,这样提供了更好的可扩展性.例如,JDBC,JMS等就是用 ...

  9. java sl4j 日志_Java日志框架Slf4j+Log4j入门

    一.日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的日志 ...

最新文章

  1. cocos2dx 学习代码记录
  2. WP8模拟器启动失败解决方法
  3. Windows环境下IOCP和SELECT模型性能比较
  4. 【Python面试】 说说4种常用编码的区别?
  5. 2019-05-21 Java学习日记之String类型Demo
  6. hazelcast入门教程_Hazelcast入门指南第6部分
  7. mysql 安装gbk字符_mysql安装后添加gbk字符集的方法
  8. Cocos2d-x win7 + vs2010 配置图文详解(转)
  9. Linux通过源码编译安装程序;yum和源码安转软件包的区别
  10. 产品读书《赋能:打造应对不确定性的敏捷团队》
  11. 1088 旅行问题(单调队列优化)
  12. 怎么获取公众号二维码?
  13. Echarts实现可视化大屏
  14. 华为与android连接方法,华为手机怎样与电脑连接?安卓手机连接电脑的方法介绍...
  15. 福田欧曼ETX驱动桥的设计(说明书+8张CAD图纸+开题报告+任务书+中期检查表+答辩相关材料)
  16. 新式 AIMD 拥塞控制
  17. STM32 中断向量表的位置 、重定向
  18. 四种利用js导出Excel的方法(兼容IE6+、主流浏览器、支持复杂表头和合并单元格)
  19. 什么是 MEMORY.DMP 文件 ?
  20. 【STM32CubeIDE和ITM SWV实现printf调试信息的打印】

热门文章

  1. vs按f5没反应_《死神vs火影》中最受欢迎的游戏角色,仙鸣当之无愧上榜
  2. iOS直播(二)GPUImage音视频采集
  3. DOM---文档对象模型(Document Object Model)的基本使用
  4. 系统异常设计规范与原则
  5. QQ群功能设计与心理学
  6. 冒泡排序(java实现)
  7. Ubuntu开发用新机安装流程
  8. QQ爬虫-爬取QQ空间
  9. 如何将DynamoDB的数据增量迁移到表格存储
  10. Centos7.4 版本环境下安装Mysql5.7操作记录