一、Struts2 的简介
1. 虽然 struts2 号称是一个全新的框架,但是这仅仅是相对于 struts1 而言的.
2. Struts2 和 struts1 相比,确实有很多革命性的改进,但是并不是新发布的新框架
3. 是另一个框架 WebWork 基础上发展起来的.
4. Struts2 没有继承 struts1 的血统,而是继承 webWork 的血统.
5. struts2是 WebWork 的升级,而不是一个全新的框架,稳定性和性能等各方面都有很好的保证
6. 而且吸收了 struts1 和 WebWork 两者的优势,因此是一个非常值得期待的框架
二、 Apache Struts2 是一个可扩展的 Java EE WEB框架. 框架设计的目标贯穿整个开发的周期
三、 Struts2 和 Struts1 的不同
1. Action类:
i. Struts1 要求 Action 类继承一个抽象基类. Struts1 的一个普遍的问题是使用抽象类编程而不是接口
ii. Struts2 Action 类可以实现一个 Action 接口,也可实现其他的接口,使可选和定制的服务称为可能.
iii. Struts2 提供了一个 ActionSupport 基类去实现常用的接口; Action接口不是必须的,任何有 execute 标识的POJO
对象都可以用作 Struts2 的 Action 对象
2. 线程模式:
i. Struts1 Action 是单例的模式并且必须是线程安全的,因为仅有 Action 的一个实例来处理所有的请求.单例的策略限制了
ii. Struts1 Action 能做的事情,并且要在开发的时候特别的小心. Action 资源必须是线程安全或者同步的
iii. Struts2 Action 对象为每一个请求产生一个实例,因此没有线程安全的问题
3. Servlet依赖:
i. Struts1 Action 依赖于 Servlet API,因为当一个Action被调用 HttpServletRequest 和 HttpServletResponse 被传递给 execute() 方法
ii. Struts2 Action 不依赖于容器,允许 Action 脱离容器单独的被测试.如果需要的话 Struts2 Action 仍然可以访问初始的 request 和 response
iii. 但是,其他的元素减少或者消除了直接访问 HttpServletRequest 和 HttpServletResponse 的必要性
4. 可测性:
i. Struts1 Action 测试的一个主要的问题是 execute 方法暴露了 Servlet API (使得测试要依赖容器).一个第三方的扩展
ii. Struts TestCase -- 提供了一套 Struts1 的模拟对象 (来进行测试)
iii. Struts2 Action 可以通过初始化, 设置属性,调用方法来测试 "依赖注入" 支持也使得测试更加的容易
5. 捕获输入:
i. Struts1 Action 使用ActionForm对象来捕获输入.所有的 ActionForm 必须继承一个基类.因为其他的JavaBean 不能用作
ii. ActionForm ,开发者经常创建多余的类捕获输入.动态的 Bean (DynaBeans) 可以作为创建传统的ActionForm选择,但是,开发者可能是在重新描述(创建)已经存在的 JavaBean
iii. 会导致冗余的 JavaBean)
iv. Struts2 Action 直接使用 Action 属性作为输入的属性,消除了对第二个输入对象的需求. Action 属性能够通过web页面上的
taglibs 访问. Struts2 也支持 ActionForm 模式
6. 表达式语言:
i. Struts1 整合了 JSTL ,因此使用 JSTL EL .这种EL 的基本的对象图遍历,但是对集合和索引属性的支持很弱
ii. Struts2 可以使用 JSTL ,但是也支持一个更强大的和灵活的表达式语言 -- "Object Graph Notation Language" (OGNL)
7. 绑定值到页面 (view) :
i. Struts1 使用标准 JSP 机制把对象绑定到页面来访问
ii. Struts2 使用 "ValueStack" 技术,使 taglib 能够访问值而不需要把你的页面 (view) 和对象绑定起来
iii. ValueStack 策略允许通过一些列的名称相同但是类型不同的属性重用页面 (view)
8. 类型的转换 :
i. Struts1 ActionForm 属性通常都是 String 类型的. Struts1使用 Commons-Beanutils 进行类型的转换,每个类一个转换器,对每一个实例来说是不可配置的
ii. Struts2 使用OGNL 进行类型的转换. 提供基本的和常用的对象的转换器
9. 校验 :
i. Struts1 支持在 ActioNForm 的 validate 方法中手动的校验,或者通过 Commons Validator 的扩展来校验.同一个类可以有不同的校验内容,但不能校验子对象
ii. Struts2 支持通过 validate 方法和 XWork 校验框架来进行校验. XWork 校验框架使用为属性类类型定义的校验和内容校验
来支持 chain 校验子属性
10. Action 执行的控制 :
i. Struts1 支持每一个模块有单独的 Request Processors (生命周期);但是模块中的所有的 Action 必须功效那个相同的生命周期
ii. Struts2 支持通过拦截器堆栈 (Interceptor Stacks) 为每一个 Action 创建不同的生命周期.
iii. 堆栈能够根据需要和不同的 Action 一起使用
四、 Eclipse 中继承 Struts2
1. commons-logging-1.0.4.jar
Struts2框架的日志包
2. freemarker-2.3.8.jar
Struts2的 UI 标签的模板
3. ognl-2.6.11.jar
对象导航语言包
4. struts2-core.2.0.11.jar
Struts框架的核心包
5. xwork-2.0.4.jar
XWork类库,Struts2 基于此构建
五、案例
1. 基于 Struts2 创建一个简单的登陆项目
2. 导入 Struts2 核心支持包
3. 在 web.xml 中配置 FilterDispatcher
4. 开发 DAO
5. 开发 action
6. 编写前台显示的页面
7. 创建 struts.xml
六、 Struts2 处理用户输入信息
1. 利用 action 类的属性接受用户输入
2. 利用领域对象接受用户输入
3. 使用 ModelDriver 模式接受用户输入
posted on 2010-02-22 09:20
Werther 阅读(655)
评论(0) 编辑 收藏 所属分类:
20.Struts