`
nfq57nfq
  • 浏览: 14786 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Struts2实战 读书笔记

 
阅读更多

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结果。 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics