基于MVC设计模式的Struts框架研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:chanstan
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:Struts是基于MVC设计模式的非常优秀的 Web应用框架,在Web应用开发中很好地将显示与逻辑分离,提高了代码的可重用性和灵活性。文中首先分析了Struts框架及其对Model,View和Controller层的实现原理,并通过一个实例演示Struts框架实现MVC模式的方法。
  关键词:MVC设计模型;Struts框架;Servlet;Jsp
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30789-02
  Research of Struts Frame Work Based on MVC Design Pattern
  XIA wei
  (Bengbu College of Modern Education Technology Center, Bengbu 233000, China)
  Abstract:Struts is an excellent framework based on MVC design pattern for Web applications. It separates view and business logic and increases reusability and flexibility of the code for Web development. This paper briefly analyzes the principle of Struts framework technology and the implementing technology for model, view and controller of Struts based on MVC design pattern. And through a demonstration examples Struts Framework MVC model approach.
  Key words:Struts framework; MVC design pattern; Servlet; Jsp
  
  1 引言
  
  当前,SUN公司提出的J2EE (Java 2 Enterprise Edition)已经逐渐成为企业Web应用开发的标准,这当中的Servlet/JSP技术也在众多网站得到了广泛的应用,然而,在仅使用JSP技术开发的Web应用中,业务逻辑处理、动态显示用的Java代码以及HTML混合在一起,使得阅读、调试和维护都困难重重。
  为了使开发的Web应用具有良好的可扩展性和易于分工,我们必须要做到:
  (1)将业务逻辑与用户界面分离;
  (2)将动态页面显示逻辑与静态的HTML代码分离。
  由Apache Jakarta项目组提供的Struts应用框架正是用来解决这些问题的,它基于MVC的设计思想,很好地实现了业务逻辑与用户界面的分离,同时,它提供了大量的自定义标记库,可以在JSP页面中分离动态显示逻辑与静态的HTML,使页面代码更清晰,可读性大大提高。
  
  2 MVC设计模式简介
  
  MVC是Model-View-Controller的简称,它是一种设计模式,来源于面向对象语言Smalltalk,最近几年被推荐为SUN公司J2EE平台的设计模式,它强制性地把应用程序的输入、处理和输出分开。MVC把应用程序分成3个核心模块:模型(Model)、视图(View)和控制器(Controller),它们分别担负不同的任务,以提高应用程序的可扩展性。图1显示了这几个模块各自的功能以及它们的相互关系。
  图1 MVC组件类型的关系和功能
  2.1 View
  用户视图模块,这是用户界面部分。与Web应用程序一样,主管应用程序与人之间的接口。一方面它为用户提供了输入手段,并触发应用逻辑运行;另一方面,它又将逻辑运行的结果一某种形式显示给用户。
  2.2 Controller
  流程控制模块。该部分是用户界面与Model的接口。一方面它解释来自于View的输入,将其解释成为系统能够理解的对象,同时它也识别用户动作,并将其解释为特定方法的调用;另一方面,他处理来自于Model的事件和Model逻辑执行的结果,调用适当的View为用户提供反馈。
  2.3 Model
  事务逻辑模块,这是整个模型的核心。它表示的是解决方案空间真正的逻辑。它采用面向对象的方法,将问题领域中的对象抽象为应用程序对象。在这些抽象的对象中封装了对象的是属性和这些对象所隐含的逻辑。
  2.4 MVC处理过程
  首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理;然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。
  
  3 Struts体系结构
  
  Struts框架是在MVC模式基础上开发的新一代Web框架,在它的支持下可以快速开发基于Web的应用,而且提高了MVC的分层应用。它的标记库具有强大的页面开发功能。Struts框架的处理流程清楚地体现了MVC系统的特点,简单的Struts组件结构如图2所示。客户端通过Browser发出请求后,请求被Struts的控制器ActionServlet获得,ActionServlet在Struts-config.xml配置文件中查找有效映射,然后将相应的ActionMapping对象转发给Action处理器对象进行处理。Action处理器对象访问ActionForm中的数据,处理和响应客户的请求,它还调用后台的Bean组件,这些组件封装了具体的业务逻辑。Action处理器对象根据处理结果通知控制器,控制器进行下一步的处理。
  图2 Struts框架的组件结构图
  3.1 控制器(Controller)
  控制器的作用是从客户端接受请求,并且选择执行相应的业务逻辑,然后把响应结果送回到客户端。在Struts中Controller功能由图中ActionServlet和ActionMapping对象构成:核心是一个Servlet类型的对象ActionServlet,它用来接受客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model部分中Action处理器对象之间的映射。
  3.2 模型(Model)
  MVC系统中的Model部分从概念上可以分为两类——系统的内部状态,和改变系统状态的动作。Struts为Model部分提供了Action和ActionForm对象:所有的Action处理器对象都是开发者从Struts的Action类派生的子类。Action处理器对象封装了具体的处理逻辑,调用业务逻辑模块,并且把响应提交到合适的View组件以产生响应。Struts提供的ActionForm组件对象,它可以通过定义属性描述客户端表单数据。开发者可以从它派生子类对象,利用它和Struts提供的自定义标记库结合可以实现对客户端的表单数据的良好封装和支持,Action处理器对象可以直接对它进行读写,而不再需要和request、response对象进行数据交互。通过ActionForm组件对象实现了对View和Model之间交互的支持。Struts通常建议使用一组JavaBean表示系统的内部状态,根据系统的复杂度也可以使用像Entity EJB 和 Session EJB等组件来实现系统状态。Struts建议在实现时把"做什么"(Action)和"如何做"(业务逻辑)分离,这样可以实现业务逻辑的重用。
  3.3 视图(View)
  Struts应用中的View部分是通过JSP技术实现的。Struts提供了自定义的标记库可以使用,通过这些自定义标记可以非常好地和系统的Model部分交互,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,完成对用户数据的封装,同时这些自定义标记还提供了像模板定制等多种显示功能。
  3.4 配置文件
  Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息。Struts-config.xml是Struts的关键,基本上所有的控制都是通过该文件实现的,通过该配置文件可以控制全局转发、ActionMapping类、ActionFormBean、JDBC数据源。另外利用资源配置文件applicationResources.properties可以实现消息的国际化和本地化。页面上的所有静态文字信息都可以定义在该属性文件中,不同语言可以定义不同的属性文件,并且改变页面文字信息时不用修改JSP而直接修改属性文件即可。
  
  4 Struts简单实例
  
  该实例的的主要功能是验证login登陆页面的用户名和密码,如果验证成功则显示登陆成功页面,否则,显示登陆失败页面。
  4.1 视图部分
  视图包括3个JSP文件:login.jsp提供用户界面,接受用户输入的用户名、密码,并提交登录请求到Action;success.jsp提供登录成功界面,取得Action转发的用户名,并提示该用户登录成功;error.jsp提供登录失败界面,取得Action转发的用户名,并提示该用户输入的用户名或者是密码错误,登录失败。
  login.jsp的源代码如下:
  <% @ taglib uri="/WEB-INF/Struts-form.tld" prefix="form"%>
  
  UserName:

  Password:

  
  

  4.2 模型部分
  模型包括一个JavaBean组件LoginForm,它有username,password两个属性,代表用户输入的用户名和密码。它提供了get/set方法,分别用来读取和设置username,password的属性。
  LoginForm.java的源代码如下:
  import org.apache.Struts.action.*;
  public class LoginForm extends ActionForm{
  public String username;
  public int password;
  public String getUsername() {return username;}
  public void setUsername(String username) {this.username=username;}
  public String getPassword() {return password;}
  public void setPassword(int password) {this.password=password;}}
  4.3 控制器部分
  控制器包括一个Action类LoginAction,它的任务是从LoginForm中接收用户名和密码,判断如果用户输入的用户名是”zhangsan”,密码是”1234”,则登录成功,跳转到success.jsp;否则登录失败,跳转到error.jsp。
  LoginAction.java的源代码如下:
  import org.apache.Struts.action.*;
  public class LoginAction extends Action{
  public ActionForward execute(ActionMapping mapping,ActionForm form,
  HttpServletRequest request, HttpServletResponse,response){
  String userName=((LoginForm)form).getUsername();
  int password=((LoginForm)form).getPassword();
  if(userName.equals("zhangsan") && password.equals("1234")){
  return mapping.findForward("success");
  }else{
  return mapping.findForward("failed");}}}
  4.5配置文件
  用户提交请求到Action以及Action处理完之后跳转到不同的页面都是通过ActionServlet来处理和转发的。而ActionServlet是根据配置文件Struts-config.xml中的映射信息来做出决定的。
  Struts-config.xml的配置信息如下:
  <? xml version="1.0" encoding="UTF-8"?>
  
  
  //定义FormBean
  
  
  

  //定义ActionBean
  
  
  //定义ActionForward
  
  
  

  
  

  
  5 结束语
  
  由于在MVC设计模式中,应用被分为三个部分,这样有利于在代码修改过程中选取重点,它还有利于三个部分并行开发,缩短开发周期,还增加了程序的可维护性、可扩展性,并使测试变得更为容易。由于它满足业务逻辑复杂的大中型Web应用的要求,因而也越来越受到广大编程者的青睐。由于篇幅有限,文中实例只是简单的讲述了Struts的用法,要想真正掌握其开发技巧,还须进一步掌握相关知识。
  
  参考文献:
  [1]孙卫琴. 精通Struts:基于MVC的JavaWeb设计与开发[M]. 北京:电子工业出版社,2004.
  [2]丁鹏,刘方,邵志峰,等. Struts技术揭密及Web开发实例[M]. 清华大学出版社,2004.
  [3]杨磊, 陈凌云. 精通Eclipse Web开发——Java体系结构、工具、框架及整合应用[M]. 人民邮电出版社,2006.
  [4]戎伟,张双. 精通Struts-Java流行服务器、框架、工具及整合应用[M]. 人民邮电出版社,2006.
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:本文通过分析目前企业信息系统建设中存在的一些问题,论述了建立企业应用系统构架的必要性。介绍了服务组件架构(SCA)的基本概念、特点及存在的优势,并结合具体案例详细描述了运用SCA构建企业信息系统构架的过程和策略。  关键词:SCA;组件;服务  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30780-02  Research and Implementa
期刊
摘要:本文介绍了一个以Petri网建模理论为基础的可视化建模工具的设计实现过程,并给出了结合Web多层开发框架实现该工具的技术路线。   关键词:工作流;工作流建模; Web   中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-3747-02  The Design and Implication of the Web-Based Workflow Modelin
期刊
摘要:本文提出了当基站在空间随意分布时考虑非视线(NLOS)传播影响的TOA算法。其主要思想把权值最大的基站即存在NLOS误差的基站的非视距误差当作未知量,把非线性问题转化为最大似然(ML)线性估计。此算法结构简单,计算结果有较高的精度。并把该算法与其他算法做了详细的比较。  关键词:非视距传播;信号到达时间;最大似然估计  中图分类号:TN929文献标识码:A文章编号:1009-3044(200
期刊
摘要:本文分析了利用Delphi开发电子商务系统的技术,重点分析和比较了两种基于Delphi技术的电子商务的结构。  关键词:电子商务;互联网标准应用程序接口;MTS中间件  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)15-30766-01  Analyses and Compares Electronic Commerce System Structure ba
期刊
摘要:本文对Java多线程的原理与用法进行了讨论,重点讨论了将多线程机制应用到Socket编程中,从而使服务器能够同时响应来自多个客户的请求。  关键词:java;多线程;socket编程  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30796-01  The Java Multi-threading Mechanism Weaves the Applica
期刊
摘要:嵌入式系统、嵌入式产品已经广泛地应用于国防、消费、信息家电、网络通信、工业控制等各个领域。本文以在linux系统上针对目标机ARM为例,介绍了跨平台的交叉编译的概念,并详细阐述了如何自己建立基于ARM-linux的交叉编译环境,为嵌入式产品的开发打下良好的基础。  关键词:嵌入式;ARM;Linux;交叉编译  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15
期刊
摘要:利用Visual Basic语言实现对数据的最小二乘法处理,使数据处理非常方便且可靠性高,避免了大量的计算过程,保证数据处理的质量和效果.  关键词:数据处理;最小二乘法;直线拟合;visual basic  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)15-30782-02  The VB Programming to Deal with the Data
期刊
摘要:随着多平台应用的出现,传统的开发平台已经不能适应企业级应用的需要,J2EE成为最受欢迎企业解决方案。本文通过分析J2EE体系结构及相关技术,来指导皮划艇项目系统的实现。  关键词:J2EE;C/S;三层体系结构;EJB;javabean  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30777-03  The Realization of A Rowin
期刊
摘要:EDA技术发展迅速,Electronics Workbench(简称EWB)是目前各种电子电路辅助分析与设计软件中最优秀的软件之一,该软件具有模拟和数字电路的设计、分析、仿真功能。介绍一种基于EWB仿真平台设计交通信号灯控制系统的方法。  关键词:EDA;EWB;交通信号灯;控制系统  中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)15-30821-03  De
期刊
摘要:针对当前开发工具提供的系统控件的不足,通过一个自定义控件的开发实例,分析和讨论了用C#进行自定义控件开发的方法。该方法可以应用于有特殊要求的软件开发。  关键词:系统控件;自定义控件;软件开发  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30797-02  Discussion of the Technique of Self-defined Cont
期刊