基于MVC模式的Struts框架研究与应用

2016-02-19 14:15 3 1 收藏

下面是个简单易学的基于MVC模式的Struts框架研究与应用教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

【 tulaoshi.com - 编程语言 】

摘要:Struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。本文讨论了Struts框架实现MVC模式的原理与方法,给出了一个具体的应用实例。

分布式企业应用软件结构复杂、涉及多种技术,对设计开发人员提出了很高的要求。在此情况下,运用设计模式――可复用的设计方案进行软件的设计开发十分必要。MVC模式已被证实是一种成功的软件设计模式,本文主要讨论了一种实现MVC模式的应用框架――Struts,并通过一个实例展示了Struts框架实现MVC模式的方法。

MVC设计模式

MVC(Modle-View-Controller,模型-视图-控制器)模式是Xerox PARC在20世纪80年代为编程语言Smalltalk-80所设计的一种软件设计模式,至今已被广泛使用,并被推荐为Sun公司J2EE平台的设计模式,其为开发交互式应用系统提供了一个优秀的设计模式,受到越来越多开发者的欢迎。

MVC模式主要由3个部分组成:模型、视图和控制器,其结构如图1所示。

  

图1 MVC模式框架

模型表示业务逻辑和业务规则等,在MVC的三个部件中拥有最多的处理任务。它可以用JavaBean和EJB等组件技术来处理数据库的访问。模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

视图是屏幕上的显示。模型进行操作之后,其结果就是通过视图来显示的。在视图中其实没有真正的处理发生,只是作为一种输出数据并答应用户操作的方式。

控制器用于治理用户与视图发生的交互。一旦用户想对模型进行处理时,它不能直接去执行模型,而是通过控制器来间接地实现。控制器能从视图中取值,然后将相应的值传给模型进行处理。控制器接受用户的输入并调用模型和视图去完成用户的需求。

由上述可知,MVC模式的处理过程是:首先由控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图返回数据,并通过表达层呈现给用户。

MVC本身就是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现成的MVC框架,在此之下进行开发,从而取得事半功倍的效果。现在有很多可供使用的MVC框架,由于Struts有完整的文档并且相对来讲比较简单,所以用它开发MVC系统还是比较方便地。

Struts框架

Struts是Apache组织的一个开放源码项目。Struts是一个比较好的MVC框架,提供了对开发MVC系统的底层支持,它采用的主要技术是Servlet,jsp和Custom tag library。其基本构成如图2所示。

  

图2 Struts框架图

由图2可以看出,在Struts框架中Controller功能由ActionServlet和ActionMapping对象构成,核心是一个Servlet类型的对象ActionServlet,它用来接受客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model部分中Action处理器对象之间的映射。

Model部分由Action和ActionForm对象构成。所有的Action处理器对象都是开发者从Struts的Action类派生的子类。Action处理器对象封装了具体的处理逻辑,调用业务逻辑模块,并且把响应提交到合适的View组件以产生响应。Struts提供的ActionForm组件对象可以通过定义属性描述客户端表单数据。开发者可以从它派生子类对象,利用它和Struts提供的自定义标记库结合可以实现对客户端的表单数据的良好封装和支持,Action处理器对象可以直接对它进行读写,而不再需要和request、response对象进行数据交互。通过ActionForm组件对象实现了对View和Model之间交互的支持。

View部分是通过JSP技术实现的。Struts提供了自定义的标记库,通过这些自定义标记可以非常好地和系统的Model部分交互,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,完成对用户数据的封装。

基于MVC模式的Struts框架的应用

下面通过一个具体实例说明如何应用Struts框架构建应用程序。该实例是一个全面预算治理系统中的预算资料模块,包括资料录入、资料查询、资料修改和资料删除四个功能,用于完成预算资料的录入、查询、修改及删除。

具体在使用Struts框架时,对应各个部分的开发工作主要包括:

1、构建视图

在Struts框架中,视图的实现主要采用JSP技术,但与传统的JSP相比有两个显著的不同。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

首先,在Struts下使用JSP开发视图,在页面中没有包含任何的脚本程序,只是单纯的完成数据传送以及接收和显示返回的数据。对数据的处理以及页面的跳转都在业务层中来实现。这样做实现了业务逻辑和表示逻辑的完全分离,提高了一个应用程序的性能和可扩展性,并有利于程序的复用。

第二,Struts框架提供了一组可扩展的自定义标记库,主要包括: Bean标记、 Logic标记、Html标记和模板标记。通过使用标记,可以简化创建用户界面的过程,并且更好地实现数据的封装。通过使用这些自定义标记创建的JSP表单,可以实现和业务层中的ActionForm的映射,非常好地和系统的业务逻辑部分交互。

下面给出资料录入页面的部分实现代码:

<%@ page contentType="text/html; charset=GBK" %>
  <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
  <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
  <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
  <html>
  <head>
  <title>

前期预备资料录入

</title>
  <link rel="stylesheet" type="text/Css" href="../images/mobile.css">
  </head>
  <body bgcolor="#ffffff">
  <html:form action="/information/budgetinfoadd" enctype="multipart/form-data">
  <table width="95%" border="1" cellspacing="1" cellpadding="2" bordercolor="#CBE7F8" align="center">
  <tr bgcolor="#F2F9FD">
  <td width="20%">类型:</td>
  <td>
  <html:select property="infoType" styleClass="input2">
  <html:options collection="TypeList" property="id" labelProperty="typeName"/>
  </html:select>
  </td>
  </tr>
  ……
  </table>
  </html:form>
  </body>
  </html>

