毕业设计论文基于MVC模式的电子商务系统设计

上传人:痛*** 文档编号:45633349 上传时间:2021-12-08 格式:DOC 页数:47 大小:849.50KB
收藏 版权申诉 举报 下载
毕业设计论文基于MVC模式的电子商务系统设计_第1页
第1页 / 共47页
毕业设计论文基于MVC模式的电子商务系统设计_第2页
第2页 / 共47页
毕业设计论文基于MVC模式的电子商务系统设计_第3页
第3页 / 共47页
资源描述:

《毕业设计论文基于MVC模式的电子商务系统设计》由会员分享,可在线阅读,更多相关《毕业设计论文基于MVC模式的电子商务系统设计(47页珍藏版)》请在装配图网上搜索。

1、HUNAN UNIVERSITY毕业设计(论文)论文题目基于MVC模式的电子商务系统设计 学生姓名学生学号专业班级计算机科学与技术(6)班学院名称计算机与通信学院指导老师学院院长2007 年 6 月 1 日基于MVC模式的电子商务系统设计摘 要 基于Browser/Server结构的Web应用,因其具有易用性、通用性和良好的可扩展性等优点而迅速发展,正逐渐成为实现电子商务系统的主流技术。Struts框架是MVC设计模式的一个应用实例,应用Struts框架可以减轻设计和开发大型企业级软件的负担,使设计人员和编程人员在较短的时间里就能够开发出系统原型。本文在剖析MVC模式的设计思想后,总结了基于M

2、VC模式开发Web应用程序的优缺点;研究了基于MVC模式的Struts框架的工作原理和实现机制;接着作者将实现MVC设计模式的Struts框架引入到电子商务系统的开发中,并结合一个具体实例网上购物系统开发,实践了应用Struts框架开发Web应用程序的全过程。在开发过程中,通过应用MVC设计模式实现了表示逻辑和业务逻辑的分离,为系统的开发和维护提供了更大的灵活性和更好的可管理性。通过实践证明,基于MVC设计模式和Struts框架不但能够有效地解决传统Web应用程序开发中存在的问题,而且采用分层和模块化设计,使得系统流程清晰,易于扩展和维护。关键字:MVC ,Struts框架,设计模式,网上购物

3、系统E-commerce system development based on MVC pattern AbstractWeb-based applications with the Browser/Server mode make great progresses for its general availability, which is easy use and good expansibility in the design of e-commerce system development. Struts is an application instance of MVC patte

4、rn, it can be used to reduce workload obviously in order to make the engineers to develop the system prototype rapidly.In this paper, after analysing the design idea of MVC pattern,we get the conclusion of advantage and disadvantage of the Web application based on MVC pattern.Then researching the wo

5、rk principle and the process of realization of Struts framework based on MVC pattern. The author applies the Struts framework based on MVC design to the e-commerce system developmentWith an instantce of shopping System on line developement,we carry out the whole process of developing web application

6、 with Struts framework. In this case, distinction between description logic and business logic become realiable within the MVC design pattern, which means better flexibility and easier management the exploration of a system. It proves that the MVC pattern and Struts Framework are a good choice to de

7、velopment of Web Applications, considering its functional classification, system extensibility, and maintainability.Keywords: MVC , Struts, degign pattern, Net shopping system目 录1 绪论11.1 课题设计背景及目的11.1.1设计背景11.1.2 设计目的21.2 国内外研究状况21.3 课题设计方法21.4 本文的主要研究内容31.5 论文的构成32 MVC设计模式42.1 什么是MVC设计模式52.2 MVC的组成

8、52.4 MVC的处理过程72.5 MVC模式的优点72.6 MVC模式的缺点83 Struts 框架93.1 Struts ActionServlet 控制器对象93.2 Struts Action Classes103.3 Struts Action Mapping113.4 使用ActionForward导航123.5 Struts ActionForm Bean捕获表单数据133.6 Struts配置文件简介153.6.1 有关Struts Controller及其相关的的配置描述153.6.2 有关struts tag lib的配置描述163.6.3 有关Struts Action

