简述Struts2的用途和优势

简述Struts2的用途和优势,第1张

Struts2 是一个相当强大的Java Web开源框档郑判架,是一个基于POJO的Action的MVC Web框架。它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。Struts2现在在Java Web开发界的地位可以说是大红大紫,从开发人员的角度来分析,Struts2之所以能够如此的深入开发人员之心,与其优良的设计是分不开的。 

下面我从使用Struts2一年之久的经验来分析一下Struts2的优点:  

1.Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程。 我在项目开发过程中,一个具体的功能的开发流程是:拿到一个具体的功能需求文档和设计好的前台界面(在开发中我不负责设计页面),分析需要从前台传递哪些参数,确定参数的变量名称,在Action中设置相应的变量,这些参数在前台如何显示,并将页面上的一些控件适当使用Struts2提供的服务器端控件来代替,编写Action对应的方法来完成业务逻辑,最后,做一些与配置文件相关的设置。当然实际的开发比这个过程要复杂,涉及到丛埋数据库,验证,异常等处理。但是使用Struts2进行开发,你的关注点绝大部分是在如何实现业务逻辑上,开发过程十分清晰明了。

2.使用OGNL进行参数传递。 

OGNL提供了在Struts2里访问各种作用域中的数据的简单方式,你可以方便的获取Request,Attribute,Application,Session,Parameters中的数据。大大简化了开发人员在获取这些数据时的代码量。 

3.强大的拦截器 

Struts2 的拦截器是一个Action级别的AOP,Struts2中的许多特性都是通过拦截器来实现的,例如异常处理,文件上传,验证等。拦截器是可配置与重用的,可以将一些通用的功能如:登录验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。在我实现的的一Web项目中,就是使用Struts2的拦截器来完成了系统中的权限验证功能。 

4.易于测试 

Struts2的Action都是简单的POJO,这样可以方便的对Struts2的Action编写测试用例,大大方便了Java Web项目的测试。 

5.易于扩展的插件机制 

在Struts2添加扩展是一件愉快而轻松的事情,只需要将所需要的Jar包放到WEB-INF/lib文件夹中,在struts.xml中作一些简单的设置就可以实现扩展。常用的Struts2的扩展可以通过这个链接找到: 

http://cwiki.apache.org/S2PLUGINS/home.html 

6.模块化 

Struts2已经把模块化作为了体系架构中的基本思想,可以通过三种方法来将应用程序模块化: 

将配置信息拆分成多个文件 

把自包含的应用模块创建为插件 

创建新的框架特性,即将与特定应用无关的新功能组织成插件,以添加到多个应用中去。 

7.全局结果与声明式异常 

为应用程序添加全局的Result,和在配置文件中对异常进行处理,这样当处理过程中出现指定异常时行改,可以跳转到特定页面,这一功能十分实用。

弊丛 一 什么是Struts ?

虽然Struts 号称是一个全新的框架 但这仅仅是相对Struts 而言 Struts 与Struts 相比 确实有很多革命性的改进 但它并不是新发布的新框架 而是在另一个赫赫有名的框架 WebWork基础上发展起来的 从某种程度上来讲 Struts 没有继承Struts 的血统 而是继承WebWork的血统 或者说 WebWork衍生出了Struts 而不是Struts 衍生了Struts 因为租数樱Struts 是WebWork的升级 而不是一个全新的框架 因此稳定性 性能等各方面都有很好的保证 而且吸收了Struts 和WebWork两者的优势毕高 因此 是一个非常值得期待的框架

Apache Struts 是一个优雅的 可扩展的JAVA EE web框架 框架设计的目标贯穿整个开发周期 从开发到发布 包括维护的整个过程

Apache Struts 即是之前大家所熟知的WebWork 在经历了几年的各自发展后 WebWork和Struts社区决定合二为一 也即是Struts

Struts 和Struts 的不同

Action 类

◆Struts 要求Action类继承一个抽象基类 Struts 的一个普遍问题是使用抽象类编程而不是接口

◆Struts Action类可以实现一个Action接口 也可实现其他接口 使可选和定制的服务成为可能 Struts 提供一个ActionSupport基类去实现 常用的接口 Action接口不是必须的 任何有execute标识的POJO对象都可以用作Struts 的Action对象

线程模式

