`

Struts的那些东东

阅读更多

【转载】

 

1.Struts1和Struts2的比较

Action 类 
Struts1.x要求 Action类要扩展自一个抽象基类。 Struts1.x的一个共有的问题是面向抽象类编程而不是面向
接口编程。 
Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。Struts2提
供一个名叫ActionSupport 的基类来实现一般使用的接口。 当然, Action接口不是必须的。 任何使用execute
方法的POJO对象可以被当作Struts 2的Action对象来使用。

 

线程模型 
Struts1.x Action类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且
给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。 
Struts2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。 (实践中,servlet容器给每一

个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题) 。

 

Servlet 依赖 
Struts1.x 的 Action 类依赖于 Servlet API ,当 Action 被调用时,以 HttpServletRequest 和
HttpServletResponse作为参数传给execute方法。 
Struts2 的 Action 和容器无关。Servlet 上下文被表现为简单的 Maps,允许 Action 被独立的测试。Struts2
的 Action 可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问
HttpServletRequest 或HttpServletResponse。

 

易测性 
测试Struts1.x的主要问题是execute方法暴露了Servlet API这使得测试要依赖于容器) 。第三方的扩展,
如Struts TestCase,提供了一套Struts1的模拟对象(来进行测试) 。 
Struts2的Action可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也是测试变得更简单。
 
捕获输入 
Struts1.x使用 ActionForm对象来捕获输入。象Action一样,所有的ActionForm必须扩展基类。因为其他
的 JavaBean 不能作为 ActionForm 使用,开发者经常创建多余的类来捕获输入。DynaBeans 可以被用来
作为替代 ActionForm 的类来创建。但是,开发者可能是在重新描述(创建)已经存在的 JavaBean(仍然会
导致有冗余的javabean) 。 
Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)
属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm 模式。
rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib 对POJO输
入对象的引用。 
 
表达式语言 
Struts1.x整合 JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合和
索引属性的支持很弱。 
Struts2 使用 JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language"
(OGNL)。 
 
将值绑定到页面 
Struts1.x使用标准JSP机制来绑定对象到页面上下文。 
Struts2 使用“ValueStack”技术,使 taglib 能够访问值而不需要把你的页面(view)和对象绑定起来。
ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view) 。 
 
类型转换 
Struts1.x的ActionForm属性经常都是String。Struts 1.x使用Commons-Beanutils来进行类型转换。转换
每一个类,而不是为每一个实例配置。 
Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。 
 
验证 
Struts1.x支持在 ActionForm 的 validate 方法中手动校验,或者通过 Commons Validator 的扩展来校验。
同一个类可以有不同的校验内容,但不能校验子对象。 
Struts2 支持通过 validate 方法和 XWork 校验框架来进行校验。XWork 校验框架使用为属性类类型定义的

校验和内容校验,来支持chain校验子属性 
 
Action 执行控制 
Struts1.x支持每一个模块有单独的Request Processors(生命周期) ,但是模块中的所有Action必须共享
相同的生命周期。 
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需
要和不同的Action一起使用。

 

 

2.Struts2的使用

运行 Struts 2 需要下列的条件:Servlet API 2.4,JSP API 2.0,Java 5(或者使用 j4
版本,运行于 JDK1.4) 。当然换句话说用 Tomcat 5 或者更高版本就没有任何问题了。
 Struts 2 的执行流程大致如此所示:Web 服务器启动解析 struts.xml,初始化消息文件,
Action 路径映射等资源,初始化框架→用户请求 XXX.action →Struts 2 过滤器使用对象工
厂(Object Factory,可以是自带或者是 Spring)创建 Action 类的示例 →执行 IOC和拦截器
(包括解析表单参数,文件上传,将解析结果注入 Action 对象) →调用 Action 中用户编
写的业务方法 →根据返回的结果(Result)路径转向视图层 →视图层进行显示(包括调用标
签库等) 。
  关于其底层结构,从网上搜集到的一些资料认为:WebWork 2,实际上是 Webwork +
XWork 的总集,Webwork1.x 版本中,整个框架采用了紧耦合的设计(类似 Struts 1.x) ,
而 WebWork 2.0 之后,Webwork 被拆分为两个部分,即 Webwork 2.x +XWork 2.x。当
一个请求发起后,从请求的路径名中解析出对应的 Action 名称,然后 Webwork 2.x框架会
遍历 HttpServletRequest、HttpSession、ServletContext 中的数据,并将其复制到内部的
Map 实现中,至此之后,所有数据操作均在此 Map 结构中进行,从而将内部数据结构与
Servlet API 相分离。至此,Webwork 的工作阶段结束,数据将传递给 XWork 进行下一步
处理。从这里也可以看到 Webwork 和 XWork 之间的切分点,Webwork 为 XWork 提供
了一个面向 Servlet 的协议转换器
将 Servlet 相关的数据转构转换成 XWork 所需要的通
用数据格式,而 XWork将完成实际的服务调度和功能实现
。这样一来,以 XWork 为核心,
只需替换外围的协议转换组件,即可实现不同技术平台之间的切换。那么 Struts 2 呢,就是
这样一个 Struts 2核心平台+XWork 的实现, 其中的 XWork 部分执行和 Servlet API 无关的
流程处理,而 Struts 2的核心层则提供将 Servlet 层提供的数据进行独立封装的过程
,进而
XWork 基于这些数据进行操作,这样就实现了一个完整的开发框架。XWork 相当于一个插
件一样和现有框架组合,构成一个完整的流程处理+Servlet 操纵框架。所以大家会奇怪的
看到 Struts 2 一共有两个核心 jar 文件:struts2-core-2.0.11.jar 和 xwork-2.0.4.jar,而且更
让人奇怪的是前一个文件中的包定义是 org.apache.struts2,而后一个文件中的则是
com.opensymphony.xwork2,其原因就在于此。

 

 

 

 

分享到:
评论

相关推荐

    struts+spring +hibernate整合的东东

    struts+spring +hibernate整合的东东 pdf文档

    struts 开发超值实例

    从不知道struts是什么东东开始,到现在能用她开发应用,一路走来,有汗水,也有喜悦。这里要感谢网上那些不留名的牛人朋友,没有你们,我可能还是当初那个小菜鸟。这里是当初陪我一起走过的例程,希望能do需要的朋友...

    struts_helloapp

    在描述中,“顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶东东”可能是因为输入错误,并没有提供实际的信息,所以我们主要依据标题和标签来理解这个项目。 标签 "struts 简单hello" 暗示这个应用可能是用来...

    (3.0版本)自己写的struts2+hibernate+spring实例

    现在ajax都已经不是什么新鲜东东了..我在里面配的是dwr..(这个简单些..其他的我看着晕...).没有自己写页面输出.我使用的table组件是:eXtremeComponents.自我感觉这个组件比较好.所以把这个组件配入进来了.随着这篇...

    struts spring ibatis实例

    经过了一个上午的努力,最终搞定这个东东, 现在共享给需要的朋友. 附件中有代码,下载直接导入eclipse即可, 注意还要执行db脚本,数据库为mysql. 本例中使用了两种不同的方式整合,请注意区分. 偶现在对这些框架的...

    自己写的struts+hibenate+mysql实现的博客系统

    自己hibernate结课后用struts+hibenate写的博客系统,主要的技术:1、ajax实现jsp与action后台的数据交换,实现异步数据操作 2、jQuery的页面效果比较好3、照片批量上传,删除功能还有很多很多的功能在这儿就不一一...

    Myeclipse6.5GA struts1.2 spring2.5 hibernate3.2 整合实例(非常详细).docx

    Myeclipse6.5GA struts1.2 spring2.5 hibernate3.2 整合实例(非常详细).docx 需要OFFICE2007,如果是2003的话需要装个什么东东,兼容软件才能看。

    达内Struts课件

    提供整版达内课件,(Java课件.rar/达内EJB课件.rar/达内servlet课件.rar/达内OAOD课件.rar/达内Hibernate课件.rar/达内JSP课件.rar/达内Spring课件.rar/达内Struts课件.rar)如需其它课件和有用的东东请去我空间下载,...

    Struts学习笔记

    在学习的过程中的一些东东,个人觉得比较重要的

    Tiles 框架技术,非常好的一个东东,和大家共享

    这个框架是由Apache软件基金会旗下的Struts项目所发展出来的,最初是作为Struts的一个扩展,但现在已经独立成为一个功能丰富的视图框架。Tiles框架的核心理念是将网页分解为可复用的部分,也就是“Tiles”,然后通过...

    jstl,方便使用,最方便的东东

    在实际项目中,JSTL可以和Spring MVC、Struts等框架结合使用,进一步提高开发效率和代码质量。例如,`<c:url>`和`<c:param>`标签可以用来构建URL,而`<c:import>`可以引入外部资源。 为了使用JSTL,你需要在项目的...

    Ajax + servlet 实现上传进度条显示

    利用Ajax和Servlet实现文件上传,用来commons-fileupload和commons-io两个... 第一次上传这方面的东东希望大家顶顶呵呵^^ 另外有那位能给在下给个Struts2+ajax实现该功能的例子请邮到sky-bq@163.com里。不胜感激

    Hibernate实践例子程序

    一个最简单的Hibernate project(不涉及Struts, Tomcat, XDoclet,JBoss等东东)必须的几个东东: 1. Hibernate工具包。 2. JDBC数据库连接驱动。以mysql为例,mysql-connector-java-3.1.×-bin.jar。 3. 配置...

    达内Hibernate课件.rar

    提供整版达内课件,(Java课件.rar/达内EJB课件.rar/达内servlet课件.rar/达内OAOD课件.rar/达内Hibernate课件.rar/达内JSP课件.rar/达内Spring课件.rar/达内Struts课件.rar)如需其它课件和有用的东东请去我空间下载,...

    达内JSP课件

    提供整版达内课件,(Java课件.rar/达内EJB课件.rar/达内servlet课件.rar/达内OAOD课件.rar/达内Hibernate课件.rar/达内JSP课件.rar/达内Spring课件.rar/达内Struts课件.rar)如需其它课件和有用的东东请去我空间下载,...

    达内Spring课件

    空间资源共享,提供整版达内课件,(Java课件.rar/达内EJB课件.rar/达内servlet课件.rar/达内OAOD课件.rar/达内Hibernate课件.rar/达内JSP课件.rar/达内Spring课件.rar/达内Struts课件.rar)如需其它课件和有用的东东请...

    达内Servlet课件

    空间资源共享,提供整版达内课件,(Java课件.rar/达内EJB课件.rar/达内servlet课件.rar/达内OAOD课件.rar/达内Hibernate课件.rar/达内JSP课件.rar/达内Spring课件.rar/达内Struts课件.rar)如需其它课件和有用的东东请...

    开源UML项目Udoc简介UDoc-1-005.rar

    由于对开源的热爱,经常需要看开源的东东,但是像Struts那样的开源框架来说,从代码入手的话,却像一头扎进了大海, 出不来。 经常想能获取到官方的文档资料, 比如说类关系图等,这样的话,可以对整个系统的架构很...

    Spring2中文参考手册

    很好的东东! 前言 即使拥有良好的工具和优秀技术,应用软件开发也是困难重重。应用开发往往牵扯到方方面面,每件事情都难以控制,而且,开发周期也很难把握(除非它的确是一个重量级的复杂应用,倒也有情可原)。...

Global site tag (gtag.js) - Google Analytics