首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Struts 开发的最佳实践(2)

Struts 开发的最佳实践(2)

最佳实践 2. 使用 Action 类处理请求通常,在使用这个 Struts 框架时,对于 JSP 组件请求应用程序执行的每个动作,应用程序都必须扩展 Struts 的 org.apache.struts.action.Action 以创建 Action 类。在处理请求时,单个的 Action 类与应用程序的 Model 层连接。
要实现这一最佳实践,Struts 建议您遵循以下步骤:
  • 通过扩展 org.apache.struts.action.Action 创建一个 Action 类,比如 BP2Action。
  • 通过扩展 BP2Action 在 Web 应用程序中创建所有其他 Action 类。
  • 在 BP2Action 类中创建一个方法 performTask(),就像在公共抽象类 ActionForward performTask(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 中一样。
  • 在 BP2Action 类中向应用程序添加一个或多个泛型方法,比如 serverSideValidate()。考虑以下因素后决定方法的访问修饰符:
    • 如果所有 Action 类都必须实现此方法,则让其为抽象。
    • 如果某些 Action 类提供一个特定的实现,则将此方法声明为受保护,并给它一个默认实现。
  • 在 BP2Action 类中,将方法 perform() 声明为 final。调用上述的泛型方法(通常在处理请求前调用该方法)。现在调用  中创建的方法 performTask()。
  • 在每个扩展 BP2Action 的 Action 类,添加具有特定实现的方法 performTask()。
优势这一实践有两个主要优势。首先,它避免了 Web 应用程序中每个 Action 类的冗余代码。其次,通过将 Action 类的行为集中在一起,使应用程序能够更多地控制通用的任务。
最佳实践 3. 使用 ActionForm 处理会话数据在一个基于 Struts 的 Web 应用程序中,每个 ActionForm 都扩展 org.apache.struts.action.ActionForm 类。这些 ActionForm 封装页面数据,并提供一个验证框架来验证请求参数。
大多数 Web 应用程序都在会话中保持数据,使其在整个应用程序过程中可用。这种最佳实践实现了这种 Web 应用程序特性。它允许方法 toSession() 和 fromSession() 将会话数据移动到表单数据或从表单数据移回。因此,它实现了在 Web 应用程序中保持会话数据。
要遵循一最佳实践,执行以下步骤:
  • 通过扩展 org.apache.struts.action.ActionForm 创建一个名为 BP3Form 的抽象类。
  • 在 BP3Form 类中,添加具有访问修饰语的方法,就像在公共抽象类 void toSession(SessionData sessionData) 和 void fromSession(SessionData sessionData) 中一样。
  • 在每个 ActionForm 类中,扩展 BP3Form 并实现这些抽象方法(表单数据通过它们传递到会话或从会话传回)。
  • 相应的 Action 类可以决定这些方法的调用顺序。例如,可以在决定 actionForward 之前调用  ActionForm 上的方法 toSession()。
何时使用这一实践这一实践最适用于:会话数据是单一对象和/或每个页操作或使用会话数据。
最佳实践 4. 有效处理异常传统地,当在 Action 类中发生应用程序异常时,异常首先被写入日志。然后此类创建一个 ActionError 并在合适的作用域中存储它。然后 Action 类再将控制转交给合适的 ActionForward。清单 3 展示了 Action 类是如何处理异常的。
清单 3. Action 类中的异常处理
1
2
3
4
5
6
7
8
9
10
try {
//Code in Action class
}
catch (ApplicationException e) {
//log exception
ActionErrors actionErrors = new ActionErrors();
ActionError actionError = new ActionError(e.getErrorCode());
actionErrors.add(ActionErrors.GLOBAL_ERROR, actionError);
saveErrors(request, actionErrors);
}




传统的异常处理过程在每个 Action 类中保存异常信息,而最佳实践 4 则在处理异常时避免冗余代码。
要使用这一最佳实践,Struts 建议您遵循以下步骤:
  • 通过扩展 org.apache.struts.action.Action 创建一个 Action 类,比如 BP4Action。
  • 通过扩展 BP4Action 在 Web 应用程序中创建所有其他 Action 类。
  • 在 BP4Action 中声明变量 ActionErrors actionErrors = new ActionErrors();。
  • 在 BP4Action 中创建方法 performTask(),就像在公共抽象类 ActionForward performTask(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, ActionErrors actionErrors) throws IOException, ServletException 中一样。
  • 在 BP4Action 中将方法 perform() 声明为 final。然后调用泛型方法(这些方法总是在处理请求前调用)。现在调用在前一个步骤中创建的 performTask()。
  • 在每个 Action 类中实现方法 performTask() 的同时(通过扩展 BP4Action),像清单 4 那样处理应用程序异常。
清单 4. 有效使用 ActionErrors
1
2
3
4
5
6
7
8
9
try       {
//Code in Action class
}
catch(ApplicationException appException) {
//Log exception
//Add error to actionErrors
actionErrors.add(ActionErrors.GLOBAL_ERROR,
   new ActionError(appException.getErrorCode()));
}




在 BP4Action 中,调用方法 performTask() 之后,通过 saveErrors(request, errors) 保存 ActionErrors。
优势这一实践主要的优势是:避免了每个处理 ActionErrors 的 Action 类中的代码冗余。
结束语对开发团队而言,构建易于维护的 Web 应用程序是一项非常具有挑战性的任务。使用 Struts 等成熟的框架有助于实现通常与构建应用程序相关的基础设施代码。Struts 框架提供了一组标准接口,用于将业务逻辑插入到应用程序中。此外,还提供了一种跨开发团队的一致机制,用于执行用户数据验证、屏幕导航等任务,以及用于简化开发屏幕的一组定制标记库。
返回列表