- 浏览: 188835 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
grzrt:
zkf55915 写道哥们怎么用啊
好久不用了,就是看帮助资 ...
淘宝MetaQ开源消息队列安装 -
zkf55915:
哥们怎么用啊
淘宝MetaQ开源消息队列安装 -
grzrt:
jinnianshilongnian 写道整这个了?
没有 看 ...
linux内核中链表的实现 -
jinnianshilongnian:
整这个了?
linux内核中链表的实现
Struts 是一种开源框架,可用来构建 Web 应用程序,它基于流行的 Model-View-Controller (MVC2) 设计范型。该框架构建在一些标准的技术之上,比如 Java Servlets、JavaBeans、ResourceBundles 和 XML,并且可提供灵活和可扩展的组件。Struts 以 ActionServlet
的形式实现了 Controller 层,并建议使用 JSP 标记库构建 View 层。Struts 通过 Action
类提供了围绕 Model 层的包装器。图 1 展示了基于 Model-View-Controller 设计的 Struts 框架。
|
|
首先,我们在最佳实践上下文中解释 Struts 组件,以及它们在 Web 应用程序开发中所起的作用。
应用程序的每个 Action
都会扩展 Struts 的 org.apache.struts.action.Action
类。这些 Action
类为应用程序的 Model 层提供了一个接口,充当围绕业务逻辑的包装器。每个 Action
类都必须向 perform()
方法提供其特定于用例的实现。perform()
方法经常返回类型 ActionForward
的一个值。
应用程序的 ActionForm
扩展了 Struts 的 org.apache.struts.action.ActionForm
类。ActionForm
是一些封装和验证请求参数的简单 JavaBean。要验证请求数据,ActionForm
的 validate()
方法必须给出一个特定于该情况的实现。ActionForm
作为运载工具,向 Action
类提供请求数据。一个 JSP 对象与各自的 ActionForm
对象相结合,构成应用程序的 View 层。在该层,几乎 JSP 对象的每个表单字段都映射到相应的 ActionForm
的属性。
JSP 定制标记库是用标记表示的一组行为的集合。这是 JSP Specification 1.1 的一个强大特性;它将其他应用程序层的表示区别了开来。这些库易于使用,而且可以以一种类似 XML 的方式来读取。只要尽量少地在其中使用 Java scriptlet,就可以轻松维护 JSP 组件。Struts 提供的 JSP 标记包括 HTML、逻辑和 bean 标记。
可以使用 ActionError
来支持异常处理。ActionError
捕捉应用程序异常,并将其传送给 View 层。每个异常都是一个 ActionError
实例的集合。ActionError
可以封装错误消息,而 Presentation 层中的 </html:errors>
可以呈现 ActionError
集合内的所有错误消息。
|
|
熟悉了 Struts 组件之后,就可以继续学习如何充分利用这一框架。首先,Struts 建议将每个 JSP 对象与一个 ActionForm
相关联,后者可以封装屏幕上显示的数据。可以通过 ActionForm
内的附加方法来访问 JSP 对象内的表单数据。清单 1 展示了 ActionForm
标记在 View 层中的传统方法。
<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
关联,用 beanBP1BForm
的属性替代BP1AForm
中的属性。现在就可以通过BP1BForm
访问BP1AForm
中的属性子集了。清单 2 展示了访问的方式。
<html:form action="/bp1"> <bean:define name="bp1AForm" property="bp1BForm" id="bp1B" type="com.ibm.dw.webarch.struts.BP1BForm" /> <html:text name="bp1B" property="subsetAtt1" /> </html:form > |
这种实践的主要优势是可用于多个 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
类。
|
|
通常,在使用这个 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
类的行为集中在一起,使应用程序能够更多地控制通用的任务。
|
|
在一个基于 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()
。
这一实践最适用于:会话数据是单一对象和/或每个页操作或使用会话数据。
|
|
传统地,当在 Action
类中发生应用程序异常时,异常首先被写入日志。然后此类创建一个 ActionError
并在合适的作用域中存储它。然后 Action
类再将控制转交给合适的 ActionForward
。清单 3 展示了 Action
类是如何处理异常的。
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 那样处理应用程序异常。
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 框架提供了一组标准接口,用于将业务逻辑插入到应用程序中。此外,还提供了一种跨开发团队的一致机制,用于执行用户数据验证、屏幕导航等任务,以及用于简化开发屏幕的一组定制标记库。
本文给出的 4 种最佳实践对您充分利用这种框架的特性十分重要。它们不仅能够提高代码的模块化程度和应用程序的可重用性,还能减少代码冗余。对于构建可扩展的 Web 应用程序,这是至关重要的。
发表评论
-
项目代码质量控制
2014-10-20 17:15 837在以后的开发项目时可以适当使用工具进行程序检查: 1、F ... -
WorkbookFactory 找不到
2013-11-08 10:46 1014在最近的POI版本中,poi-3.9.jar包中找不到Work ... -
记一次JVM GC日志分析
2013-03-08 21:36 1753这几天在准备升级JDK版本到1.6,对目前线上JVM(版 ... -
Eclipse 相同变量的高亮 及颜色
2013-02-18 17:26 1664在Eclipse/MyEclipse中如果不小心把变量的高 ... -
java jstack dump 线程 介绍 解释
2013-02-05 15:52 1216hi,all: 最近抽时间把JVM运行 ... -
[转载]JDMK 基本JMX配置( html adaptor)
2013-01-07 13:37 1738原文地址: JDMK 基本JMX配置( html adap ... -
JAVA中的继承分析
2012-12-27 11:43 5181为什么写这篇博客,之前对继承的理解知识大体理论上,最近 ... -
JVM学习之:虚拟机中的运行时栈帧总结(二)
2012-12-12 19:46 845在 JVM学习之:虚拟机 ... -
JVM学习之:虚拟机中的运行时栈帧总结(一)
2012-12-12 19:45 874每 个人都知道,各种各样的动画视频,都是由一帧一帧图片连 ... -
JAVA字符串占位符
2012-12-06 08:24 3228包 java.text.MessageFormat java ... -
copy项目是容易出现的错误--webAppRootKey错误
2012-12-05 21:18 733Tomcat 发布多个项目时抛的webAppRootKey错误 ... -
web.xml配置总结
2012-12-05 20:50 694一、关于webAppRootKey的定义 默 ... -
spring组件扫描<context:component-scan/>使用详解
2012-12-05 19:14 737关于spring自动检测组件的使用方式网上太多了,而且也不 ... -
spring组件扫描<context:component-scan/>使用详解 (
2012-11-28 08:57 721关于spring自动检测组件的使用方式网上太多了,而且也不 ... -
static class 静态类(Java)
2012-11-23 20:20 887一般情况下是不可以用static 修饰类的。 ... -
java jvm 调优实战
2012-11-13 10:01 8171.eclipse 打印gc日志 eclipse根目录 ... -
Zookeeper的一致性协议:Zab
2012-11-04 16:14 1241Zookeeper使用了一种称为 ... -
浅谈java内存模型
2012-10-30 19:29 855不同的平台,内存模 ... -
JVM分代垃圾回收策略的基础概念
2012-08-15 12:43 704由于不同对象的生命周期不一样,因此在JVM的垃圾回收策略中有分 ... -
bloom filter 的Java 版
2012-07-26 21:50 889属于转贴:http://www.cnblo ...
相关推荐
本文将探讨Struts开发的最佳实践,包括Action、ActionForm、JSP定制标记库以及ActionErrors的使用。 Action类是应用程序的核心部分,它扩展自Struts的`org.apache.struts.action.Action`。每个Action类代表一个具体...
### Struts2最佳实践与实例学习 #### 一、Struts2概述与基本概念 **Struts2**作为Java Web开发领域中一个重要的MVC框架,它的设计理念与实践方法为许多开发者提供了强大的支撑。本文旨在总结《Struts2权威指南》中...
在Struts开发中,需要配置struts.xml文件,该文件定义了Action(控制器)、Result(视图)和Action映射等关键组件。配置包括Action类的指定、结果页面的跳转规则以及拦截器的设置。 4. **Action与ActionForm**: ...
Struts2、Spring、Hibernate 高效开发的最佳实践
5. **文档**:包括API文档、用户指南、教程等,帮助开发者学习和理解Struts2的使用方法和最佳实践。 6. **配置文件**:如`struts.xml`,是Struts2应用的主要配置文件,定义了Action、结果类型、拦截器栈等。 7. **...
Struts2作为一款流行的Java Web框架,其在处理表单提交和实体对象绑定方面提供了强大的功能。本篇文章将深入探讨如何在...在实际应用中,结合良好的设计原则和最佳实践,可以确保Struts2项目在处理数据交互时表现出色。
9. **最佳实践**:提供关于编写可维护和可扩展的Struts1代码的建议,如避免硬编码,正确使用session和request对象等。 10. **升级到Struts2**:如果包含相关内容,可能会指导如何将现有的Struts1项目迁移到Struts2...
Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的企业级应用程序。它在Web开发领域中被广泛使用,特别是在MVC(模型-视图...在实际开发中,还需要结合具体需求和最佳实践,灵活运用这些知识。
11. **最佳实践**:提供了一系列开发建议,如代码组织、性能优化、安全注意事项等,以帮助开发者遵循良好的编程习惯。 12. **示例应用**:通过实际示例演示了上述知识点的应用,帮助读者更好地理解和掌握Struts2...
`apps`目录下可能包含一些示例项目或应用,这些项目可以帮助开发者理解Struts1的工作原理和最佳实践。解压后,你可以通过IDE导入这些项目,或者在命令行下使用`java webapp`命令部署到应用服务器,如Tomcat。示例...
Struts2是一款强大的Java web框架,它为开发者提供了一种结构化的、可扩展的方式来构建MVC(模型-视图-控制器)模式的应用程序。...在实际开发中,结合最佳实践和不断迭代,可以不断提升应用程序的质量和用户体验。
书中包含丰富的实际案例和最佳实践,帮助读者理解和掌握Struts 2在实际项目中的应用,提升开发技能。 总之,《精通Struts 2:Web 2.0开发实战》是一本深入浅出的教程,适合有一定Java基础的开发者学习,通过阅读...
Struts2是一个强大的Java web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。...在实际项目中,还需要结合其他技术和最佳实践,如错误处理、权限控制、国际化等,以构建出更加健壮和可维护的系统。
在J2EE(Java EE,即Java平台企业版)开发中,遵循最佳实践至关重要,因为它们可以帮助提升应用程序的性能、可维护性和可扩展性。以下是根据提供的内容所提炼的几个核心知识点: 1. **始终使用MVC模式** MVC...
10. **最佳实践与性能优化**:书中会介绍一些开发和部署Struts应用的最佳实践,以及如何进行性能调优,如减少不必要的请求、优化数据库操作等。 通过对《精通Struts:基于MVC的JavaWeb设计与开发》的学习,开发者...
Struts2 开发常见问题与解决方案 在使用 Struts2 进行开发时,开发者可能会遇到...此外,保持更新至最新稳定版本的Struts2框架,遵循最佳实践,以及使用IDE的代码检查和自动修复功能,都可以帮助减少这类问题的发生。
通过深入阅读这份"三大框架中文文档中的struts2.0开发手册",开发者不仅可以掌握Struts2.0的基础知识,还能学习到实际项目开发中的最佳实践,提升自己的编程技能。手册中可能还会包含实例代码、常见问题解答以及调试...