<%@ 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应用程序
     发布者: 发布时间:2007-06-28
从一个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和Servlet性能优化
一季度java报表开发业内渐起硝烟
java报表开发工具free的~
Java程序最容易犯的21种错误实例分析
实战Java多线程编程之不提倡的方法
初学者如何开发出一个高质量的J2EE系统
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(3983)
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(8078)
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(4594)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(5582)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(7378)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

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