9、Mapping的配置描述163.6.4 Form-bean元素173.6.5 Action元素173.7 Struts 标签库194 基于MVC模式的网上购物系统设计204.1 网上购物系统设计的总体方案204.1.1系统概述204.1.2 系统需求204.1.3 系统功能214.2 网上购物系统模块功能分析214.2.1 模块划分214.3 数据库设计224.3.1 表的设计224.3.2 基础类类的设计224.4 系统模块设计234.4.1 用户注册模块234.4.2 购物模块244.4.3 帐户管理/查询交易模块254.4.4 基本设置模块254.4.5 商品管理模块264.4.6 订单

10、管理模块264.4.7 统计模块274.5 Struts标签在JSP 页面中的应用274.5.1 标签284.5.2 标签284.5.3 标签284.5.4 标签284.5.6 标签284.5.7 标签294.5.8 标签294.5.9 标签294.5.10 标签294.5.11 超连接标签294.5.12 在其余的JSP页面中标签304.6 Struts-config.xml文件的配置305 网上购物系统功能测试325.1 系统的调试325.2 系统测试326 总结和展望376.1 总结376.2 新技术的展望376.2.1 JSF (Java Server Faces)376.2.2 AS

11、P.NET 2.038致 谢39参考文献401 绪论1.1 课题设计背景及目的1.1.1设计背景新经济时代的到来改变了每一个行业发展的速度与方向,而电子商务成为了新经济的代言人,它集中了当今世界最先进的技术、最有效快捷的传播沟通方式,并且符合世界经济一体化的潮流。经济学家预测电子商务将成为未来流通产业的主流形式,自然而然, 开展电子商务所使用的技术平台、网站开发和网页开发工具、常用的网页开发软件也向着多而精的方向发展! 在现代应用程序开发中,多层Web应用的开发已成为主流。但是,在多层Web体系结构的设计中,仍然存在着程序可重用程度低、维护工作繁琐、应变能力较弱等不足。同时,多层Web应用软件

12、需要面对复杂的网络环境、多样化的用户需求、灵活的业务模式、复杂的业务流程、众多的组织机构及层次和角色分工等问题,在业务和技术上也是复杂多变的。因此,如何组织应用程序以实现简单高效的程序编写、升级、维护和扩展,是当前Internet技术发展的热点之一,也是一个很值得探讨的研究课题。随着面向对象技术的不断发展,许多系统提供了与应用相关的面向对象框架供开发人员使用,以简化应用程序的开发。框架是可重用的、“半成品”应用程序,可以在它的基础上开发特定的应用程序。一个框架由组件的集合构成,这些组件为解决目标领域问题提供了可重用的体系结构。利用这个可重用的体系结构,使得这些问题的解决变得十分容易。基于J2E

13、E平台的MVC模式为采用J2EE技术的Web应用程序开发提供了一个可重用的体系结构。MVC模式是专为交互式系统应用开发所设计的一种设计模式。正是由于MVC模式在交互式系统开发中所体现的强大优势,而被开发人员逐步引入到J2EE体系之中,成为J2EE进行交互式应用开发的重要模式。特别是Struts架构更是Web应用开发的一个非常重要的设计模式。框架Struts是Apache组织的一个项目,像其他的Apache组织的项目一样,它也是开放源码项目。Struts是一个比较好的MVC框架,主要采用大多数开发者熟知的JavaBean,Java Server Page(JSP), Servlet等标准技术,对

14、MVC设计模式的三个部分提供了对应的实现组件,它的目的是为了帮助开发人员减少运用MVC设计模式开发Web应用的时间1。其中对应用程序的用户界面表示和数据的后端逻辑处理代码进行了抽象,整合了Servlet和JSP在Web应用开发上的优势以建立灵活性好、扩展性强、复用程度高的应用系统。1.1.2 设计目的利用现有的网络资源,快速掌握电子商务原理与程序设计的精髓;掌握MVC模型、Struts框架的运行机制并能够将之运用到实践。1.2 国内外研究状况MVC是Xerox PARC在20世纪80年代为编程语言smalltalk-80发明的一种设计模式,至今已经被广泛使用2。MVC模式利用控制器来分离模型和