◆Struts Action是单例模式并且必须是线程安全的 因为仅有Action的一个实例来处理所有的请求 单例策略限制了Struts Action能作的事 并且要在开发时特别小心 Action资源必须是线程安全的或同步的

◆Struts Action对象为每一个请求产生一个实例 因此没有线程安全问题 (实际上 servlet容器给每个请求产生许多可丢弃的对象 并且不会导致性能和垃圾回收问题)

Servlet 依赖

◆Struts Action 依赖于Servlet API 因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法

◆Struts Action不依赖于容器 允许Action脱离容器单独被测试 如果需要 Struts Action仍然可以访问初始的request和response 但是 其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性

可测性

◆测试Struts Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器) 一个第三方扩展——Struts TestCase——提供了一套Struts 的模拟对象(来进行测试)

◆Struts Action可以通过初始化 设置属性 调用方法来测试 依赖注入 支持也使测试更容易

捕获输入

◆Struts 使用ActionForm对象捕获输入 所有的ActionForm必须继承一个基类 因为其他JavaBean不能用作ActionForm 开发者经常创建多余的类捕获输入 动态Bean(DynaBeans)可以作为创建传统ActionForm的选择 但是 开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)

◆ Struts 直接使用Action属性作为输入属性 消除了对第二个输入对象的需求 输入属性可能是有自己(子)属性的rich对象类型 Action属性能够通过web页面上的taglibs访问 Struts 也支持ActionForm模式 rich对象类型 包括业务对象 能够用作输入/输出对象 这种ModelDriven 特性简化了taglib对POJO输入对象的引用

表达式语言

◆Struts 整合了JSTL 因此使用JSTL EL 这种EL有基本对象图遍历 但是对集合和索引属性的支持很弱

◆Struts 可以使用JSTL 但是也支持一个更强大和灵活的表达式语言—— Object Graph Notation Language (OGNL)

绑定值到页面(view)

◆ Struts 使用标准JSP机制把对象绑定到页面中来访问

◆Struts 使用 ValueStack 技术 使taglib能够访问值而不需要把你的页面(view)和对象绑定起来 ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)

类型转换 ◆Struts ActionForm 属性通常都是String类型 Struts 使用Commons Beanutils进行类型转换 每个类一个转换器 对每一个实例来说是不可配置的

◆Struts 使用OGNL进行类型转换 提供基本和常用对象的转换器

校验 ◆Struts 支持在ActionForm的validate方法中手动校验 或者通过Commons Validator的扩展来校验 同一个类可以有不同的校验内容 但不能校验子对象

◆Struts 支持通过validate方法和XWork校验框架来进行校验 XWork校验框架使用为属性类类型定义的校验和内容校验 来支持chain校验子属性Action执行的控制 ◆Struts 支持每一个模块有单独的Request Processors(生命周期) 但是模块中的所有Action必须共享相同的生命周期

◆Struts 支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期 堆栈能够根据需要和不同的Action一起使用

Struts 的工作流程图

工作流程图

工作流程当接收到一个request Interceptor做一些拦截或者初始的工作当外部的ervletrequest到来时初始到了servlet容器 传递给一个标准的过滤器链ActionContextCleanUp这个在集成插件方面非常有用Other filters(SitMesh etc)

调用FilterDispatecher会去查找相应的ActionMapper如果找到了相应的ActionMapper它将会将控制权限交给ActionProxy ActionProxy将会通过ConfigurationManager来查找配置struts xml下一步将会 通过ActionInvocation来负责命令模式的实现(包括调用一些拦截Interceptor框架在调用action之前)

一旦action返回 会查找相应的Result Result类型可以是 jsp或者freeMark 等这些组件和ActionMapper一起返回给请求的url(注意拦截器的执行顺序)

lishixinzhi/Article/program/Java/ky/201311/28090

Struts是最早的MVC开源框架,它是哗陵耐apache组织基于MVC模式开发的开源的单点控制的web应用框架(framework)。

Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages 、Servlet、标签库以及面向对象的技术水准。Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。这个框架之所以叫"Struts",是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷时候的基础支撑。这也是一个解释Struts在开发Web应用程序中所扮演的角色的精彩描述。当建立一个物理建筑时,建筑工程师使用支柱为建筑的每一层提供支持。同样,软件工程师使用Struts为业务应用的每一层提供支持。它的目的是为了帮助我们减少在运用MVC设计模汪枣型乱春来开发Web应用的时间。我们仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12448252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存