程序中首先引入了HTML、Bean和Logic标记库,然后用action指出调用的Action组件的绝对路径,标记<html:form>和</html:form>封装了表单数据,在业务层中用相应的ActionForm组件可以将输入的数据全部得到。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

可以看出在视图中没有进行任何的业务逻辑的处理,其主要作用是给出客户端显示的信息和处理结果,以及请求的转发,它是和用户交互的接口。

2、构建模型

模型采用JavaBean和EJB组件,设计和实现系统的业务逻辑。根据不同的请求从Action派生具体Action处理对象,完成“做什么”的任务来调用由Bean构成的业务组件,创建由ActionForm 的派生类实现对客户端表单数据的封装。

下面以BudgetInfoAddForm这个ActionForm Bean进行说明:

……

public final class BudgetInfoAddForm extends ActionForm {
  private String infoType;
  private String title;
  private String content;
  private FormFile infoFile;

这里表示BudgetInfoAddForm继续于ActionForm,在这个Bean中定义了视图中所要显示数据信息的参数,包括infoType,资料分类;title,资料标题;content,资料内容;infoFile, 资料文件。同时在BudgetInfoAddForm中提供了设定和访问这些参数的方法:

public String getInfoType()
  public void setInfoType(String infoType)
  public String getTitle()
  public void setTitle(String title)
  public String getContent()
  public void setContent(String content)
  public FormFile getInfoFile()
  public void setInfoFile(FormFile infoFile)
  public void reset(ActionMapping mapping, HttpServletRequest request) {
  title = null;
  content = null;
  infoFile = null;
  }

3、构建控制器

在Struts应用框架中,中心控制器(ActionServlet)是由Struts框架本身所提供,开发人员一般无须对该ActionServlet进行再次开发;负责具体业务处理的Action类则是开发者开发实现的重点,在这些Action对象中会进行所有的业务操作,处理完毕,由Struts的ActionServlet转向到jsp页面,将处理结果返回给客户端。

在预算资料模块中,实现了四个Action:BudgetInfoAddAction,用于资料录入; BudgetInfoContentAction,用于资料查询; BudgetInfoUpdateAction,用于资料修改;BudgetInfoDelAction,用于资料删除。

4、建立配置文件

Struts框架中有两个配置文件web.XML和struts-config.xml,用于配置Struts系统中的各个模块之间的交互。通过对这两个配置文件的配置,把Struts框架中MVC的各个部分联系起来,实现了一个真正的MVC系统。

结束语

Struts是一种基于MVC设计模式的企业级Web应用开发框架,它的设计目的是从整体上减轻构造企业Web应用的负担。其自带的标记库,能大大提高开发效率,同时提高了系统的可维护性和可扩充性。本文在总结Struts框架技术及其工作原理的基础上给出了一个应用实例,为今后更好的应用Struts框架开发Web应用程序提供了参考。

来源:http://www.tulaoshi.com/n/20160219/1606535.html

延伸阅读
标签: Web开发
本文将为您提供关于Spring MVC框架的配置技巧,以帮助管理基于Spring的web应用程序的多个实例。本配置管理主题常被学术界所忽略,但是,这对于现实的web开发尤为重要。本主题并不直接关联任何具体的技术,因此,我们将从最基本的概念开始对这个问题进行说明。下面,我们将根据Spring MVC框架,为基于本技术开发的项目提供一系列的解决方案。 ...
创建Web应用的配置文件 对于Struts应用,它的配置文件web.XML应该对ActionServlet类进行配置,此外,还应该声明Web应用所使用的Struts标签库,本例中声明使用了三个标签库: Struts Bean、Struts Html和Struts Logic标签库。例程1为web.xml的源代码。 例程1 web.xml ?xml version="1.0" encoding="UTF-8"? !DOC...
从一个小例子开始,我们在上网浏览网页的时候经常需要看到一些多媒体的信息, 比如一端小录象,那么是不是在包括IE在内的浏览器会给自己加上一个多媒体播 放功能呢?答案显然是否定的。但显然我们也看到了听到了那些我们所需要的内容。 大家一定会说,这是因为我们的系统中有像Media player,RealOne Player这样 的播放软件,浏览器在需要它...
一:概念介绍 1:)资源 可以使用的系统资源.比如注册用户是一种资源,修改用户信息也是一种资源. 资源在系统中呈现为一棵树.假如用户管理是一个节点.用户注册,用户信息 修改为用户管理的叶子。叶子具有不可分割性. 2:)角色 绑定可操作资源的集合。 比如系统管理员,可以使用全部资源. 一般用户,...
摘 要 Spring框架是一个优秀的多层J2EE系统框架,Spring本身没有提供对系统的安全性支持。Acegi是基于Spring IOC 和 AOP机制实现的一个安全框架。本文探讨了Acegi安全框架中各部件之间的交互,并通过扩展Acegi数据库设计来实现基于Spring框架的应用的安全控制方法。 要害词 Spring ;Acegi ;认证; 授权 引言 ...

经验教程

615

收藏

11
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部