随笔-40  评论-66  文章-0  trackbacks-0
和女主角Action 对象共舞

什么是Action?
和常规的web 应用相比,Struts Action 类工作起来就象一个小型的servlet。在大多数Java
应用中,诸如访问业务层的任务、错误处理等任务均是由servlet 承担的。在一个 Struts 应
用中,servlet 扮演着一个分派器的角色。而Action 对象则干实际的工作。象 servlets 一样,
Action 对象是多线程的。每个应用只需要一个Action 类的实例。

Action做些什么?

一个典型的Action 的职责通常是:

􀂄 ■校验前提条件或者声明
􀂄 ■调用需要的业务逻辑方法
􀂄 ■检测其它处理错误
􀂄 ■将控制路由到相关视图


检验输入: Action 需要做的就是确认ActionForm 是否是需要的类型。

调用逻辑业务:

Action 类是HTTP 与应用系统中其它部分之间的适配器。最重要的是要避免将业务逻辑放入
Action 之中。Action 类应该只是简单地收集业务方法需要的数据并传递它到具体的业务对
象。如果你同时在编写业务类和Action 类,可能会受到要将它们编写在一起的诱惑。一定
要抵挡这种诱惑,并且将业务方法放入Action 可调用的单独的类之中。Java 虚拟机(JVM)
针对这种方法调用作了优化;性能损失可以忽略不计。
同时你也得到了一些设计上的优势

Action检测错误:
Struts具有一个设计良好的错误处理系统,允许你可以:
􀂄■ 同时截获几个错误
􀂄■ 在请求中传递错误数据包
􀂄■ 显示本地化信息

这个处理流程涉及到两个对象 (ActionErrors 和 ActionError) 和一个注册错误的工
具方法(saveErrors) 。其它两个对象 (MessageResources 和 一个定制标签)则用来显
示错误信息

注册错误
总体流程归结为:
􀂄1 创建一个空的ActionErrors 实例
􀂄2 在错误发生时,为错误信息添加关键字;
􀂄3 检查是否添加了某些信息
􀂄4 保存ActionErrors 集合对象到请求中
􀂄5  转发控制到错误页面以显示信息
􀂄6  否则,正常继续

例如
ActionErrors errors = new ActionErrors();
try {
// * 调用业务对象 *
}

catch (ModelException e) {
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.detail",e.getMessage()));
}

if (!errors.empty()) {
saveErrors(Request, errors);
return (mapping.findForward("error"));
}

// * 正常继续 *

posted on 2006-12-14 10:32 Super·shen BLOG 阅读(410) 评论(0)  编辑  收藏 所属分类: JAVA技术

只有注册用户登录后才能发表评论。


网站导航: