Struts原理、开发及项目实施

Struts原理、开发及项目实施 Holen 2002-9-12
Struts原理、开发及项目实施 Holen 2002-9-12 1、 摘要 2、 关键词 3、 Framework 4、 Struts的起源 5、 Struts工作原理 6、 Struts安装 7、 一个实例 8、 Struts优缺点 9、 Struts项目实施经验 10、 总结 11、 参考文献 1、 摘要 本文主要讲述了Struts(以Struts1.0.2为例)的工作原理,安装以及配置方面的问题。然后结合一个实例,详细讨论了Struts在实际开发过程中的应用,最后提供一些在开发过程中积累的经验,供大家参考。 2、关键词 Struts、MVC、J2EE、Tiles、Framework 3、Framework Framework即架构(框架),这里指软件的架构方式,为什么要提Framework呢?请允许我从J2EE讲起。 J2EE体系包括JSP、Servlet、EJB、WEB SERVICE等多项技术。这些技术的出现给电子商务时代的WEB应用开发提供了一个非常有竞争力的选择。怎样把这些技术组合起来,形成一个适应项目需要的稳定架构是项目开发过程中一个非常重要的步骤。 此步骤一般主要由架构设计师完成,设计师将根据项目需求,对J2EE体系中的各处技术进行筛选取舍,并考虑到开发过程中的角色分工、后期的运行维护,以及系统扩展性等诸多因素,建立系统的架构。 一个成功的软件需要有一个成功的架构,但软件架构的建立是一个复杂而又持续改进的过程,软件开发者们不可能对每个不同的项目做不同的架构,而总是尽量重用以前的架构,或开发出尽量通用的架构方案,Struts就是其中之一,Struts是流行的基于J2EE的架构方案,其他常用的基于J2EE的架构方案还有Turbine、RealMothods等。 4、Struts的起源 Struts最早是作为Apache Jakarta项目的组成部分问世运做。项目的创立者希望通过对该项目的研究,改进和提高Java Server Pages (JSPs)、Servlet、标签库以及面向对象的技术水准。当前最高发行版本为Struts1.0.2,可以到http://jakata.apache.org/Struts下载。 Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了帮助你减少在运用MVC设计模型来开发Web应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。 5、Struts工作原理 MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示: Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,如下图2所示: 控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。 视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。 模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。 流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。 核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。这在后面还会详细讨论。 6、Struts安装 Struts的安装比较简单,下面的以Tomcat 4.0.4为例,讲述安装过程。 首先请到http://jakarta.apache.org/Struts下载Struts,建议使用release版,现在最高版本为1.0.2,下载后得到的是一个ZIP文件。 将ZIP包解开,可以看到这个目录:lib和webapps,webapps下有一些WAR文件。 假设你的Tomcat装在c:\Tomcat下,则将那些WAR文件拷贝到C:\Tomcat\webapps,重新启动Tomcat即可。 打开浏览器,在地址栏中输入:http://localhost:8080/Struts-example/index.jsp,若能见到“powered by Struts”的深蓝色图标,即说明成功了。这是Struts自带的一个例子,附有详细的说明文档,可以做为初学者的入门教程。 另外,Struts还提供了一系统实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息等。 7、一个实例 一个用户注册系统,用户通过网页输入相关信息:注册ID号,密码,EMAIL,若注册成功,则返回成功提示信息,反之出现注册失败提示信息。 以下是相关文件的部分核心代码。 项目建立: 正式开发前,需要在Tocmat(我的tomcat装在c:\tomcat)中建立此项目。 比较快的一种建立方式为: 在C:\tomcat\webapps下新建目录test,再将C:\tomcat\webapps\struts-example下的 WEB-INF目录拷贝到test目录下,然后将test\WEB-INF下的src和classes目录清空,以及struts-config.xml文件中内容清空即可。这样,我们需要的Struts类包及相关的配置文件就都齐了。 开发时,将JSP文件放在test目录下,Java原文件放在test\WEB-INF\src下,编译后的类文件放在test\WEB-INF\classes下。 注册页面:reguser.jsp
<% ... @ page contentType="text/html;charset=UTF-8" language="java"  %>
<% ... @ taglib uri="/WEB-INF/Struts-bean.tld" prefix="bean"  %>
<% ... @ taglib uri="/WEB-INF/Struts-html.tld" prefix="html"  %>
< html:html  locale ="true" >
< head >
< title > RegUser </ title >
< html:base />
</ head >
< body  bgcolor ="white" >
< html:errors />
< html:form  action ="/regUserAction"  focus ="logname" >
< table  border ="0"  width ="100%" >
  
< tr >
    
< th  align ="right" >
      Logname:
    
</ th >
    
< td  align ="left" >
      
< html:text  property ="logname"  size ="20"  maxlength ="20" />
    
</ td >
  
</ tr >
  
< tr >
    
< th  align ="right" >
      Password:
    
</ th >
    
< td  align ="left" >
      
< html:password  property ="password"  size ="20"  maxlength ="20" />
    
</ td >
  
</ tr >  
  
< tr >
    
< th  align ="right" >
      E-mail:
    
</ th >
    
< td  align ="left" >
      
< html:password  property ="email"  size ="30"  maxlength ="50" />
    
</ td >
  
</ tr >
  
< tr >
    
< td  align ="right" >
      
< html:submit  property ="submit"  value ="Submit" />
    
</ td >
    
< td  align ="left" >
      
< html:reset />
    
</ td >
  
</ tr >
</ table >
</ html:form >
</ body >
</ html:html >
此JSP页面不同于普通的JSP页,因为它大量运用了taglib,这些taglib对初学者而言,可能难于掌握,可这却是Struts的精华之一。灵活运用,将大大提高开发效率。
Struts-config.xml:

    
< Struts-config >     
< form-beans >
    
< form-bean       name ="regUserForm"
                    type
="org.cjea.Struts.example. RegUserForm " />     
</ form-beans >

< action-mappings >
< action   path ="/regUserAction"
        type
=" org.cjea.Struts.example.RegUserAction "
        attribute
=" regUserForm "
        scope
="request"
        validate
="false" >
      
< forward  name ="failure"    path ="/ messageFailure.jsp" />
      
< forward  name ="success"   path ="/ messageSuccess.jsp" />
</ action >
</ action-mappings >
    
</ Struts-config >
Struts的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。
// FormBean:RegUserForm

package  org.cjea.Struts.example;

import  javax.Servlet.http.HttpServletRequest;
import  org.apache.Struts.action.ActionForm;
import  org.apache.Struts.action.ActionMapping;

public   final   class  RegUserForm  extends  ActionForm ... {

  
private String logname;
  
private String password;
  
private String email;

  
public RegUserForm()...{
    logname 
= null;
    password 
= null;
    email 
= null;
  }


  
public String getLogName() ...{
    
return this.logname;
  }

  
public void setLogName(String logname) ...{
    
this.logname = logname;
  }

  
public void setPassWord(String password) ...{
    
this.password = password;
  }

  
public String getPassWord() ...{
    
return this.password;
  }

  
public void setEmail(String email) ...{
    
this.email = email;
  }

  
public String getEmail() ...{
    
return this.email;
  }


  
public void reset(ActionMapping mapping, HttpServletRequest request)
    
...{
        logname 
= null;
        password 
= null;
        email 
= null;
    }

}

每一个FormBean 都必须继承ActionForm类,FormBean是对页面请求的封装。即把HTTP request 封装在一个对象中,需要说明的一点就是多个HTTP request可以共用一个FormBean,便于维护和重用。
// ActionBean:RegUserAction

package  org.cjea.Struts.example;

import  javax.Servlet.http. * ;
import  org.apache.Struts.action. * ;

public   final   class  RegUserAction  extends  Action
... {

    
public ActionForward perform(ActionMapping mapping,
        ActionForm form,  HttpServletRequest req,
        HttpServletResponse res)
    
...{        
        String title 
= req.getParameter("title");
        String password 
= req.getParameter("password");
        String email 
= req.getParameter("email");
        
/**//*

你可能感兴趣的:(tomcat,bean,mvc,jsp,struts)