毕业设计(论文)基于MVC设计模式的Java Web应用对网上购书系统的设计与实现_第1页
毕业设计(论文)基于MVC设计模式的Java Web应用对网上购书系统的设计与实现_第2页
毕业设计(论文)基于MVC设计模式的Java Web应用对网上购书系统的设计与实现_第3页
毕业设计(论文)基于MVC设计模式的Java Web应用对网上购书系统的设计与实现_第4页
毕业设计(论文)基于MVC设计模式的Java Web应用对网上购书系统的设计与实现_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1.绪论 11.1课题背景11.1.1 网上书店系统发展11.1.2 网上书店系统发展现状21.1.13 网上书店发展的优越性 21.2 课题目的与意义32.mvc设计思想42.1 mvc设计思想概论42.1.1 mvc中的m组件42.1.2 mvc中的v组件42.1.3 mvc中的c组件52.1.4 mvc中各组件的关系52.2 mvc设计模式特征62.2.1 使用mvc设计模式的优点62.2.2 mvc设计模式的好处 73.系统总体设计和系统功能概述83.1.1 系统设计目标83.1.2 javabean的任务83.1.3 javabean的设计目标及如何被实现93.2 系统功能概述

2、113.2.1 用户登陆系统和用户注册系统 113.2.2 智能化的辨认功能 113.2.3 图书查询功能 113.2.4先进的购书流程 123.2.5 操作过时管理功能 123.2.6 人性化的操作界面 124.系统的详细设计和实现 124.1 前期准备 124.1.1 javabean开发环境 124.1.2 确定书和购物车的属性 134.1.3 事先封装好所有可能出现的误操作 154.14 http会话174.1.5建立session 174.2 注册登陆系统的设计和实现 184.3 智能化辨认功能的实现 234.4 查询功能的实现 254.5 购书系统的实现 275.关键技术的介绍 3

3、35.1 servlet335.1.1 servlet的解析和载入335.1.2 servlet的初始化335.1.3 servlet的多线程和映射345.1.4 servlet的卸载345.1.5 servlet的映射技术355.1.6 servlet的环境355.2 jdbc技术 365.2.1 jdbc工作机制 365.2.2 jdbc api375.2.3 jdbc的优点和缺点 385.3 javabean技术 395.3.1 javabean概述 395.3.2 javabean和企业bean的区别395.3.3 javabean的发展 395.3.4 javabean的需求 39结

4、论 40谢辞40参考文献42基于mvc设计模式的java web应用对网上购书系统的设计与实现摘要 随着网络技术的发展,internet已成为最具市场潜力的技术领域,使用web技术设计的数据库应用软件,是目前internet市场的技术中坚,各种web应用如电子商务,网上购物等都采用这种方式实现。mvc开发模式可以分离数据访问和数据表现,让开发人员可以开发一个可伸缩性强的、便于扩展的控制器,来维护整个流程。本文采用jsp、servlet、javabean和jdbc等一些java web相关技术实现了一个简单的网上购书系统,该系统通用性强,经过简单的修改就可以应用于更广泛的网上购物系统,具有一定的

5、推广价值。关键词 mvc;jsp;servlet; jdbc; javabean1.绪论1.1课题背景1.1.1课题来源 java这门课程是大学的一门专业课,学的时候十分感兴趣,但毕竟学校里学的真正能运用到实际商业工作中的东西很少。我在实习公司的实习职务就是java开发人员。由于公司正在帮助另外一家公司开发一个网上购物系统,所以最近在公司前辈那学到这一方面的知识比较多一点,同时感觉这样一个系统的实用性很大,所以决定以此来定我的毕业设计课题。当然,网上购物是一个很大的系统,对于毕业设计来说太大而且开发时间过长,并不可能靠我一个人在如此短的时间内完成,所以选择一个其中的分支购书系统。对于这样的一个

6、系统开发的时间相对来说短很多并且单独这样一个系统也可以投入商业活动来赢利了,有一定的实际意义。个人感觉定这样一个课题对于自己实习上的专业技能是一个很好的检验,可以为以后自己的工作做更好的准备,同时可以从公司同事开发的系统中借鉴不少好的东西和自己没想到的东西,同时又可以提出自己的个人想法给公司,当然还能得到同事的相关指点,十分有意义。1.2.1网上书店系统发展internet 的迅速发展正以前所未有的深度和广度影响和改善着人类生活的各个方面,越来越多的人开始意识到internet所蕴含的经济价值的无穷商机,并积极投身于电子商务活动.实际上,电子商务是一些商业行为的电子化,例如网上书店,网上贸易,

7、就网上书店来说,网上书店是目前应用最广,最成功的典范之一,网上书店的崛起对传统的图书流通体系产生了强烈的冲击,有效地缩短了图书流通发行环节,将广大读者,图书,出版者,发行者紧密地结合在一起,大大提高了图书流通率。1.2.2网上书店系统发展现状西方国家网上书店概况:世界上第一家网上书店是1991年在美国联机公司aol采购网络上建立的阅读美国书店,目前最负胜名的是美国西雅图亚马逊图书公司的亚马逊网上书店。它创建于1995年,供书品达310余万种年顾客达500万人次,其价格优惠20-50%。金融结算制度完善,配送服务高效。实现了零库存运转。英国网上书店较著名的有internet书店,德国的网上书店主

8、要有图书在线网上书店。 国内网上书店的概况:自从亚马逊网上书店成功后,中国的网上书店也建立起来。中国最早的网上书店是1997年在杭州新华书店诞生的,在经过年余的艰苦经营,接待了400多位访问者后,悄然引退,而进入1998年后,作为中国书业传统经营力量的新华书店,正式宣布进入网络领域,先是第九届全国书市首次开通书店网站,后来在1998年12月30日上海书城成为国内首家正规的网上书店,读者在家中可以上网完成浏览,选够,付款的全过程。1999年是网上书店迅速发展的一年,商业公司不断进入网上书店有超过几百家,有自己网站的公司有40多家,这个数目还不断增加。1.2.3网上书店的优越性 网上书店在价格,时

9、效性,品种,查询方式等方面都有优势。网上书店是一种直销方式,在到书速度和价格上都有优势,目前网上书店的到书时间在北京,上海,广州等大城市一般为1-3天,在外埠则一般3-10天到书,在价格上一般网上书店都有7.5-9折的折扣,如果是特价书折扣就更多了,网上书店的书目数据是任何订购书目都无法比拟的,亚马逊网上书店有300多万种图书,另外还有音乐系列产品和其它教育产品,刚刚成立的北京图书大厦网上书店也有16万种书目数据,“中国寻书网”目前也有50万种书籍,年度将突破100万种图书,网上书店的书目除书名,著者,价格等信息外,还有封面,内容简介,目次,评论等详细信息。同时网上书店的目录查询功能也是传统的

10、按某种分类规则编排的图书征订目录无法比拟的,其以关键词或主题从网上检索某类文献,查准率与查全率都有一定的保障。另外还有一些书更是以网站包销或总代理的形式进行销售,这就意味着一种全新的电子商务模式的开始。1.3课题目的与意义随着网络技术的发展,internet已成为最具市场潜力的技术领域,使用web技术设计的数据库应用软件,是目前internet市场的技术中坚,各种web应用如电子商务,网上购物等都采用这种方式实现。mvc开发模式可以分离数据访问和数据表现,让开发人员可以开发一个可伸缩性的强、便于扩展的控制器,来维护整个流程。在mvc模式产生之前,业务逻辑全部撰写在表现层jsp中,其弊端是明显的

11、,首先不利于维护,逻辑层与表现层混杂,动辄上千行代码,其次无法复用,整个项目要进行改造时,不得不推倒重来,大大增加了成本。引入mvc模式之后,逻辑层与表现层分离开来,业务逻辑不再关心具体的显示层面,逻辑层的代码量消除了膨胀隐患,表现层也可交由其它非业务人员自由调整,最后完美整合,在层次分工上,比传统模式更加清晰,利于维护,在项目有升迁移植改造需求时,由于业务逻辑层不与表现层直接关联,故可直接使用已有的业务逻辑,大大减少了重构成本。越大的项目中mvc的作用表现的越明显。进行该系统设计时要保证该系统的扩展性,当有新的业务或现有业务规划调整时能够比较容易的实现,为此采用mvc设计模式对此应用系统进行

12、划分,并最终以三层应用的方式进行部署。在本例中,视图(view)部分由一组jsp页面组成,例如购物页面结算页面。该部分主要提供整个网上购书系统的前段数据的显示。控制(control)部分获得用户的请求,然后根据用户的不同请求调用不同模型(model)提供的不同功能,本例中控制部分使用servlet实现,模型(model)部分封装了系统的数据及业务规划。2.mvc设计思想2.1 mvc设计思想概论mvc英文即model-view-controller,即把一个应用的输入、处理、输出流程按照model、view、controller的方式进行分离,这样一个应用被分成三个层模型层、视图层、控制层。

13、2.1.1 mvc中的m组件模型(model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是mvc最主要的核心。目前流行的ejb模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。mvc设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据

14、。抽象与具体不能隔得太远,也不能太近。mvc并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,mvc定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员非常重要。 2.1.2 mvc中的v组件视图(view)代表用户交互界面,对于web应用来说,可以概括为html界面,但有可能为xhtml、xml和applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,mvc设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的

15、处理。业务流程的处理交予模型(model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。 业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。2.1.3 mvc中的c组件 控制(controller)可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。

16、控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。 2.1.4 mvc中各组件的关系模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能,如图1所示。 2.2

17、mvc设计模式特征模型视图控制器设计模式有几个常见特征。用户界面通常是用本身不包含任何业务逻辑的 jsp 文件创建的。这些页面显示 mvc 体系结构的视图组件。将用户界面中需要执行业务逻辑的表单和超链接提交至映射至操作servlet的请求 uri。存在此servlet 类的一个实例,它接收并且处理更改用户与应用程序交互作用的状态的所有请求。此组件表示 mvc 体系结构的控制器组件。操作 servlet 选择并调用一个或多个操作以执行请求的业务逻辑。操作通常通过创建或修改存储为请求或会话属性(取决于它们可用的时间)的 javabean 来处理应用程序与用户交互作用的状态。此类 java bean

18、 表示 mvc 体系结构的模型组件。操作通常使用servlet api 的 requestdispatcher.forward() 设施将控制传递给适当的 jsp 文件以生成用户界面的下一个页面,而不是直接生成用户界面的下一个页面。2.2.1使用mvc设计模式的优点大部分用过程语言比如asp、php开发出来的web应用,初始的开发模板就是混合层的数据编程。例如,直接向数据库发送请求并用html显示,开发速度往往比较快,但由于数据页面的分离不是很直接,因而很难体现出业务模型的样子或者模型的重用性。产品设计弹性力度很小,很难满足用户的变化性需求。mvc要求对应用分层,虽然要花费额外的工作,但产品的

19、结构清晰,产品的应用通过模型可以得到更好地体现。 首先,最重要的是应该有多个视图对应一个模型的能力。在目前用户需求的快速变化下,可能有多种方式访问应用的要求。例如,订单模型可能有本系统的订单,也有网上订单,或者其他系统的订单,但对于订单的处理都是一样,也就是说订单的处理是一致的。按mvc设计模式,一个订单模型以及多个视图即可解决问题。这样减少了代码的复制,即减少了代码的维护量,一旦模型发生改变,也易于维护。 其次,由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。 再次,由于一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变。一个应用的业务流程或者业务规则的

20、改变只需改动mvc的模型层。 控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起完成不同的请求,因此,控制层可以说是包含了用户请求权限的概念。 最后,它还有利于软件工程化管理。由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。2.2.2 mvc 设计模式的好处将模型视图控制器部分应用于 java web 应用程序开发有几个好处: 可以在一定程度上分布开发成果,实现了在 web 应用程序中的一部分的更改不需要对其它部分进行更改。负责编写业务逻辑的开发者可以独立于负责控制流的开发者工作,而 web 页面设计者可以独立于这些开发者工作。

21、可以更容易建立工作原型。可以执行如下操作,例如: 1. 创建一个原型 web 应用程序,它访问几个基于工作站的程序。 2. 更改应用程序以响应用户反馈。 3. 在同一平台或其它平台上实现生产级程序。 除了对程序本身所进行的工作外,只需对配置文件或名称服务器内容进行调整,而不需要对其它源代码进行调整。 可以更容易地迁移旧程序,因为视图与模型和控件是分开的,并且可以根据平台和用户类别进行裁剪。 可以维护由不同位置上的不同技术组成的环境。 mvc 设计具有组织结构,该结构更好地支持可伸缩性(构建更大的应用程序)并且易于修改和维护(原因是任务区分得更清楚)。 3.系统总体设计和系统功能概述3.1.1

22、系统设计目标本系统设计的目标是提高软件的质量与生产率,最终实现软件的工业化生产。质量是软件需求方最关心的问题,用户即使不图物美价廉,也要求个货真价实。生产率是软件供应方最关心的问题,老板和员工都想用更少的时间挣更多的钱。质量与生产率之间有着内在的联系,高生产率必须以质量合格为前提。如果质量不合格,对供需双方都是坏事情。从短期效益看,追求高质量会延长软件开发时间并且增大费用,似乎降低了生产率。从长期效益看,高质量将保证软件开发的全过程更加规范流畅,大大降低了软件的维护代价,实质上是提高了生产率,同时可获得很好的信誉。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率。3.

23、1.2 javabean的任务javabean的任务就是: “write once, run anywhere, reuse everywhere”,即“一次性编写,任何地方执行,任何地方重用”。这个任何实际上就是要解决困扰软件工业的日益增加的复杂性,提供一个简单的、紧凑的和优秀的问题解决方案。 1. 一个开发良好的软件组件应该是一次性地编写,而不需要再重新编写代码以增强或完善功能。因此,javabean应该提供一个实际的方法来增强现有代码的利用率,而不再需要在原有代码上重新进行编程。除了在节约开发资源方面的意义外,一次性地编写javabean组件也可以在版本控制方面起到非常好的作用。开发者可

24、以不断地对组件进行改进,而不必从头开始编写代码。这样就可以在原有基础上不断提高组件功能,而不会犯相同的错误。 2. javabean组件在任意地方运行是指组件可以在任何环境和平台上使用,这可以满足各种交互式平台的需求。由于javabean是基于java的,所以它可以很容易地得到交互式平台的支持。javabean组件在任意地方执行不仅是指组件可以在不同的操作平台上运行,还包括在分布式网络环境中运行。 3.javabean组件在任意地方的重用说的是它能够在包括应用程序、其他组件、文档、web站点和应用程序构造器工具的多种方案中再利用。这也许是javabean组件的最为重要的任务了,因为它正是jav

25、abean组件区别于java程序的特点之一。java程序的任务就是javabean组件所具有的前两个任务,而这第3个任务却是javabean组件独有的。3.1.3 javabean的设计目标及其如何被实现现在我们来看一实现javabean的一些具体的主要设计目标: 1.紧凑而方便的创建和使用 javabean紧凑性的需求是基于javabean组件常常用于分布式计算环境中,这使得javabean组件常常需要在有限的带宽连接环境下进行传输。显然,为了适应传送的效率和速度,javabean组件必须是越紧凑越好。另外,为了更好地创建和使用组件,就应该使其越简单越好。通常为了提高组件的简易性和紧凑性,设

26、计过程需要投入相对较大的功夫。 现在已有的组件软件技术通常是使用复杂的api,这常常搞得开发者在创建组件时晕头转向。因此,javabean组件必须不仅容易使用,而且必须便于开发。这对于组件开发者而言是至关重要的,因为这可以使得开发者不必花大量功夫在使用api进行程序设计上,从而更好地对组件进行润饰,提高组件的可观赏性。 javabean组件大部分是基于已有的传统java编程的类结构上的,这对于那些已经可以熟练地使用java语言的开发者非常有利。而且这可以使得javabean组件更加紧凑,因为java语言在编程上吸收了以前的编程语言中的大量优点,已经使开发出来的程序变得相当有效率。 2.完全的可

27、移植性 javabean api与操作基础的独立于平台的java系统相结合,提供了独立于平台的组件解决方案。因此,组件开发者就可以不必再为带有java applet平台特有的类库而担心了。最终的结果都将是计算机界共享可重复使用的组件,并在任何支持java的系统中无需修改地执行。 3.继承java的强大功能 现有的java结构已经提供了多种易于应用于组件的功能。其中一个比较重要的是java本身的内置类发现功能,它可以使得对象在运行时彼此动态地交互作用,这样对象就可以从开发系统或其开发历史中独立出来。 对于javabean而言,由于它是基于java语言的,所以它就自然地继承了这个对于组件技术而言非

28、常重要的功能,而不再需要任何额外开销来支持它。 javabean继承在现有java功能中还有一个重要的方面,就是持久性,它保存对象并获得对象的内部状态。通过java提供的序列化(serialization)机制,持久性可以由javabean自动进行处理。当然,在需要的时候,开发者也可以自己建立定制的持久性方案。 4.应用程序构造器支持 javabean的另一个设计目标是设计环境的问题和开发者如何使用javabean创建应用程序。javabean体系结构支持指定设计环境属性和编辑机制以便于javabean组件的可视化编辑。这样开发者可以使用可视化应用程序构造器无缝地组装和修改javabean组件

29、。就像windows平台上的可视化开发工具vbx或ocx控件处理组件一样。通过这种方法,组件开发者可以指定在开发环境中使用和操作组件的方法。 5.分布式计算支持 支持分布式计算虽然不是javabean体系结构中的核心元素,但也是javabean中的一个主要问题。 javabean使得开发者可以在任何时候使用分布式计算机制,但不使用分布式计算的核心支持来给自己增加额外负担。这正是出于javabean组件的紧凑性考虑的,无疑分布式计算需要大量的额外开销。3.2系统功能概述3.2.1 用户登陆系统和用户注册系统登录是我们验证用户身份的过程,用户只需要在登陆界面填写自己的用户名和密码就能完成登陆这一动

30、作,系统将进行前台判断用户名或密码栏填写是否为空判断,一旦通过前台判断系统就将转入后台处理,根据用户提供的用户名和密码查询数据库中相关信息来判断登陆是否成功,如果成功页面就跳转到购物系统的主页面同时分配一辆专门属于用户的购物车进行操作了,如果登陆失败那么还是停留在登陆界面并且给出相应的信息。当然顾客能进行成功的登陆也必须是老用户之前已经注册过了。注册只需要用户提供用户想要的用户名和密码,只要用户名没有被占用过那么就注册成功同时页面也将跳转到购物页面同时系统分配购物车,如果不幸用户所喜欢的用户名已经抢先被他人注册了,那么就注册失败还是停留在注册页面同时给出相关信息。注意:如果用户在没有登陆的状态

31、下进进入系统主页面那么用户只是以游客的身份只能查看商品相关信息并不能进行实质性的购买等操作。3.2.2 智能化的辨认功能如果用户是以游客的身份进入系统而没有进行登陆的话,那么在系统的页面上会出现你是游客,请登陆后购买图书的信息。如果用户通过登陆系统或注册系统进入,那么系统就会“辨认”出你是谁,同时在页面上友好的显示欢迎某某(用户的用户名)信息。同时系统会根据用户的不同身份来允许用户进行在他权限内的操作。3.2.3 图书查询功能在主页面中把本系统中所有的图书依次罗列开来,这样对于没有明确购买目的的顾客有一定的好处,当然很多情况下顾客只是对于众多类型的图书中的某一种感兴趣本系统提供了分类查询的功能

32、。大多数顾客在网络购书中还是有相当的目的性的,所以本系统提供了精确查询这一功能。通过功能强大的图书搜索功能,可以迅速搜索到自己需要的图书,不管你是以注册用户的身份还是以游客的身份你都将能享受这一功能给你带来的方便。3.2.4 先进的购书流程注册用户在浏览图书的过程中只要填写入自己想要购买的数量并点击确认按钮就可以把所要购买的图书放入到自己的购物车中;此时页面会跳转到罗列清单的页面,其中包括了用户所以已经放入到购物车中的图书的书名、数量、isbn、单价和总价等相关信息;一旦用户完成了选书过程只需要把页面中填写入自己的进一步信息再点击按钮就轻松得完成了。当然系统也提供给用户把已经选择的从购物车中删

33、去的功能。在用户完成了操作后系统会根据用户此次购买的相关信息在数据库中生成相关信息以供工作人员完成后续的送货结帐的工作。3.2.5 操作超时管理功能注册用户如果在购书过程中长时间不进行操作(这个时间是由编程人员之前既定的)那么就产生了操作超时,如果用户再进行操作那么系统就会在页面上提示操作过时的信息要求用户重新登陆。 3.2.6人性化的操作界面一个网站,能否吸引顾客的经常光顾,界面操作的简单方便也显得非常重要。本系统在每一个页面上都提供了各种用户想要进行操作的按钮。例如在用户没有登陆时会在每一个页面显示让用户登陆或注册等按钮。4.系统的详细设计和实现4.1前期准备4.1.1 javabean组

34、件的开发环境 普通javabean组件是要分布在各自环境中,所以它们应该能够适应各种环境。虽然我们无法事先预知javabean要运行的确切环境,但以下两点是可以确定的: 1. bean必须能够在一个应用程序构造器工具中运行。 2. bean必须可以在产生的应用程序的运行环境中使用。 设计环境 第一点说明的是bean必须可以在设计环境(design environment)中运行。在设计环境中,bean应该提供设计信息给应用程序构造器工具并允许终端用户制定bean的外观和行为。在传统的软件构造活动中,必须通过编译、链接之后才能看到应用程序的最终运行结果;而利用javabean设计的软件中,则没有

35、这种明确的界限。使用javabean,就可以非常直观地设计应用程序软件,在设计过程中赋予软件生机。而且,这个过程更加容易重复开发,设计思想更加容易变成原型。 运行环境 第二点说明的是bean必须可以在运行环境(run-time environment)中使用。在这个环境中,对设计信息和定制的需求并不重要。一个组件的设计环境信息和设计环境中编写的代码通常可能是非常巨大的。 因此,我们可能需要在bean的设计环境方面和运行环境方面作一个明确的区分,这样,就可能需要在运行环境中不使用bean的任何设计环境代码来配置这个bean。所以,javabean就必须分别支持运行环境接口的类库和设计环境接口的类

36、库。4.1.2 确定书和购物车的属性编写系统中需要的类。java是种面向对象的软件开发语言,本系统所涉及的对象包括书和购物车,我们把系统中这两个对象的属性从现实生活中抽象出来,留住我们所需要的属性忽略我们所不需要的属性这样就编写出了一个类。以后每次要用到该对象时,只要把类进行实例化就可以了。本系统中保留了书本的四个属性书名,isbn,书价还有购书的数量。购物车的属性罗列车中书本清单,增加书本,删除书本。书的类程序:public class book private string bookisbn;private string bookname;private string bookprice;

37、private string booknumber;public book(string isbn, string name, string price, string number)this.bookisbn = isbn;this.bookname = name;this.bookprice = price;this.booknumber = number;public string getbookisbn() return bookisbn;public void setbookisbn(string bookisbn) this.bookisbn = bookisbn;public s

38、tring getbookname() return bookname;public void setbookname(string bookname) this.bookname = bookname;public string getbookprice() return bookprice;public void setbookprice(string bookprice) this.bookprice = bookprice;public string getbooknumber() return booknumber;public void setbooknumber(string b

39、ooknumber) this.booknumber = booknumber;购物车类:public class shoppingcart arraylist booklist = new arraylist();public void addbook(book newbook)booklist.add(newbook);public void delbook(string isbn)book book = null;for(int i=0;ibooklist.size();i+)book = (book) booklist.get(i);if(isbn.equals(book.getboo

40、kisbn().trim()booklist.remove(i);break;public book booklist()book booklist = new bookbooklist.size();for(int i=0; ibooklist.size(); i+)booklisti = (book)booklist.get(i);return booklist;4.1.2 事先封装好所有可能出现的误操作在用户进行操作中肯定会产生一些误操作,而这写误操作是我们可以预见的,为了使本系统的界面更加友好,在用户产生每一次误操作时页面上都会显示对应的错误信息。那么我们把每一种我们可能预见的错误和相

41、关错误信息事先编写成一类,以后用户产生相关错误的时候可以从中得到错误信息。错误信息类:public class errors hashmap error = new hashmap();public hashmap errinform(string username , string password)if(username = null | username.length()=0)error.put(username, 用户名不能为空);elseerror.put(username,null);if(password = null | password.length()=0)error.pu

42、t(password,密码不能为空);elseerror.put(password,null);error.put(database, 用户名或密码输入有错);error.put(errortimeout, 没有登陆或操作过时,请登陆后继续);error.put(registrationfail,失败,用户名已经存在);error.put(numberform, 必须填入你想购买的数量);error.put(searchformfail, 没有查到相关商品,请输入更家准确的查询); /error.put(radioformnull, 你必须选择一种运输方式);return error;4.1.

43、3 http会话http是一个没有状态的协议。要建立一个有效的web服务应用,你必须能够识别一个连续的来自远端的客户机的唯一的请求。随着时间的过去,发展了许多会话跟踪的技术,但是使用起来都比较麻烦。java servlet api提供了一个简单的接口,通过这个接口,servlet引擎可以有效地跟踪用户的会话。4.1.4建立session因为http是一个请求-响应协议,一个会话在客户机加入之前会被认为是一个新的会话。加入的意思是返回会话跟踪信息到服务器中,指出会话已被建立。在客户端加入之前,我们不能判断下一个客户端请求是目前会话的一部分。在下面的情况下,session会被认为是新的sessio

44、n。客户端的session在此之前还不知道端选择不加入session,例如,如果客户端拒绝接收来自服务器的cookie作为一个servlet的开发者,你必须决定你的web应用是否处理客户机不加入或不能加入session。服务器会在web服务器或servlet规定的时间内维持一个session对象。当session终止时,服务器会释放session对象以及所有绑定在session上的对象。绑定对象到session中如果有助于你处理应用的数据需求,你也许需要绑定对象到session中,你可以通过一个唯一的名字绑定任何的对象到session中,这时,你需要使用httpsession对象。任何绑定到s

45、ession上的对象都可以被处理同一会话的servlet调用。有些对象可能需要你知道什么时候会被放置到session中或从session中移开。你可以通过使用httpsessionbindinglistener接口获得这些信息。当你的应用存储数据到session中,或从session中清除数据,servlet都会通过httpsessionbindinglistener检查什么类被绑定或被取消绑定。这个接口的方法会通报被绑定或被取消绑定的对象。4.2注册登陆系统的设计和实现在登陆页面(http:/localhost:8080/thesis/login.jsp)提供两个文本框让用户填写自己所想要的

46、用户名和密码,设计代码: 图2 用户登陆图提供两个按钮让用户提交或者修改所填写信息,设计代码: 这些都放在form表单里,提交方式有两种:get和post,两种提交方式的区别在于以get方式提交时在url信息后会跟上提交的相关信息,而以post方式提交则会隐藏,所以以post方式提交更加安全。由于两种方式在servlet中都有相对应的方法doget和dopost做相应处理,所以必须必须把提交信息放在对应的servlet中方式中处理。在对相关信息处理后,由servlet这个控制组件决定返回给客户端不同的页面。servlet被初始化之后,它已经可以处理来自客户端的请求,每一个来自客户端的请求都被描

47、述成一个servletrequest对象,servlet的响应被描述成一个servletresponse对象。当客户端发出请求时,servlet引擎传递给servlet一个servletrequest对象和一个servletresponse对象,这两个对象作为参数传递到service()方法中。servlet也可以执行servletrequest接口和servletresponse接口。servletrequest接口使得servlet有权使用客户端发出的请求。servlet可以通过servletinputstream对象读取请求信息。servletresponse接口允许servlet建立响

48、应头和状态代码。通过执行这个接口,servlet有权使用servletoutputstream类来向客户端返回数据。首先必须拿到由客户端填写在form表单中的数据信息,我们可以用java提供给我们的方法request.getparameter()来取得:string username = request.getparameter(uname).trim();string password = request.getparameter(pword).trim();注意:trim()方式是用来忽略前导和后导空格。这样我们就把客户端提供的用户名和密码分别放入了username和password这两个

49、string类型的对象中,之后我们就只要对这两个对象做处理就可以了。在本系统中不允许用户名和密码为空,所以本系统在把数据做后台数据库处理前先做了一下前台处理。如果发现其中任何一项为空那么就不用做后台处理而直接返回给客户端原先的登陆页面并把相关出错信息作为hashmap中的属性attribute值写入hashmap中。实现方法可以实现封装一个类,在类里的方法判断如果为空就写入的错误信息到对应的方法中,如果调用相关方式得到数据那么说明出错。如果通过前台验证就转为后台数据库处理,要做数据库处理必须要连接数据库,本系统在这里调用了一个已经事先封装好了的类的方法来实现,然后通过查询数据库中相应用户名的信

50、息,无论是对应密码错误还是数据库中根本不存在此用户名服务器端都将返回给客户端登陆页面并把错误信息作为hashmap中的属性attribute值写入hashmap中,如果通过后台验证那么就可以让用户以注册用户身份登陆到系统主页面(http:/localhost:8080/thesis/main.jsp)同时给用户一辆专用的购物车shoppingcart(之前要先判断用户本身是不是已经存在了购物车),本系统为了达到操作过时管理可以在此设置session的生命周期,这个生命周期是以两次用户操作间的时间来判断,只要用户两次操作的时间间隔不超过这个设置的时间那么就不会产生超时。具体实现代码:errors loginerror = new errors(); /把封装了错误信息的类实例化err = loginerror.errinform(username, password);if( err.get(username) != null | err.get(password) != null) /这看的是不是有错误信息,有就是登陆失败request.setattribute(er

温馨提示

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

评论

0/150

提交评论