15、视图,达到层间独立的效果,能够有效地解决在Web应用系统开发过程中由于系统结构的复杂程度较高而带来的诸多关键性问题,如代码之间的独立性问题,代码的易维护性问题,组件的可重用性问题,不同技能的开发人员如何分工的问题等等。MVC模式已被推荐为Sun公司J2EE平台的设计模式,基于MVC模式的Web应用,更是受到越来越多的欢迎。框架是特定应用领域中的面向对象软件重用技术,是由特定应用领域的软件体系结构所决定的软件架构3。应用框架可以降低软件开发的成本、提高软件质量。随着面向对象技术、Web技术和J2EE技术的发展,软件架构技术在Web开发中得到了广泛的应用。近年来,涌现出许多Java Web层开源框

16、架,据2004年3月的初步统计,共有54种,如Struts, WebWork, Spring MVC等4。Struts是Apache基金会Jakarta项目组的一个Open Source项目,它采用MVC模式,能很好地帮助java开发者利用J2EE开发Web应用。Struts很好地实现了业务逻辑与用户界面的分离,同时,它提供了大量的自定义标签库,可以在JSP页面中分离动态显示逻辑与静态的HTML代码,使页面代码更清晰,可读性大大提高。Struts作为一个不断升级中的开源项目,功能越来越强大, 已经成为MVC模式的首选框架,在国内外许多大型B/S项目中得到应用。1.3 课题设计方法 基于课题的要

17、求和当今开发web技术的潮流,作者选用了JBuilder 作为开发环境。Jbuilder5是Borland推出的功能强大的Java集成开发工具,也是处于市场领先地位的跨平台开发环境。它在构建企业级的应用方面具有明显的优势,从应用的定义、设计、开发、测试、部署到这些过程中的管理,都为之提供了便利。在本次设计中所用到的Jbuilder 2006 能与目前主要的应用服务器进行继承开发,如Borland Enterprise Server AppServer Edittion、 Generic AppServer、Jboss、Tomcat、BEA Weblogic Server等等,并支持本地或者远程

18、执行和调试EJB。另外,还集成了许多优秀的开源项目,如Struts、Cocoon、Ant、Junit等。在此系统设计中,直接利用了集成的Struts框架进行MVC模式的设计,运用了集成的服务器Tomcat。选择了由微软公司提供的Microsoft Access 2003为数据库后台服务。1.4 本文的主要研究内容本文的重点是如何基于Struts框架实现对Web层的开发。主要完成了下面几项工作:1. MVC设计模式的研究。对MVC设计模式进行了的研究,理解了该模式的模型、视图、控制器三部分在构成Web应用程序框架中所起的作用,并总结出使用此模式所存在的优势与不足。2. Struts框架的研究。S

19、truts是实现MVC模式的一个优秀的应用框架。本文对该框架的工作原理及核心组件进行了分析及研究。3. 通过对MVC设计模式及Struts框架的研究,以及对多层Web体系结构各层实现方式的分析与对比,最终总结出开发Web应用程序的技术方案,并成功的应用到实际开发项目中,从而得到比较合理的基于Struts框架的Web应用开发的技术组合。1.5 论文的构成第一章 绪论部分简要阐述了本课题的研究背景,国内外的研究现状和成果,并介绍了课题研究的方法和论文的主要内容。第二章 介绍了设计模式概念并详细介绍了MVC设计模式。详细分析了该模式的三个组成部分的主要功能,并总结了该模式的优势与不足。第三章 主要介

20、绍基于MVC模式的Web应用框架Struts。对Struts框架的各组件和处理流程进行了详细的阐述。第四章 对网上购物系统进行了需求分析和模块的划分,然后利用Struts框架设计了个模块,即用实例说明了Struts框架的应用。 第五章 对网上购物系统进行了测试及预览,验证了课题设计方法的正确性。第六章 总结与展望。对本文中所做的工作进行总结,并对目前新技术的发展做了展望。2 MVC设计模式2.1 什么是MVC设计模式MVC是一种目前广泛流行的软件设计模式6。近来,随着J2EE 的成熟,它正成为J2EE平台上推荐的一种设计模式。随着网络应用的快速增加,MVC模式的设计思想也影响着Web应用的开发

