Struts2实战 读书笔记
2011年03月01日
1. Struts2:现代Web框架。
MVC设计模式有3个关注点:模型、视图和控制器。在Struts2中,它们分别通过动作(action)、结果(result)和过滤分配器(FilterDispatcher)实现。
Struts2组件:ActionContext 、拦截器、ValueStack、OGNL。
拦截器:拦截器是一种可以在请求处理之前或者之后执行的Struts2组件。它提供了一种在其中定义不同的工作流和横切任务的架构组件,以便能够简单地重用这些组件,并且能够与其它架构关注点分离。
ValueStack:Struts2使用ValueStack作为请求处理过程中所需的应用程序域数据的存储区域。数据被放入ValueStack为请求处理做准备。在动作执行中,数据在这里被操作。当结果呈现到相应页面时,数据从这里被读取。
ONGL:ONGL是一个用来应用、操作ValueStack中数据的强大的表达是语言。
ActionContext:ActionContext作为ValueStack的ThreadLocal的存储场所。是一个线程本地对象。
2. 初识Struts2
声明应用程序的架构有两种不同的方式:通过基于XML的配置文件或者通过Java注释。
虽然从技术上来说我们可以使用一个URL直接指向一个表单JSP,但是一个被广泛接受的最佳实践是,尽管有没有真正的处理,也使用动作来转发这些请求。
3. 使用Struts2动作
动作主要有3个作用。首先,就框架架构而言,动作最重要的作用是为给定请求封装需要做的实际工作。第二个主要作用是,在从请求到视图的框架自动数据传输中作为数据的携带者。最后,动作必须帮助框架决定哪个结果应该呈现请求响应中返回的视图。
在Struts1中,给定的动作类只有一个实例。Struts2通过为每一个映射到这个动作的请求创建一个新的动作实例解决这个问题,Struts2对象成为每个请求专有的数据转移对象。
ActionSupport类。它是一个提供了Action接口和其他几个有用接口的默认实例的便利类,提供了诸如数据验证、错误消息本地化等功能。
4. 使用拦截器追加工作流
框架不直接调用动作execute()方法,而是创建一个叫做ActionInvocation的对象,它封装了动作和一系列被配置在动作执行之前之后触发的拦截器。
如果我们不需要scoped-modelDriven拦截器,为什么还要把它放在栈中?这不是一个性能问题吗?我们认为不是。到现在为止,没有使用的拦截器不会那么影响性能。另外一个混乱的组织拦截器可能会迅速增加调试复杂度。最终,我们总是建议尽可能使用内建的最容易的途径,也就是defaultStack。
我们从ActionInvocation中得到当前动作的应用,并且检查它是否实现了UserAware接口。这个接口允许动作让用户对象自动注入到设置方法。这个技术(我们从框架的基于接口的注入方式复制而来)是让你的动作更简洁、更有效地一种强大方式。
拦截器实例在动作之间共享。虽然每一个请求都会创建动作的一个新实例,但是拦截器会重用。只是一个重要的暗示,拦截器是无状态的,不要在拦截器中存储与当前正在处理的请求相关的数据,这不是拦截器的职责。拦截器应该只把他的逻辑应用在请求数据上,你可以通过ActionInvocation访问这些已经方便地存储在不同对象上的数据。
5. 数据转移:OGNL和类型转换
从开发人员基于Struts2框架构建应用程序的角度看,OGNL包含两件事:表达式语言和类型转换器。
类型转换器必须都实现ognl.TypeConverter接口。利用转换用例的搜索,Struts2提供了一个开发人员编写自定义类型转换器时可以利用的便利基类。框架提供了org.apache.struts2.util.StrutsTypeConverter类作为自定义类型转换的便利扩展点。
6. 构建视图---标签
ActionContext包含了框架的请求处理过程可以访问的所有数据,包含内容从应用程序数据到绘画作用域或者应用程序作用域的映射。所有特定应用程序的数据(例如动作公开的属性),都储存在ValueStack上,它是ActionContext中的一个对象。所有的OGNL表达式都必须根据ActionContext包含的某一个对象求值。默认情况下,OGNL解析会选择ValueStack,但如果你愿意,可以指定其他的对象的名称,例如会话作用域。
Struts2接收到一个请求时,它立即创建一个ActionContext、一个ValueStack和一个动作对象。作为应用程序数据的承载者,动作被马上放到ValueStack中,以便框架可以通过OGNL访问它的属性。
8. 结果
强加于一个结果实现的唯一需求是他必须实现接口com.opensymphony.xwork2.Result这个接口。
9. 集成Spring和Hibernate/JPA
确定Spring管理的动作被配置为每次需要时都创建一个新的实例。默认情况下,Spring创建单例,每次这个对象被请求时重新传出这个单例对象。可以通过scope属性设置为prototype来强制Spring每次请求时都创建唯一的实例。
15. 高级主题
使用零排放指标单重复提交
Struts2使用以下逻辑完成这个工作。
(1) 准备以隐藏字段的方式嵌入唯一令牌的页面。
(2) 将这个唯一令牌隐藏在用户会话中。
(3) 将准备好的页面返回用户浏览器中。
(4) 在表单提交时,比较两个令牌(提交的页面中的令牌和隐藏在用户会话中的令牌)。
(5) 如果令牌不匹配,返回invalid.token结果。
发表评论
-
VisualTreeHelper知识点
2012-01-20 01:09 593VisualTreeHelper知识点 2010年08月16 ... -
加快RIA开发效率之Flex插件
2012-01-20 01:08 510加快RIA开发效率之Flex插 ... -
关于Java环境变量的学习
2012-01-20 01:08 631关于Java环境变量的学习 ... -
Wix使用笔记(七) 添加系统必备组件的安装程序
2012-01-20 01:08 1082Wix使用笔记(七) 添加系统必备组件的安装程序 2010年 ... -
如何配置Tomcat 5和IIS 5协同工作
2012-01-20 01:08 643如何配置Tomcat 5和IIS 5协同工作 2010年06 ... -
各种编程语言介绍
2012-01-19 08:58 624各种编程语言介绍 2011年07月09日 【IT168知 ... -
对比java和python
2012-01-19 08:57 911对比java和python 2011年04 ... -
Android开发之Android体系架构介绍
2012-01-19 08:57 998Android开发之Android体系架构介绍 15小时前 ... -
[强帖转载]C++、java、.net关系
2012-01-19 08:57 650[强帖转载]C++、java、.net关系 2011年03月 ... -
BusyBox 简化嵌入式 Linux 系统 (转载)
2012-01-19 08:57 561BusyBox 简化嵌入式 Linux 系统 (转载) 20 ... -
选择不对,努力白费。活着就要对得起父母和自己
2012-01-17 01:28 363选择不对,努力白费。活着就要对得起父母和自己 2011年10 ... -
转:“让大家两年不买房”,真有意思啊!!
2012-01-17 01:28 378转:“让大家两年不买房”,真有意思啊!! 2011年11月0 ... -
。。。
2012-01-17 01:27 552。。。 2011年11月19日 浣 -
经典人生哲理之成功法则
2012-01-17 01:27 534经典人生哲理之成功法则 2011年10月13日 澶辫触骞 ... -
第五卷《鏖战雁门(下)》第41章《良夜》
2012-01-15 20:08 578第五卷《鏖战雁门(下)》第41章《良夜》 2011年01月0 ... -
微小说。(5)
2012-01-15 20:08 470微小说。(5) 2011年12月21日 1、他鼓足勇气和 ... -
中华隋唐年间历史上真实的18条好汉(隋炀帝~唐高祖)
2012-01-15 20:08 775中华隋唐年间历史上真 ... -
隋书 卷四十七??列传第十二
2012-01-15 20:08 500隋书 卷四十七??列传第十二 2011年03月29日 韦 ... -
第六卷《霍邑争锋》第49章《谣言》
2012-01-15 20:08 695第六卷《霍邑争锋》第49章《谣言》 2011年01月17日 ... -
巧用hosts文件,解决急手问题
2012-01-11 12:18 534巧用hosts文件,解决急手问题 2011年03月01日 ...
相关推荐
namespace :对应与项目名称后面的"/"(例如Struts2_0100_Introduction后面的"/") (http://localhost:8080/Struts2_0100_Introduction/) 四、 标签 是用来解决重名的问题,例如当系统的前台和后台都有一个action...
这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用
资深开发人员深入剖析Struts2核心概念和组件 学习Struts不可不读 作者简介 作者:(美国)Donald Brown (美国)Chad Michael Davis (美国)Scott Stanlick 译者:马召 等 Donald Brown,Atlassian软件系统公司托管...
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!
学习Struts2第四天笔记
Struts 2实战 struts2 in Action
这个是本人自学struts2框架时的总结笔记,里面关于struts2的基本知识很是详尽,如果想要进阶的就不要看了,这只是struts2基础的笔记,个人学习用的,绝不掺假!
Struts2 实战 Struts 2 in Action
学习Struts2第三天笔记
Struts读书笔记Struts读书笔记Struts读书笔记Struts读书笔记Struts读书笔记Struts读书笔记Struts读书笔记Struts读书笔记
struts2学习笔记总结
修正了《Struts 2实战》人民邮电出版社样书版中的错页,并删除了广告页,非完美,但读起来会流畅些。。。
SSH2框架中的struts2的读书学习笔记,很适合初学者总结观看,初学者可以使用此文档进行框架初始~
Struts2_学习笔记Struts2_学习笔记Struts2_学习笔记
毕生学习struts2的学习笔记,整理了好久,实打实的干货
Struts2学习笔记,介绍了struts2的基础部分
Struts 2实战,Struts 2 in action 的中文版,pdf格式,讲的是Struts 2。此书是Struts 2的一本很经典的书。花几块钱在网上买的。。。。
本书是最新SSH框架中Struts2的技术,希望给大家帮助!