Struts:简介
Struts 是一种开源框架,可用来构建 Web 应用程序,它基于流行的 Model-View-Controller (MVC2) 设计范型。该框架构建在一些标准的技术之上,比如 Java Servlets、JavaBeans、ResourceBundles 和 XML,并且可提供灵活和可扩展的组件。Struts 以 ActionServlet
的形式实现了 Controller 层,并建议使用 JSP 标记库构建 View 层。Struts 通过 Action
类提供了围绕 Model 层的包装器。图 1 展示了基于 Model-View-Controller 设计的 Struts 框架。
图 1. Struts 和 MVC
Struts 组件概览
首先,我们在最佳实践上下文中解释 Struts 组件,以及它们在 Web 应用程序开发中所起的作用。
Action
应用程序的每个 Action
都会扩展 Struts 的 org.apache.struts.action.Action
类。这些 Action
类为应用程序的 Model 层提供了一个接口,充当围绕业务逻辑的包装器。每个 Action
类都必须向 perform()
方法提供其特定于用例的实现。perform()
方法经常返回类型 ActionForward
的一个值。
ActionForm
应用程序的 ActionForm
扩展了 Struts 的 org.apache.struts.action.ActionForm
类。ActionForm
是一些封装和验证请求参数的简单 JavaBean。要验证请求数据,ActionForm
的 validate()
方法必须给出一个特定于该情况的实现。ActionForm
作为运载工具,向 Action
类提供请求数据。一个 JSP 对象与各自的 ActionForm
对象相结合,构成应用程序的 View 层。在该层,几乎 JSP 对象的每个表单字段都映射到相应的 ActionForm
的属性。
JSP 定制标记库
JSP 定制标记库是用标记表示的一组行为的集合。这是 JSP Specification 1.1 的一个强大特性;它将其他应用程序层的表示区别了开来。这些库易于使用,而且可以以一种类似 XML 的方式来读取。只要尽量少地在其中使用 Java scriptlet,就可以轻松维护 JSP 组件。Struts 提供的 JSP 标记包括 HTML、逻辑和 bean 标记。
ActionErrors
可以使用 ActionError
来支持异常处理。ActionError
捕捉应用程序异常,并将其传送给 View 层。每个异常都是一个 ActionError
实例的集合。ActionError
可以封装错误消息,而 Presentation 层中的 </html:errors>
可以呈现 ActionError
集合内的所有错误消息。
最佳实践 1. 跨多个 ActionForm 重用数据
熟悉了 Struts 组件之后,就可以继续学习如何充分利用这一框架。首先,Struts 建议将每个 JSP 对象与一个 ActionForm
相关联,后者可以封装屏幕上显示的数据。可以通过 ActionForm
内的附加方法来访问 JSP 对象内的表单数据。清单 1 展示了 ActionForm
标记在 View 层中的传统方法。
清单 1. 使用 ActionForm
<html:form action="/bp1">
<html:text property="attrib1" />
</html:form >
|
这个 ActionForm
被称为 “BP1AForm
”,它包括属性 attrib1
及其 getter 和 setter 方法。在配置文件 struts-config.xml
中,行为 “/bp1
” 通过 name
属性映射到 bp1AForm
。这有助于在 JSP 中显示数据。
要实现这一最佳实践,Struts 建议您进行以下两个操作:
- 创建一个 JavaBean(
BP1BForm
),且其属性是 BP1AForm
属性的子集,还要创建这些属性的 getter 和 setter 方法。
- 通过将这个 bean 与
BP1AForm
关联,用 bean BP1BForm
的属性替代 BP1AForm
中的属性。现在就可以通过 BP1BForm
访问 BP1AForm
中的属性子集了。清单 2 展示了访问的方式。
清单 2. 访问 JSP 中的表单属性
要点
这种实践的主要优势是可用于多个 ActionForm
访问一个属性集。在遵循这一最佳实践的同时,需要记住以下几点:
- Struts 实现
<bean:define/>
标记。
- 当代码
<%@ taglib uri="struts-bean.tld" prefix="bean" %>
指向 struts-bean.tld
时,<bean:define/>
标记开始在 JSP 组件内工作。
- 由
ActionForm
扩展而来的 BP1AForm
验证框架必须验证 BP1BForm
的数据。
当在应用程序中创建 Action
类时,不需要直接扩展 org.apache.struts.action.Action
,可以通过扩展 org.apache.struts.action.Action
创建一个 Action
类(IntermediateAction
),用于处理应用程序中的常见事务。所有其他的 Action
类都扩展 IntermediateAction
类。
最佳实践 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。调用上述的泛型方法(通常在处理请求前调用该方法)。现在调用 步骤 3 中创建的方法 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 类中的异常处理
传统的异常处理过程在每个 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
在 BP4Action
中,调用方法 performTask()
之后,通过 saveErrors(request, errors)
保存 ActionErrors
。
优势
这一实践主要的优势是:避免了每个处理 ActionErrors
的 Action
类中的代码冗余。
结束语
对开发团队而言,构建易于维护的 Web 应用程序是一项非常具有挑战性的任务。使用 Struts 等成熟的框架有助于实现通常与构建应用程序相关的基础设施代码。Struts 框架提供了一组标准接口,用于将业务逻辑插入到应用程序中。此外,还提供了一种跨开发团队的一致机制,用于执行用户数据验证、屏幕导航等任务,以及用于简化开发屏幕的一组定制标记库。
本文给出的 4 种最佳实践对您充分利用这种框架的特性十分重要。它们不仅能够提高代码的模块化程度和应用程序的可重用性,还能减少代码冗余。对于构建可扩展的 Web 应用程序,这是至关重要的。
分享到:
相关推荐
Struts框架结构的Java Web开发技术基础与实践教程》上 Struts框架结构的Java Web开发技术基础与实践教程》上
Struts 2 是一个雅致的,可扩展的,用来建立企业级Java Web应用程序的框架。 Struts 2 不但注重程序的开发过程,更注重部署和后期维护。 Struts 2 来源于WebWork 2。 Struts 2 融合了Struts 和 WebWork的社区力量...
java Struts 1.x 框架 Web 开发 java Struts 1.x 框架 Web 开发
基于Struts框架的J2EEWeb应用的研究和实现.
本书第1章到第3章为入门篇,通过两个Struts应用实例,引导读者把握设计、开发和部署Struts应用的整体流程,充分体会Struts框架在开放大型、可扩展的Web应用方面发挥的优势。第4章到第7章深入探讨了Struts框架的核心...
研究和整合当前最流行的轻量级Struts,Spring,Hibernate(SSH)框架技术,Struts为构建Web应用程序提供了一个稳定、成熟的MVC框架,Hibernate是目前最流行的持久层解决方案,Spring为J2EE应用程序开发提供集成的框架。...
从Struts应用开发框架转移到Struts 2 WEB框架 教程
《开发者突击:Java Web主流框架整合开发(J2EE+Struts+Hibernate+Spring)》详细介绍了Java Web软件架构中的各种开发技术。主要内容包括:以MySQL为数据库、Tomcat为Web服务器、Eclipse为开发工具、CVS为版本控制工具...
去年2013年6月8日~2013年6月21日开发的。因为只有两个星期,所以开发的不是很好。SQLServer数据库2003还是2005忘了,但ppt、代码、日志、数据库、项目文档全部都有。希望对初学都有用,我们也是刚学框架,不好还请...
基于MVC struts框架开发的小型WEB里面用到了很多struts框架的技术,是一个很好的学习案例
基于Struts框架的Java Web应用开发研究.pdf
浅析Struts框架下的Java Web应用.pdf
本书分为6大部分,共33章,介绍了Struts1框架、Hibernate框架、Spring框架和Struts2框架的开发环境配置、框架技术基础,Struts1框架和Spring框架的整合,Struts1框架和Hibernate框架的整合,Struts1框架、Hibernate...
实战struts框架,成功实现mvc结构的web应用。期刊精选。
正是MVC模式在交互系统开发所体现的强大优势,被开发人员逐步引入J2EE体系之中,成为J2EE进行交互式应用开发时,特别是WEB应用开发时一个非常重要的设计模式。 基于上述理论,本文重点讨论了基于MVC模式的Struts框架...
以Struts框架为基础的Java Web应用开发分析
梁胜彬等编著的《java web应用开发与实践》结合作者多年的教学与软件开发经验,依据教学大纲,面向技术发展方向,选取主流的java web开发技术和开发工具,内容涵盖了jsp基础、jdbc、setvlet、filter、listener、mvc...
以Struts框架为基础的Java Web应用开发分析.pdf
Struts+Spring+Hibernate框架技术在Web开发中的研究与应用
本书第1章到第3章为入门篇,通过两个Struts应用实例,引导读者把握设计、开发和部署Struts应用的整体流程,充分体会Struts框架在开放大型、可扩展的Web应用方面发挥的优势。第4章到第7章深入探讨了Struts框架的核心...