简单之中也蕴涵着复杂性,我们在本系列第一部分和第二部分创建、研究一个简单的Struts login应用程序时,回避了许多这种复杂性。因为那两篇文章是给初学者的Struts入门读物,所以我们在应用程序中没有充分运用Struts类库。但现在,你已经做好准备学习更多的东西了。让我们先来看看真正的Struts程序员是如何运用ActionForward类的吧,它代表的是控制指令所导向的一个目的资源。
从一个servlet内部,通过运用javax.servlet.RequestDispatcher类的forward方法你就可以将控制流程引导到一个目的资源。在login应用程序的action类中,该代码形式如下:RequestDispatcher rd =
request.getRequestDispatcher(destination);
rd.forward(request, response);
其中destination就是到一个目的资源的路径。
但是在一个典型的Struts应用程序中,你可以用ActionForward类作为替代。运用这个类的好处就是你不再需要创建一个RequestDispatcher对象并调用它的forward方法了。
你可以将ActionForward类用于一个Action类的execute方法中。注意,其中一个重载的execute方法有如下的定义,它返回一个ActionForward对象:public ActionForward execute(
ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response)
throws Exception
因为当时我们还没有讲到ActionForward类,所以在本系列的第一部分和第二部分中所有Action类的execute方法都只返回了空值。现在,在一个Action类的execute方法中,你就可以用ActionForward类来代替下面这个RequestDispatcher对象实例了:RequestDispatcher rd =
request.getRequestDispatcher(destination);
rd.forward(request, response);
新的代码变成:return (new ActionForward(destination));
构建ActionForward对象
ActionForward类提供了下面五种构造器:public ActionForward()
public ActionForward(String path)
public ActionForward(String path, boolean
redirect)
public ActionForward(String name, String path,
boolean redirect)
public ActionForward(String name, String path,
boolean redirect, boolean contextRelative)
虽然这些构造器是不需要说明的,但我们应该注意下面几点。在这些构造器中,第二种可能是最常用的。后四种构造器中的path参数表示的是到目的资源的路径。后三种构造器中的redirect布尔值表示的是是否执行了一个重定向(redirect)。(缺省情况下,这个值设置为false,因为redirect比forward慢。)最后,第五个构造器中的contextRelative布尔值表示该路径是否应该是context-relative的,而不是module-relative的。
同样,一个ActionForward实例也可以有一个逻辑名称,你可以用这个名称来查找与一个特殊的ActionMapping对象相关的实例。(参见本系列第四部分关于ActionMapping的讲述。)
学习ActionForward类的方法
ActionForward类定义了三个保护字段――name、path和redirect――它们构成了ActionForward的三个属性。ActionForward类提供getter和setter方法来从这些字段读值、给这些字段赋值。这些方法是不需要说明的,定义如下:public boolean getContextRelative()
public void setContextRelative(boolean
contextRelative)
public String getName()
public void setName(String name)
public String getPath()
public void setPath(String path)
public boolean getRedirect()
public void setRedirect(boolean redirect)
除此之外,ActionForward类还重载了toString方法并返回:"ActionForward[" + name + "]"
其中name是名称字段。
最后,还有一个freeze方法,它固定了一个组件的配置。
再次运用Login应用程序
要完全了解ActionForward类,我们需要再次运用在本系列第一部分和第二部分构建的login应用程序。你可以下载完整的应用程序,把它重命名为myStrutsApp2。它的web.xml和struts-config.xml文件同myStrutsApp1中的文件是一样的,JSP页面也没有改变。只有action类同以前不同(见列表1)。
注意下面这行代码是新的:return (new ActionForward("/mainMenu.jsp"));
它替代了下面这些代码,现在它们都被注释出来了:RequestDispatcher rd =
request.getRequestDispatcher("/mainMenu.jsp");
rd.forward(request, response);
同样,下面这些代码也都被重写了:
// RequestDispatcher rd =
request.getRequestDispatcher(
"/login.jsp");
// rd.forward(request, response);
新的代码变成:return (new ActionForward("/login.jsp"));
ViewSecretAction类
ViewSecretAction也变得更好了(见列表2)。execute方法最后的这三行代码现在由一行来处理了,返回(new ActionForward (“/viewSecret.jsp”)):
//
RequestDispatcher rd =
request.getRequestDispatcher(
"/viewSecret.jsp");
//
rd.forward(request, response);
//
return null;
接下来,我们来重新查看LogoutAction类(见列表3)。注意execute方法中下面这些代码已经被替代了:
// RequestDispatcher rd =
request.getRequestDispatcher(
"/login.jsp");
// rd.forward(request, response);
// return null;
你只需要用下面这一行代码来取代它就行了: return (new ActionForward("/login.jsp"));
ActionForward是个很有用、功能很多的类,它可以让你更简单、更快、更直接地完成许多事情,这可能就是它很受欢迎的原因。在本系列的第四部分,你可以了解另一个重要的类org.apache.struts.action.ActionMapping,它可以使你的代码更有效、更漂亮。
分享到:
相关推荐
12. **安全与性能优化**:讨论Struts应用的安全隐患,如CSRF防护,以及性能调优策略。 通过"Struts在行动"的学习,开发者不仅可以掌握Struts框架的基本使用,还能了解其在实际项目中的应用和最佳实践,为构建高效、...
Struts in Action 是一本经典的技术书籍,专注于Java企业级应用开发框架Struts。...通过对这本书的学习,你可以掌握如何利用Struts构建符合企业级标准的Web应用程序,同时也能为理解和使用其他MVC框架打下坚实的基础。
2. **配置详解**:书中详细阐述了Struts的配置文件(struts-config.xml),包括ActionMapping、FormBeans、ActionForward、PlugIn等核心元素的配置方法,以及如何使用XML来组织应用程序的结构。 3. **动作(Actions...
Struts是Apache软件基金会旗下的一款开源Java框架,主要用于构建企业级的Web应用程序。"Struts in Action"是一本深入探讨Struts框架的经典书籍,它的完整中文版为中国的开发者提供了全面理解Struts架构和实践的宝贵...
**Struts应用程序执行流程** 1. 用户发送请求到ActionServlet。 2. ActionServlet解析请求,根据`struts-config.xml`找到对应的Action Mapping。 3. 创建并实例化ActionForm,填充表单数据。 4. 调用Action类处理...
4. **StrutsTestCase**:StrutsTestCase是Struts提供的一个单元测试框架,它允许开发者对ActionForm、Action和ActionForward进行测试,确保这些组件在实际运行前功能正确。使用StrutsTestCase,可以编写模拟HTTP请求...
Struts是Apache软件基金会旗下面向Java平台的一个开源框架,主要用来构建企业级Web应用程序。Struts通过将模型、视图和控制器分离,实现了MVC(Model-View-Controller)设计模式,使得开发者可以更有效地组织和管理...
《基于Struts应用的JSP图书管理系统》是一个典型的Web应用程序,它利用了JavaServer Pages (JSP) 技术和Apache Struts框架来构建高效、可维护的图书管理平台。Struts是一个开源的MVC(Model-View-Controller)框架,...
Struts 是一款开源的Web应用程序框架,最初在2002年由Apache Jakarta项目发布,旨在简化基于MVC(Model-View-Controller)设计模式的Web应用开发。Struts 1.1是当时最新的稳定版本。Struts提供了一种组织应用程序...
Struts1.2是Apache软件基金会的Jakarta项目下的一个开源框架,主要用于构建基于Java的Web应用程序。这个框架提供了一种组织应用结构和控制应用程序流程的方式,极大地简化了MVC(Model-View-Controller)模式的实现...
源码分析可以帮助你掌握Action、Form Bean、ActionForward、ActionMapping等关键类的内部实现,以及RequestProcessor、Dispatcher等组件的工作流程。 其次,`struts-1.2.4-lib`是一个包含Struts1.2运行所需库文件的...
然后,书中会通过实例演示如何创建一个简单的Struts应用程序,让你对框架的工作原理有初步了解。 在模型部分,书中会深入探讨如何设计和实现ActionForm类,以及如何与数据库交互进行数据持久化。此外,还会讲解如何...
开发者需要熟练掌握如何配置ActionMapping、FormBean、ActionForward等元素,以实现应用程序的正确路由。 ActionServlet会根据URL路径匹配struts-config.xml中的配置,找到对应的Action,然后实例化ActionForm并...
Struts和Ajax技术结合创建的抽奖程序是一种常见的Web应用程序开发实践,主要应用于构建动态、交互性强的用户界面。Struts是Java EE平台上的一个MVC(Model-View-Controller)框架,它帮助开发者构建结构清晰、可维护...
Struts 1.2驱动包是Apache软件基金会开发的一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。它旨在提供一个结构化的、可扩展的平台,帮助开发者构建更易于维护和管理的Web应用。Struts 1.2...
9. **最佳实践与性能优化**:书中会提供一些开发和部署Struts应用的最佳实践,以及如何进行性能调优,以确保应用的高效运行。 10. **测试Struts应用**:学习如何使用JUnit和模拟对象进行单元测试,以及使用Selenium...
Struts框架技术是一种基于Model-View-Controller (MVC)设计模式的开源Web应用程序框架,由Apache软件基金会维护。它的核心目标是简化Java Servlet和JSP应用的开发,提高可维护性、可扩展性和组件的复用性。Struts...
Struts1.2.9是Apache软件基金会的一个开源项目,它是Model-View-Controller(MVC)设计模式在Java Web应用程序中的实现。这个框架的主要目标是简化开发过程,提高代码组织性和可维护性,使开发者能够更高效地构建...