版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Best practices for Struts developmentPalaniyappan Thiagarajan, Pagadala SureshStruts: A brief introductionStruts, an open source framework you can use to build Web applications, is based on the popular Model-View-Controller (MVC2) design paradigm. The framework is built upon standard technologies li
2、ke Java Servlets, JavaBeans, ResourceBundles, and XML, and it provides flexible and extensible components. Struts implements the Controller layer in the form of ActionServlet and recommends building the View layer using JSP tag libraries. Struts also provides a wrapper around the Model lay
3、er throughAction classes. Figure 1 illustrates the Struts framework based on the Model-View-Controller design.Figure 1. Struts and MVC Overview of Struts componentsFirst, we'll explain the Struts components in the context of best practices and the role each one plays in your Web applic
4、ation development.ActionEvery Action of your application extends Struts' . These Action classes provide an interface to the application's Model layer, acting as a wrapper around the business logic. Each Action class must provide its case-specific implementa
5、tion to the perform() method. The perform() method always returns a value of type ActionForward.ActionFormEvery ActionForm of your application extends Struts' . ActionForms are simple JavaBeans that encapsulate and validate request parameters. To vali
6、date your request data, your ActionForm's validate() method must give a case-specific implementation. ActionForms serve as a carrier of request data to the Action class. A JSP object combines with a respective ActionForm to form your application's View
7、 layer, where almost every form field of the JSP object maps to an attribute of the corresponding ActionForm.JSP custom tag librariesThe JSP custom tag libraries are a collection of actions presented as tags. This is a powerful feature of the JSP Specification 1.1; it allows you to separate pre
8、sentation from other application tiers. The libraries are easy to use and you can read them in XML-like fashion. You can easily maintain the JSP components by minimizing the use of Java scriptlets in them. The JSP tags that Struts provides include HTML, logic, and bean tags.ActionErrorsYou use
9、ActionErrors to support exception handling. An ActionError traps and propagates an application exception to the View layer. Each one is a collection of ActionError instances. ActionErrors encapsulate error messages, while the </html:errors> in the Presentatio
10、n layer renders all error messages in the ActionError collection.Best Practice 1. Reuse data across multiple ActionFormsNow that you are familiar with the Struts components, we will continue by showing you ways to get the most out of the framework. First, Struts recommends that you associa
11、te every JSP object with an ActionForm, which encapsulates data represented in the screen. You access the form data in the JSP object using accessory methods found in ActionForm. Listing 1 shows the conventional use of ActionForm tag in the View layer.Listing 1. Using ActionForm
12、in JSP<html:form action="/bp1"> <html:text property="attrib1" /> </html:form >The ActionForm called "BP1AForm" includes the attribute attrib1, as well as its getter and setter methods. In the configuration file, the action "/bp1&quo
13、t; maps to bp1AForm using the name attribute. This facilitates data display in the JSP.To implement this best practice, Struts recommends you do two things:1. Create a JavaBean (BP1BForm) with attributes that form an attribute subset in BP1AForm, along with the attributes
14、9; getter and setter methods.2. Replace the attributes in BP1AForm with the bean BP1BForm by associating the bean with BP1AForm. Now you can access this attribute subset in BP1AForm through BP1BForm. Listing 2 shows you how.Listing 2. Accessing form attributes
15、 in JSP<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 >Best Pra
16、ctice 2. Use Action class to handle requestsTypically when using the Struts framework, for every action the JSP component requests your application to execute, the application must extend Struts' to create an Action class. This individual Action class interfaces wi
17、th the application's Model layer while processing the request.To implement this practice, Struts recommends you follow these steps:1. Create an Action class, say BP2Action, by extending .2. Create all other Action classes in your Web application by extending BP
18、2Action.3. In BP2Action, create a method performTask(), as in public abstract ActionForward performTask(ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse response) throws IOException, ServletException.4. In BP2Action add one or more generic meth
19、ods to the application, for example serverSideValidate(). You can decide on the method's access modifier by considering the following factors:o If all Action classes must implement this method, make it abstract.o If some Action classes will provide a case-specific implem
20、entation, declare the method protected and give it a default implementation.5. In BP2Action, declare method perform() as final. Invoke the above generic method, which must always be called before processing the request. Now call the method performTask() created in step
21、3.6. In every Action class extending BP2Action, add method performTask() with a case-specific implementation.AdvantagesThis practice has two main advantages. First, it helps you avoid redundant code in every Action class of your Web application. Second, it gives th
22、e application more control over generic tasks by centralizing the behavior in one Action class.Best Practice 3. Use ActionForm to work on session dataIn a Struts-based Web application, each ActionForm extends . These ActionForms encapsulate page data and provide a valid
23、ation framework to validate request parameters.Most Web applications maintain data in session to make them available throughout the application. This best practice addresses this Web application feature. It allows methods toSession() and fromSession() to move session data to and
24、from the form data. Thus, it addresses session data maintenance in a Web application.To adhere to this practice, follow these steps:1. Create an abstract class named BP3Form by extending .2. In BP3Form, add methods with access modifiers as in public abstract void toSession(S
25、essionData sessionData) and void fromSession(SessionData sessionData).3. In every ActionForm, extend BP3Form and implement the abstract methods in which the form data is transported to and from the session.4. The corresponding Action class may determine the order i
26、n which these methods are called. For example, you could invoke method toSession() on the ActionForm just before actionForward is determined.When to use this practiceThis practice is most useful when session data is maintained as a single object and/or every page manipu
27、lates or uses session data.Best Practice 4. Handle exceptions effectivelyConventionally, when an application exception occurs in an Action class, the exception is first logged. Then the class creates anActionError and stores it in the appropriate scope. This Action class the
28、n forwards control to the appropriate ActionForward. Listing 3 shows how Action class handles exceptions.Listing 3. Exception handling in an Action class try /Code in Action class catch (ApplicationException e) /log exception ActionErrors actionErrors = new ActionErrors(); ActionError
29、 actionError = new ActionError(e.getErrorCode(); actionErrors.add(ActionErrors.GLOBAL_ERROR, actionError); saveErrors(request, actionErrors); While conventional exception handling procedures save exception information in every Action class, best practice 4 aims to avoid redundant code whil
30、e handling exceptions.To use this practice, Struts recommends following these steps:1. Create an Action class, say BP4Action, by extending .2. Create all other Action classes in your Web application by extending BP4Action.3. In BP4Action, declare variable
31、;ActionErrors actionErrors = new ActionErrors();.4. In BP4Action, create a method performTask() as in public abstract ActionForward performTask(ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse response, ActionErrors actionErrors) throws IOException,
32、 ServletException.5. In BP4Action, declare method perform() as final. Then invoke generic methods, which must always be called before processing the request. Now you can call the method performTask() created in the previous step.6. While implementing method performTask(
33、) in every Action class (by extending BP4Action), handle application exceptions as shown in Listing 4.Listing 4. Using ActionErrors effectively try /Code in Action class catch(ApplicationException appException) /Log exception /Add error to actionErrors actionErrors.add(ActionErro
34、rs.GLOBAL_ERROR, new ActionError(appException.getErrorCode(); In BP4Action, after invoking the method performTask(), save the ActionErrors using saveErrors(request, errors).AdvantagesThis practice's main advantage is that it avoids code redundancy in every Action
35、60;class that handles ActionErrors.In conclusionBuilding an easily maintainable Web application can be one of the most challenging tasks for a development team. Using a mature framework like Struts helps you implement the infrastructure code normally associated with building an application. The
36、 Struts framework provides a set of standard interfaces for plugging business logic into the application, a consistent mechanism across development teams for performing tasks such as user data validation, screen navigation, and so forth, as well as a set of custom tag libraries to simplify developin
37、g screens.These four best practices are important for you to extract more from the framework's features. You, as a developer, can benefit from these lessons to increase your code modularity and application reusability, plus minimize code redundancy. These are all critical to building an extensib
38、le Web application.译文Struts 开发的最佳实践Palaniyappan Thiagarajan, Pagadala SureshStruts:简介Struts 是一种开源框架,可用来构建 Web 应用程序,它基于流行的 Model-View-Controller (MVC2) 设计范型。该框架构建在一些标准的技术之上,比如 Java Servlets、JavaBeans、ResourceBundles 和 XML,并且可提供灵活和可扩展的组件。Struts 以ActionServlet 的形式实现了 Controller 层,并建议使用 JSP 标记库构建 V
39、iew 层。Struts 通过 Action 类提供了围绕 Model 层的包装器。图 1 展示了基于 Model-View-Controller 设计的 Struts 框架。图 1. Struts 和 MVC Struts 组件概览首先,我们在最佳实践上下文中解释 Struts 组件,以及它们在 Web 应用程序开发中所起的作用。Action应用程序的每个 Action 都会扩展 Struts 的 类。这些 Action 类为应用程序的 Model 层提供了一个接口,充当围绕业务逻辑的包装器。每个
40、160;Action 类都必须向 perform() 方法提供其特定于用例的实现。perform() 方法经常返回类型 ActionForward 的一个值。ActionForm应用程序的 ActionForm 扩展了 Struts 的 类。ActionForm 是一些封装和验证请求参数的简单 JavaBean。要验证请求数据,ActionForm 的 validate() 方法必须给出一个特定于该情况的实现。ActionForm 作为运载工具
41、,向Action 类提供请求数据。一个 JSP 对象与各自的 ActionForm 对象相结合,构成应用程序的 View 层。在该层,几乎 JSP 对象的每个表单字段都映射到相应的 ActionForm 的属性。JSP 定制标记库JSP 定制标记库是用标记表示的一组行为的集合。这是 JSP Specification 1.1 的一个强大特性;它将其他应用程序层的表示区别了开来。这些库易于使用,而且可以以一种类似 XML 的方式来读取。只要尽量少地在其中使用 Java scriptlet,就可以轻松维护 JSP 组件。Struts 提供的 JSP
42、 标记包括 HTML、逻辑和 bean 标记。ActionErrors可以使用 ActionError 来支持异常处理。ActionError 捕捉应用程序异常,并将其传送给 View 层。每个异常都是一个 ActionError实例的集合。ActionError 可以封装错误消息,而 Presentation 层中的 </html:errors> 可以呈现 ActionError 集合内的所有错误消息。最佳实践 1. 跨多个 ActionForm 重用数据熟悉了 Struts 组件之后,就可
43、以继续学习如何充分利用这一框架。首先,Struts 建议将每个 JSP 对象与一个 ActionForm 相关联,后者可以封装屏幕上显示的数据。可以通过 ActionForm 内的附加方法来访问 JSP 对象内的表单数据。清单 1 展示了 ActionForm 标记在 View 层中的传统方法。清单 1. 使用 ActionForm<html:form action="/bp1"> <html:text property="attrib1" /> </html:fo
44、rm >这个 ActionForm 被称为 “BP1AForm”,它包括属性 attrib1 及其 getter 和 setter 方法。在配置文件 s 中,行为 “/bp1” 通过 name 属性映射到 bp1AForm。这有助于在 JSP 中显示数据。要实现这一最佳实践,Struts 建议您进行以下两个操作:1. 创建一个 JavaBean(BP1BForm),且其属性是 BP1AForm 属性的子集,还要创建这些属性的 getter 和 setter 方法。2. 通过将这个
45、 bean 与 BP1AForm 关联,用 bean BP1BForm 的属性替代 BP1AForm 中的属性。现在就可以通过 BP1BForm 访问BP1AForm 中的属性子集了。清单 2 展示了访问的方式。清单 2. 访问 JSP 中的表单属性 <html:form action="/bp1"> <bean:define name="bp1AForm" property="bp1BForm" id="bp1B&q
46、uot;.dw.webarch.struts.BP1BForm" /> <html:text name="bp1B" property="subsetAtt1" /> </html:form >最佳实践 2. 使用 Action 类处理请求通常,在使用这个 Struts 框架时,对于 JSP 组件请求应用程序执行的每个动作,应用程序都必须扩展 Struts 的 以创建 Action 类。在处理请求时,单个的 Action 类与应用程序的 Model 层连接。要实现这
47、一最佳实践,Struts 建议您遵循以下步骤:1. 通过扩展 创建一个 Action 类,比如 BP2Action。2. 通过扩展 BP2Action 在 Web 应用程序中创建所有其他 Action 类。3. 在 BP2Action 类中创建一个方法 performTask(),就像在公共抽象类 ActionForward performTask(ActionMapping mapping, ActionForm form, ServletRequest req
48、uest, ServletResponse response) throws IOException, ServletException 中一样。4. 在 BP2Action 类中向应用程序添加一个或多个泛型方法,比如 serverSideValidate()。考虑以下因素后决定方法的访问修饰符:o 如果所有 Action 类都必须实现此方法,则让其为抽象。o 如果某些 Action 类提供一个特定的实现,则将此方法声明为受保护,并给它一个默认实现。5. 在 BP2Action 类中,将方法
49、160;perform() 声明为 final。调用上述的泛型方法(通常在处理请求前调用该方法)。现在调用 步骤 3 中创建的方法 performTask()。6. 在每个扩展 BP2Action 的 Action 类,添加具有特定实现的方法 performTask()。优势这一实践有两个主要优势。首先,它避免了 Web 应用程序中每个 Action 类的冗余代码。其次,通过将 Action 类的行为集中在一起,使应用程序能够更多地控制通用的任务。最佳实践 3. 使
50、用 ActionForm 处理会话数据在一个基于 Struts 的 Web 应用程序中,每个 ActionForm 都扩展 类。这些 ActionForm 封装页面数据,并提供一个验证框架来验证请求参数。大多数 Web 应用程序都在会话中保持数据,使其在整个应用程序过程中可用。这种最佳实践实现了这种 Web 应用程序特性。它允许方法 toSession() 和 fromSession() 将会话数据移动到表单数据或从表单数据移回。因此,它实现了在 Web 应用程序中保持会话数据。要遵循一最佳实
51、践,执行以下步骤:1. 通过扩展 创建一个名为 BP3Form 的抽象类。2. 在 BP3Form 类中,添加具有访问修饰语的方法,就像在公共抽象类 void toSession(SessionData sessionData) 和 void fromSession(SessionData sessionData) 中一样。3. 在每个 ActionForm 类中,扩展 BP3Form 并实现这些抽象方法(表单数据通过它们传递到会话或从会话传回)。4.
52、相应的 Action 类可以决定这些方法的调用顺序。例如,可以在决定 actionForward 之前调用 ActionForm 上的方法toSession()。何时使用这一实践这一实践最适用于:会话数据是单一对象和/或每个页操作或使用会话数据。最佳实践 4. 有效处理异常传统地,当在 Action 类中发生应用程序异常时,异常首先被写入日志。然后此类创建一个 ActionError 并在合适的作用域中存储它。然后 Action 类再将控制转交给合适的 Action
53、Forward。清单 3 展示了 Action 类是如何处理异常的。清单 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
54、); saveErrors(request, actionErrors); 传统的异常处理过程在每个 Action 类中保存异常信息,而最佳实践 4 则在处理异常时避免冗余代码。要使用这一最佳实践,Struts 建议您遵循以下步骤:1. 通过扩展 创建一个 Action 类,比如 BP4Action。2. 通过扩展 BP4Action 在 Web 应用程序中创建所有其他 Action 类。3. 在 BP4Action 中声明变量 ActionErrors
55、 actionErrors = new ActionErrors();。4. 在 BP4Action 中创建方法 performTask(),就像在公共抽象类 ActionForward performTask(ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse response, ActionErrors actionErrors) throws IOException, ServletException 中一样。5. 在 B
56、P4Action 中将方法 perform() 声明为 final。然后调用泛型方法(这些方法总是在处理请求前调用)。现在调用在前一个步骤中创建的 performTask()。6. 在每个 Action 类中实现方法 performTask() 的同时(通过扩展 BP4Action),像清单 4 那样处理应用程序异常。清单 4. 有效使用 ActionErrors try /Code in Action class catch(ApplicationException appException) /Log
57、 exception /Add error to actionErrors actionErrors.add(ActionErrors.GLOBAL_ERROR, new ActionError(appException.getErrorCode(); 在 BP4Action 中,调用方法 performTask() 之后,通过 saveErrors(request, errors) 保存 ActionErrors。优势这一实践主要的优势是:避免了每个处理 ActionErrors 的 Acti
58、on 类中的代码冗余。结束语对开发团队而言,构建易于维护的 Web 应用程序是一项非常具有挑战性的任务。使用 Struts 等成熟的框架有助于实现通常与构建应用程序相关的基础设施代码。Struts 框架提供了一组标准接口,用于将业务逻辑插入到应用程序中。此外,还提供了一种跨开发团队的一致机制,用于执行用户数据验证、屏幕导航等任务,以及用于简化开发屏幕的一组定制标记库。本文给出的 4 种最佳实践对您充分利用这种框架的特性十分重要。它们不仅能够提高代码的模块化程度和应用程序的可重用性,还能减少代码冗余。对于构建可扩展的 Web 应用程序,这是至关重要的。本文译自: developerWorksWeb development
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国生物医药产业园行业运营管理分析规划研究报告
- 2024-2030年中国环保用新材料行业需求预测及发展风险研究报告
- 2024-2030年中国狗仔衣项目可行性研究报告
- 2024-2030年中国物流金融行业发展模式及投资前景展望报告
- 2024-2030年中国烟草制品行业发展趋势预测及营销战略分析报告
- 2024年塑料容器:塑料瓶项目申请报告
- 2024-2030年中国混凝土机械行业市场容量分析及未来发展策略研究报告
- 2024-2030年中国海水养殖海蜇行业发展趋势及营销模式分析报告
- 2024-2030年中国注塑级聚乳酸(PLA)行业运行态势与应用前景预测报告
- 2024-2030年中国汽车风窗洗涤器总成行业盈利模式与投资策略分析报告
- 工厂反骚扰虐待强迫歧视政策
- 计算机教室(微机室)学生上机使用记录
- FAI首件检验报告
- 生活满意度量表(SWLS)
- 细胞生物学主题知识讲座
- 小作坊食品安全管理制度(3篇)
- 孕期焦虑测评
- 光伏电站施工组织设计
- 全人教版四年级英语上册期中考试知识点汇总-必背的重点
- 2023年1月高三英语试题(浙江卷)+听力+答案+作文
- 体位引流课件
评论
0/150
提交评论