21、7,它为开发者理解和分析应用模型提供最基本的分析方法、清晰的设计框架和规范的依据。2.2 MVC的组成MVC把 一个应用的输入、处理、输出流程按照视图、控制、模型的方式进行分离,将Web应用分为三层:视图层、控制层、模型层,也称为视图View、控制器Controller8,9。模型,视图,控制器三者之间的关系如图 2.12 图2.1 MVC设计模式 1. MVC模型( Model)模型指的是真正完成任务的代码,包含应用系统的核心功能,表示一个应用系统的数据,并且包含访问、维护和管理这些数据的逻辑。所有属于应用系统持久状态的数据都应该保存于模型对象里。模型提供的服务必须足够适用于不同的终端。一个

22、模型聚集了相关的数据和操作,以提供一个详细而精确的服务:这些被封装在操作中的抽象事物的功能被模型化。一个模型的接口提供了访问和更新模型状态,执行封装在模型中的复杂进程的方法。模型服务被控制器访问,用于查询或更改模型的状态。当模型状态发生变化时,模型会通报给视图。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性,提高了系统设计的可重用性。在MVC的处理过程中,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处

23、理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。2. MVC视图(View)视图是用户看到并与之交互的界面。视图向用户显示相关数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型.视图还能接收模型发出的数据更新事件,当模型发生改变时,视图也将随之改变,以维持系统数据的一致性,从而对用户界面进行同步更新。在MVC模式下,通常的设计前提是界面任务较小。当然视图也应该具有一定的功能性并遵守可用性的约束,但视图界面不应当处理数据。事实上,视图的每一部分都只能包含采集数据的逻辑,并把采集到的数据传递给设计模

24、式中的其他组成部分进行处理。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和以及XHTML, XML/XSL, WML等一些标识语言和WebServices。如何处理应用程序的界面变得越来越有挑战性.MVC一个大的好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。3. MVC控制器 (Controller)控制器是联系模型与视图之

25、间的纽带,控制模型和视图之间的交互过程。它获取并翻译用户输入的动作,指定执行该动作的模型,或者根据用户的输入和执行的结果来选择下一个视图。控制 器 封 装的是外界作用于模型的操作。通常,这些操作会转发到模型上,并调用模型中相应的一个或者多个方法。一般控制器在模型和视图之间起到了沟通的作用,处理用户在视图上的输入,并转发给模型处理。这样模型和视图两者之间可以做到松散藕合,甚至可以彼此不知道对方,而由控制器连接起这两个部分。例如,当Web用户单击Web页面中的提交按钮发送来HTML表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。2.4 MVC的处理过程

26、首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理;然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。2.5 MVC模式的优点首先,最重要的是应该有多个视图对应一个模型的能力.即减少了代码的维护量,一旦模型发生改变,也易于维护。现在一个应用程序需要用越来越多的方式访问。在MVC设计模式之中,无论用户想要Flash界面或是WAP界面,用一个模型就能处理它们。因为MVC己经将数据和业务规则从表示层分开,模型返回的数据没有进行格式化,同样的构件能被不同界面使用,这当然包含HTML的表现方式,也有Flash和WAP的表

27、示处理界面。同时模型也有状态管理和数据持久性处理的功能,例如,基于会话的购物车和电子商务过程也能被Flash网站或者无线联网的应用程序所重用。因而在MVC设计模式中应用开发人员可以最大化的重用他的代码。其次,分离数据和显示,实现了模型的可移植性。一方面,分离数据和其表示,使得添加或者删除一个用户视图变得很容易,甚至可以在程序执行过程中动态的进行用户视图的更新。模型和视图能够单独的开发(即业务逻辑和用户表现的分离),增加了程序了可维护性,可扩展性,并使测试变得更为容易。另一方面,将控制逻辑和表现界面分离,允许程序能够在运行时根据工作流,用户习惯或者模型状态来动态选择不同的用户界面。大部分Web应

28、用程序都是用像ASP,PHP等过程化语言来创建的。其将像进行数据库访问查询的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,这需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它给开发者带来的好处是无庸质疑的。再次,由于一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变。一个应用的业务流程或者业务规则的改变只需改动MVC的模型层。因为模型是自包含的,并且与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。如果需要数据库从SQL Server移

