<%@ page contentType="text/html; charset=gb2312"%> 使用ActionForward优化Struts应用程序
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
使用ActionForward优化Struts应用程序
     发布者: 发布时间:2008-01-16
从一个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类同以前不同。

注意下面这行代码是新的: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也变得更好了。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,它可以使你的代码更有效、更漂亮。
    

 
 
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
实例讲解在JSP开发中的对象和范围属性
技巧:JSP中把动态页面转换为静态页面
Java Web应用程序:JSF技术的详细介绍
新手入门:实例讲解Java中的接口的作用
Java异常框架设计
Java设计模式之虚拟代理模式
 
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号