29、植到Oracle,或者改变的基于RDBMS数据源到LDAP,开发人员只需改变他的应用模型即可。一旦开发人员正确的实现了模型,不管数据来自数据库或是LDAP服务器,视图将会正确的显示它们。由于运用MVC的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想开发者能构造良好的松祸合的构件。2.6 MVC模式的缺点MVC的 缺点在于它没有明确的定义,所以一个开发人员完全理解MVC并不是很容易。使用MVC也需要精心的计划,由于它的内部原理比较复杂,所以开发者需要花费相当可观的时间去考虑如何将MVC运用到应用程序之中。同时由于模型和视图要严格的分离,这样也给调试应用程序到来了

30、一定的困难。每个构件在使用之前都需要经过彻底的测试。但是一旦构件经过了测试,就可以毫无顾忌的重用它们了。还有开发MVC系统比简单的JSP开发要复杂许多,它需要更多的时间学习和掌握。同时新东西的引入会带来新的问题,在选择MVC开发模式时必须仔细考虑这下问题:1、必须基于MVC组件的方式重新思考和设计应用结构。原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程。2、所有的页面和组件必须在MVC框架中实现,所以必须进行附加的开发工作。3、MVC本身就是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现成的MVC框架。如Spring 、Struts 、Ser

31、veletJavaBean等等。 3 Struts 框架 作为典型的MVC模式的Struts是如何控制、处理客户请求的呢?下面将介绍Struts的四个核心组件来具体说明。这几个组件是:ActionServlet。Action Classes,Action Mapping(此处包括ActionForward),ActionFrom Bean10。 3.1 Struts ActionServlet 控制器对象 ActionServlet继承自javax.servlet.http.HttpServlet类,在Struts Framework中扮演的角色是中心控制器。它提供一个中心位置来处理全部的终端

32、请求。控制器ActionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器。 按照Servelt的标准,所有的Servlet必须在web配置文件(web.xml)声明。同样,ActoinServlet必须在Web Application配置文件(web.xml)中描述,有关配置信息如下。 action org.apache.struts.action.ActionServlet 全部的请求URI以*.do的模式存在并映射到这个servlet,其配置如下: action *.do 一个该模式的请求URI符合如下格式: http:/www.my_sit

33、e_ 中心控制器为所有的表示层请求提供了一个集中的访问点。这个控制器提供的抽象概念减轻了开发者建立公共应用系统服务的困难,如管理视图、会话及表单数据。它也提供一个通用机制如错误及异常处理,导航,国际化,数据验证,数据转换等。 当用户向服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获得了请求,其就会将请求信息传交给一些辅助类(help classes)处理。这些辅助类知道如何去处理与请求信息所对应的业务操作。在Struts中,这个辅助类就是org.apache.struts.action.Action。通常开发者需要自己继承Aciton类,从而实现自己

34、的Action实例。 3.2 Struts Action Classes org.apache.struts.action.Action类是Struts框架包的核心。它是用户请求和业务逻辑之间的桥梁。每个Action充当客户的一项业务代理。每个Action类都特意设计来执行一个代表客户的单独的业务操作。单独的业务操作并不意味着Action仅仅能执行一项任务。相反,它执行的认为应该被聚合,围绕一个功能单元。即Action执行的任务应该与一个业务操作相关联。在本设计中,为每个应用模块都创建了一个Action来负责各个模块的功能。在系统中,一旦正确的Action实列被调用,就会调用execute()

35、方法。我们可以根据需要对execute()方法进行扩展。此方法返回一个ActionForward对象,ActionForward类代表Web资源的逻辑抽象。典型的资源是Jsp页面或Java Servlet。在此资源是Jsp页面。ActionForward类是一个资源包装器,这样,实际资源与应用程序的耦合就会减少。实际资源仅仅在配置文件中指定(作为forward元素的 name、 path 、和redirect 属性),而不是在代码本身指定。根据redirect 属性的值,RequestDispatcher可以执行ActionForward的转发或者重定向。要想从Action返回ActionFo

36、rward,可以在Action类中动态地创建它,或者用更常用的方法,使用动作映射来定位在配置文件中预先设置的ActionForward。下面的代码段说明了根据ActionForward的逻辑名怎样使用动作映射定位ActionForward:return mapping.findForward(“netShopping”);这里netShopping的参数传给了ActionMapping实列的findForward()方法。findForward()方法中的参数必须与在globle-forward部分中指定的名称之一相匹配,或者调用它的动作的名称相匹配。ActionMapping类中的findF

37、orward()方法首先调用findForwardConfig()方法检查是否在动作级指定了带有对应名称的forward元素。如果没有,则检查globle-forward部分。如果发现了一个匹配的ActionForward,它就返回到execute()方法。public ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response) throws java.io.IOExcepti

38、on,javax.servlet.ServletException 当Controller收到客户的请求的时候,在将请求转移到一个Action实例时,如果这个实例不存在,控制器会首先创建,然后会调用这个Action实例的execute()方法。Struts Framework为应用系统中的每一个Action类只创建一个实例。因为所有的用户都使用这一个实例,所以你必须确定你的Action 类运行在一个多线程的环境中。图3.1显示了一个execute()方法如何被访问: 图3.1 Action实例的execute()方法 注意,用户自己继承的Action子类,必须重写execute()方法,因为A

39、ction类在默认情况下是返回null的。 3.3 Struts Action Mapping 上面讲到了一个客户请求是如何被控制器转发和处理的,但是,控制器如何知道什么样的信息转发到什么样的Action类呢?这就需要一些与动作和请求信息相对应的映射配置说明。在struts 中,这些配置映射信息是存储在特定的XML文件(比如struts-config.xml)。 这些配置信息在系统启动的时候被读入内存,供struts framework在运行期间使用。在内存中,每一个元素都与org.apache.struts.action.ActionMapping类的一个实例对应。下表就显示了一个登陆的配置

40、映射。上面的配置表示:当可以通过/logonAction(此处假设配置的控制器映射为*.do)提交请求信息的时候,控制器将信息委托struts.action.LoginAction处理。调用LogonAction实例的execute()方法。同时将Mapping实例和所对应的LogonForm Bean信息传入。其中name=LoginForm,使用的form-bean元素所声明的ActionForm Bean。有关form-bean的申明如下显示。 3.4 使用ActionForward导航 元素则表示了当Action实例的execute()方法运行完毕或,控制器根据Mapping可将响应信

41、息转到适当的地方。如上面所示,如果客户要注册,则调用add forward,将信息返回到/newAccount.jsp页面。在execute()方法的结尾可以使用下面的实例代码来返回add forward。当然add forward必须在action元素属性中定义,正如上面所声明的那样。 return (mapping.findForward(add); ActionForward对象是配置对象。这些配置对象拥有独一无二的标识以允许它们按照有意义的名称如“success”,“failure”等来检索。ActionForward对象封装了向前进的URL路径且被请求处理器用于识别目标视图。Acti

42、onForward对象建立自元素位于struts-config.xml。一个Struts中元素是属于元素范围。 基于执行请求处理器的execute()方法的结果,当传递一个值匹配指定于元素中name属性的值的时候,下一个视图可以在execute()方法中被开发者用方便的方法org.apache.struts.action.ActionMapping.findForward()选择。ActionMapping.findForward()方法既从它的本地范围又从全局范围提供一个ActionForward对象,该对象返回至RequestProcessor以RequestDispatcher.forw

43、ard()或response.sendRedirect()调用下一个视图。当元素有redirect=“false”属性或redirect属性不存在的时候,RequestDispatcher.forward()被执行;当redirect=“true”是,将调用sendRedirect()方法。下例举例说明了redirect属性的用法: 如果redirect=true, URL建立如/contextPath/path因为HttpServletResponse.sendRedirect()中解释URL采用”/”开头相对于servlet容器根目录。 如果redirect=false, URI建立如/p

44、ath因为ServletContext.getRequestDisptacher()采用虚拟目录相关URL。3.5 Struts ActionForm Bean捕获表单数据 在上面讲解ActionServlet,Action Classes和Action Mapping的时候,我们都提到了ActionForm Bean的概念。ActionForm类是属于Struts视图组件。几乎每个Web应用程序都要接受用户的输入。在本设计中用户输入用户名和密码、电话及地址等信息。HTML提供必要的组件在浏览器中生成输入字段,包括文本框、单选按钮、复选框和按钮。在建立这些类型的页面时,必须将输入组件套入在HT

45、ML表单的元素里。而由Struts框架包依靠org.apache.struts.action.ActionForm类作为关键组件来处理这些业务1。ActionForm派生的对象用于保存请求对象的参数,因此它们和我们用户紧密联系。 一个ActionForm类被RequestProcessor建立。这是发生在已完成向前进到一个URL,该URL为映射到控制器Servlet而不是JSP和相应的动作映射指定的表单属性的。在这个情况下,如果没有在指定的活动范围内找到,RequestProcessor将尝试寻找可能导致创建一个新ActionForm对象的表单bean。该ActionForm对象在指定的活动范

46、围内用元素的name属性找到;RequestProcessor将随后重新安排表单属性,用请求时参数填充表单,随即调用表单对象的validate()方法以履行服务器端用户输入验证。仅当ActionMapping对象中validate属性被设为true时,validate()方法被调用;这就是默认的行为。request.getParameterValues(parameterName)被用于得到一个String对象,它用来表单填充;验证的结果应该是一ActionErrors对象,用org.apache.struts.taglib.html.ErrorsTag来显示验证错误给用户。ActionFor

47、m也可以被用于为当前用户保存即将被一个视图引用的中间模型状态。当一个表单对象被RequestProcessor找到,它被传递到请求处理器的execute()方法。一个ActionForm对象也可以被请求处理器建立。表单对象建立目的是提供中间模型状态给请求范围JSP使用;这将确保对象不会在有效性过期后仍然存在。默认的,所有的表单都被保存为会话范围。会话中表单对象脱离有效性的存在可能导致浪费内存,同样的,请求处理器必须跟踪保存在会话中的表单对象的生命周期。一个好的捕获表单数据的实践是为横跨多用户交互的相关表单用一个单独的表单bean。 另外,在ActionForm的使用中,Struts提倡使用到值

48、对象(Value Object)。这样将使客户或开发人员,对数据状态与对象状态能够更加清晰的理解和使用。 ActionForm可以有两个不同层次的作用域:请求(request)和会话(session)。如果使用请求作用域,ActionForm只有在请求/响应循环结束时才能使用。一旦响应返回到客户机,ActionForm及其中的数据就不能再被访问。如果需要保持表单数据的时间比单个的请求更长,用户可以配置ActionForm拥有会话作用域。如果应用程序像向导对话框那样跨多个页面捕获数据,这样做可能时必需的。一个被配置会话作用域的ActionForm将会保持在会话中,直到它被删除或被另一个对象替换,

49、或者直到会话时间结束。框架包没有一个内置的功能来自动清除具有会话作用域的ActionForm对象。如同任何其它放在HttpSession中的对象一样,是应用程序定期对储存在那里的资源执行清除。这同放在请求作用域的对象发生的情况有稍微的不同,因为一旦请求结束,它们就不再被引用,而可以被垃圾收集器收回1。本设计中我们需要把顾客购买商品保存到会话中,所以shoppingForm的范围是session。其余的ActionForm类的scope均为request。对于每一个客户请求,Struts framework在处理ActionForm的时候,一般需要经历如下几个步骤: 1) 检查Action的映射

50、,确定Action中已经配置了对ActionForm的映射 2) 根据name属性,查找form bean的配置信息 3) 检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例。 4) 假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。 5) 否则,就重新构建一个form bean的实例 6) form bean的reset()方法备调用 7) 调用对应的setter方法,对状态属性赋值 8) 如果validatede的属性被设置为true,那么就调用form bean的validate()方法

51、。 9) 如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。 注意:直接从ActionFrom类继承的reset()和validate()方法,并不能实现什么处理功能,所以有必要自己重新覆盖。 3.6 Struts配置文件简介 Struts Framework根据配置文件使得ServletAction,ActionMapping,Action , ActionForm这几个不同层次的组件相互交互,协调的工作。这些配置文件是在系统启动的时候,读入导内存中,供控制器使用的。 Struts framework主要包

52、括三部分的配置描述,一个是指定有关Struts Controller及其相关的的配置描述(Initialization Parameters),一个对struts taglib的描述,一个是struts组件(ActionMapping,Action,ActionForm)之间相互映射协调的关系 3.6.1 有关Struts Controller及其相关的的配置描述 因为Struts Controller的主要类ActionServlet是继承自HttpServlet,所以必须像配置一个Servlet那样在部署描述符(Web.xml)中配置ActionServlet类及其访问映射。 当您第一次创

53、建基于Struts的Web应用程序时,将为您创建一个部署描述符,这通常就足够了。该文件包括下列条目: 条目定义用于Web应用程序的servlet. 和指示ActionServlet (标识为“操作”)接收HTTP请求并确定如何响应。 表示servlet初始化参数. “config”指示ActionServlet的行为由指定的配置文件来指导,该配置文件通常具有以下名称: WEB-INFstruts-config.xml “debug”具有整数值,它指示将有关处理的详细信息写至控制台的程度。 “detail”具有整数值,它指示将“映射”详细信息(如后面所述)写至控制台的程度。导致在启动应用程序时装

54、入servlet。 元素标识这样的命名模式:当命名模式由URL进行匹配时,Web服务器就将控制权移交给ActionServlet。考虑下面各种情况: 访问了ActionServlet,原因是“操作”(中的元素的内容)与“操作”(中的元素的内容)相匹配。 元素指定URL的结尾的命名模式。每个URL的开头都是应用程序上下文路径。按照惯例,ActionServlet调用对象以响应与命名模式“*.do”(其中“*”是通配符)一致的URL。 元素指示获得初始控制权的特定于应用程序的代码; 元素指示显示哪个JSP来响应错误;在本例中,错误为如下所示: 404 (找不到资源) 500 (Web服务器内部发生

55、错误) 每个元素都使相对URL(相对于Web.xml)与标记库描述符(相对于We应用程序根目录)相关联。每个JSP都可以使用同一个URL来表示给定的标记库,而Web.xml确定引用了哪个文件。在Jbuilder中,web.xml文件的配置信息是根据在建立文件过程中所选的相应配置自动生成的,所以勿需再配置。 3.6.2 有关struts tag lib的配置描述 如果你的web application打算使用Struts的taglib,那么你有必要在web.xml中对struts taglib进行配置描述。 3.6.3 有关Struts Action Mapping的配置描述 作为先前描述的we

56、b.xml设置的结果,Web应用程序服务器将请求的一个子集按路径发送至ActionServlet,它通常调用一系列操作和JSP。ActionServlet的响应是基于配置文件struts-config.xml的内容的。 一般struts-config(version1.1)包含了如下几个部分: (1)form-bean (2)global-forwards (3)action-mappings (4)data-sources 我们知道,对于这样的一个请求,如:表示为“/loginAction.do”,执行下列步骤: 1、 寻找操作类对象(继承org. apache.struts.action.

57、Action的类) 2、 ActionServlet调用操作类对象的执行方法execute() 操作类中的执行方法的特征符为如下所示: 映射对象(ActionMapping),它包含指示如何响应方法的每个可能结果的规则(“映射”) Struts表单bean(ActionForm),它保存发送至HTML表单或接收自HTML表单的数据请求和响应对象(HttpServletReques/ HttpServletResponse) 3、 从执行方法返回ActionForward对象,用于指导ActionServlet接着访问哪个操作类或JSP返回的ActionForward对象中的信息取决于两个值:方

58、法的结果(如在“成功”或“故障”等字符串中所述)映射对象,它包含从Struts配置文件中读取的信息要弄明白某些运行时关系,要明白struts-config.xml该文件包括下面的一组条目: 标记标识每个表单bean 标记包括用于指导应用程序流的信息,每个子标记都使相对URL与操作类和潜在的后续操作相关。 3.6.4 Form-bean元素 Struts配置文件中的一个示例子元素为如下所示: 每个子元素都包括下列属性: name 表单bean的名称,稍后在配置文件中会用到。ActionServlet举例说明了该bean(如果需要的话)并在将对bean的引用存储在请求或会话对象中时将该名称用作键。

59、 type 类的全限定名称,它继承org.apache.struts.action.ActionForm该类必须在类路径中。接受“Struts贸易样本”中的注册的表单bean包括HTML注册表单中每个字段的getter 和setter方法。3.6.5 Action元素 Struts配置文件中的一个示例元素为如下所示: action path=“/login” type=“struts.action.LoginAction” name=“loginForm” input=“/register.jsp” scope=“request” 每个action元素都包括下列属性中的某些属性或所有属性: path 将请求指定为非限定URL,不带文件扩展名(例如,“/login”)请求是根据元素中的其它属性来处理的。type 指定在发出请求时调用其执行方法的操作类的全限

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!