基于J2EE的网络商城购物系统的设计与实现 (2).doc
基于J2EE的网络商城购物系统的设计与实现摘要自古以来,有人存在的地方就有消费,该网络商城购物系统其本质上类似于信息管理系统,其有着后台的数据库操作和维护以及前台的应用程序开发两个方面,前者需要建立一个完整的数据库,而后者则要求应用程序的功能完备,模块使用方便,应这些要求,我选择了MVC(Model-View-Controller)设计模式,体现了软件框架结构和组件技术重用的优越性,促使网页设计者和软件开发者职责分离,提高了软件的开发效率,使得程序易于维护和扩展。本文介绍了商城购物系统的设计与实现,包括底层的开发和页面的设计,使用的系统是Windows XP,开发工具为MyEclipse,运用的服务器为Tomcat,使用的数据库为MySql,系统主要实现的功能是用户的注册和登录,用户信息的改查以及商品信息的查询,用户购买商品后整理出的商品订单等以及订单的增删改查功能,该系统中页面的设计使用了Dreamever工具,代码上使用的是JSP语言。关键词:MVC模式,J2EE,商城购物系统THE DESIGN AND ACHIEVEMENT OF NETWORK SHOPPING SYSTEM BASED ON J2EEABSTRACTFrom old,Where have people where existent consumes.The network shopping system which in nature similarly likes a managing information system.which includes operation and maintenance data-base of back-end.And the developing for application interface of font-end.The former need to set up a holistic database,the later should make the application powerful of function and module used easy.To this require,I select the MVC(Model-View-Controller) design module, reflecting the structure of the software framework and reusable component technology superiority, to the page designers and software developers of segregation of duties and improve the efficiency of software development, making the procedure easy to maintain and extend. This article introduced the design and achievement of network shopping,include bottom develop and page design.Used Windows XP system,development tool is MyEclipse,the server is Tomcat,the database is MySql,The system mainly implements the functions of user's register and logging in,user's information's modify,select and the select of commodity's information,after buy the commodity which the user will get the order item which can implement the function of add,delete,modify and select,In this system the design of page used the tool of Dreamever,and the page code used the language of JSP.KEYWORDS:MVC mode,J2EE,shopping system33目录摘要IABSTRACTII1.绪论31.1网上商品购物系统概述31.2 研究意义31.3 研究现状41.4 研究内容41.5 研究思路与研究方法52.系统概述72.1 系统描述72.2系统功能72.3设计目标73需求分析83.1用户模块83.2商品信息模块93.3 购物车模块93.4 订单模块104系统设计114.1系统架构设计114.2业务实体设计114.3业务逻辑设计125 数据库设计135.1 数据库连接脚本135.2 设计表结构135.3 数据库中建表156 详细设计186.1 基本组件186.1.1 控制器组件186.1.2 视图组件186.2 通用功能实现186.2.1 Hibernate的Session操作186.2.2事务的实现186.3 功能模块实现196.3.1用户注册196.3.2 注册成功216.3.3 用户登陆216.3.4用户信息236.3.5 商品展示246.3.6 商品详细列表与购物清单256.3.7确认订单266.3.8 订单明细286.3.9 订单处理状态29总结31参考文献32致谢331.绪论1.1网上商品购物系统概述当今社会科技飞速发展,计算机使用普遍,英特网也进入到了家家户户,生活水平越发提高的今天,随着网上商品购物系统的出现,很多消费者坐在家中就可以如同在商场里选购商品一样购买着自己需要的商品,这促使网上购物成为一种时尚,网上购物系统大大促进了商品的消费。随着越来越多的商场提供着网上商店,现在网上商品购物系统越来越全面,通过这样的系统,可以做到商品信息的规范管理,科学统计和快速查询。因为用户确定购买商品后涉及到一个网上银行付费问题,因此用户在进入该系统选购商品时需有一个不与他人重复的唯一的用户名,注册用户名时会相应的有该用户的各种联系方式与地址,用户在选购商品时同时系统也会为其提供一个看不见的“购物车”来累积用户的购买商品,整个系统既自主化又易使用。1.2 研究意义上世纪90年代以来,随着网络、通信和信息技术的突破性进展,Internet在全球爆炸性增长并迅速普及。上网不再是知识份子的特权,农民,工人都可以在网上获取和传播消息,网络已逐渐日常生活化,成为传播讯息的一个极为快速和方便的通道,世界上的网民的数量也每年都在以大幅度的数量上升,同时,人们的生活节奏越来越快,生活质量也越来越高,很多人都不愿意为买一件商品而亲自去商场精挑细选,都享受坐在书房用鼠标点点就能获得送货上门的服务,因此电子商务应运而生,随着网上银行的出现,很多的东西在网络上也逐渐商品化,这使得电子商务变得越来越普及。 电子商务是基于互联网、以交易双方为主体、以银行电子支付和结算为手段、以客户数据为依托的全新的商务模式,它可以使商家与供应商更紧密地联系起来,更快地满足客户需求,也可以让商家在全球范围内选择最佳供应商,在全球市场上销售产品。自1998年“电子商务年”以来,电子商务在全球发展迅猛,大约每九个月其交易额就翻一番,全球电子商务交易额(包括网上贸易额、销售额等)达到数千亿美元,电子商务收入剧增262%。 目前,世界各国纷纷看好电子商务这块新大陆,普遍认为电子商务的发展将是未来25年世界经济发展的一个重要推动力,对经济的促进将远远超过200年前的工业革命。著名网络经济调查评论家Robert Metcalfe声称:“互联网的价值等于(与之相联结的)网点数量的平方。”1.3 研究现状第一,网上购物前景乐观。在当今这个信息高速发展的社会里,网络已经成为人们日常学习生活中很重要的部分。人们可以从网络中浏览信息,享受服务,享受高科技带来的便利。因此网络市场前景相当广阔,而作为网络服务主流的网上购物更是很具有开发潜力。随着电脑上网的发展,越来越多的电脑用户逐渐认识了网上购物。 第二,网上购物不如商场购物受到认可。 虽然网络购物方便快捷,适应弹性相当大,可是还是有很多的电脑用户以及非电脑用户不接受通过上网购买所需物品。也就是说,网上购物的发展前景是乐观的,可是发展现状还有待研讨。另外通过口头调查,还得知网上购物不如商场购物受欢迎的另一原因,就是网络安全以及商品质量无法得到保证。 第三,比起其它商品,人们更愿意从网上购买书籍音像类商品。 据分析,首先,书籍音像这类商品成本一般不会很高;其次,这类商品的质量真伪比较容易辨别,消费者不易上当受骗;再次,超大全面的信息流使从网上寻找这类商品比在图书馆或者书店寻找更方便,真正体现了网上购物的优点,既方便快捷,又简单明了。 第四,用户对目前电子商务网站内容还有较大意见。 其原因是现在网站存在很多问题,比如:内容不详细、不符合购物者阅读习惯等。另外,网上内容的真实性需要提高,这种不真实内容的破坏性是很大的。 的确,目前网上交易安全性得不到保障、产品质量、售后服务、厂商信用、送货耗时、付款不便有很大关系,但是当网民们展望互联网未来的时候,网上购物与网络通讯和网上学校一起被网民们公选为最有希望的网上事业。 第五,大多数人们接受货到付款的支付方式。 在被问及最愿意接受的付款方式时,超过80的用户选择货到付款,其次为网上银行支付、信用卡付款、银行转账。用户对货到付款有良好的信任。1.4 研究内容充分利用计算机的友好图形界面,简便的操作以及完善的数据库管理来开发一个智能化,系统化,信息化的网络商城购物系统,使该购物系统最大限度地应用于现代化商品购物之中,成为网上购物后台管理人员的得力助手。网络商城购物系统是用户购买已经放在货架上的商品,而这些商品信息都是事先存入的,该系统中只包含了一种人,即用户,用户必须通过登录后才可以行使自己的功能。该系统中主要操作有:用户的注册和登录。用户自身对自身信息的查看,修改,操作。用户的注册信息包括用户名和密码,以及其它注册信息如电话号码,家庭住址,邮编等。 登录信息主要是通过用户的用户名和密码来判别该用户名是否是经过注册的。商品信息则包括了商品的价格,所属类别,商品的详细说明等方面内容。用户选择商品后需将商品放入自己的购物车中,同时也会产生相应的用户订单,用户本身可以对自己的购物车进行查看,对购物车中商品进行查看,修改,删除操作,也可以对订单进行查看,修改和删除操作。 该系统能使用户清晰明了的知道自己所选择的商品以及其单价及所有商品的总价。付款时用户可选择付款方式为邮局付款(Post payment)还是现金付款(Cash payment)还是汇款付款(Remit payment)。1.5 研究思路与研究方法编写一个完整的项目系统,其中很花费时间的不仅仅是编写代码,编写业务流程,需求分析和界面,数据库的设计等也非常重要.编写代码只是后期的工作.只有在正确的了解了客户的真正需求,真正理解了客户的思想后才可能做出功能有针对性的好软件.需求分析不是说一次就能完成的,需要反复地进行深入调查,研究,了解客户的工作实质,才能抓住客户的需求,这样做出来的软件才能称的上是有市场前景的。否则,如果一个软件做出来,其功能不符合客户的需求,那么这个软件将不会被使用,只能浪费程序员的时间和精力而已.数据库的设计也是一个非常重要的环节.软件处理的最根本的内容就是数据,如果数据设计的不好,表格与表格之间设计的不够严谨,那编出来的软件其功能的实现肯定大打折扣.因此只有合理的数据设计才能使该软件真正与用户的需求契合.另外,软件页面的设计也很重要,友好的页面会给用户带来很亲和的感觉,规范的排版也会提高工作者的工作效率.项目的代码部分是留到最后编写的,需要在软件的需求分析和设计都拟好以后,才能符合客户要求的实现代码.这样编写出来的代码也具有分层模式,格式上整齐,很容易理解,另外该写注释的地方也应该写上注释,以方便以后的调试工作.代码编写完成后还需要测试,也可以称之为调试,以验证软件的功能是否能够全部正确有效的实现。本次毕业设计主要是利用MVC分层模式处理项目的底层实现,实现数据库内数据的增删改查,项目的底层代码被封装起来后,通过接口对外扩展其他功能,界面的实现是采用server方式将代码与数据库连接起来,数据库使用的是MySql,开发使用的工具是MyEclipse,开发使用的服务器是Tomcat.2.系统概述本文采用Servlet技术对商品购物管理系统的设计进行研究,该系统是基于B/S结构下进行系统开发的,利用Java和JSP的特性来设计结构合理的MVC架构并结合Java中间件软件开发高效的Servlet应用程序。2.1 系统描述该系统主要采用了Servlet和JSP技术实现。把Servlet、JSP和自定义标签等信息资源整合到一个统一的框架中,开发人员利用其进行开发时,不需要再自己重新编写代码实现全套MVC模式,这极大地节省了程序员的时间。 本系统采用了JSP Model2体系,如图2-1所示。浏览器关系数据库(模型)JavaBean(控制器)Servlet(视图)JSP 实例化 请求 响应图2-1 JSP Model2的程序流程2.2系统功能本系统实现后,可以更加方便快捷的为网上购物用户提供全方位的服务,使用户从查看商品到挑选商品到购买商品最后到付款都能在一个系统中完成,这为用户在该系统中购买商品提供了大大的方便,后台的数据库操作也使该系统中用户购物管理上规范化,系统化,提高了后台信息处理的速度和准确性,能够及时、准确、有效的查询和修改用户的购物情况。2.3设计目标本系统的设计目标是借助网络,为商场建立一个商品信息管理和查询系统,给商品管理和用户提供一个网上电子平台,使用户在家里就可以挑选购买商品,这将大大提高商场的经济效益,也体现了当今社会商品信息的管理水平和现代化程度。其最终实现系统的全方位化和管理信息化及自动化。3需求分析该网上商品购物系统主要分为用户模块,商品信息模块,订单模块和购物车模块,该系统主要是为用户购物提供服务的,提供的服务也是多种多样,用户模块中提供的服务有注册、登录,登录以后会有登录用户的基本信息查询、修改功能,商品信息模块中提供商品的查询信息和商品列表,商品点选后会自动放入用户的购物车中并生成一张购物清单,此时进入了订单模块,订单模块中可以对所选购的商品进行增删改查等操作,进入订单模块时会经过购物车模块,购物车模块中用户可选择商品,之后生成一张购物清单。这些模块的总体用例图如图3-1所示:图3-1 模块总体用例图3.1用户模块按功能用户模块可分为如下几大子模块。注册:只有注册的用户才能进一步得到系统提供的服务。注册时需要输入用户的注册信息,包括用户名、密码、确认密码、所在省份、联系地址、邮编、电话、手机、邮箱等。如果账号已经存在,则注册不能成功。注册成功后才可进行登陆。登录:登录时要求输入用户名和密码。在输入账号和口令后,系统将验证账号和口令是否正确,这验证过程是与注册时存入数据库内的数据相关的,如果验证成功,用户将处于登录状态;否则,用户信息:用户登陆后可随时查看与更改个人信息。用户模块的用例图如图3-2 用户模块用例图3.2商品信息模块商品信息模块包括商品的详细信息查询与所有商品所生成的商品清单列表,每种商品点击后都会进入商品的详细信息情况的查询中,在每种商品商品后面都有一个标有“添加购物车”按钮的图标,点击后可将该商品加入系统分配给用户的购物车中。商品信息模块用例图如图3-3所示:图3-3 商品信息模块用例图3.3 购物车模块用户在点击“添加购物车”按钮时,用户就会进入购物车模块中,购物车在该系统中是个极其重要的存在,关联着多个模块,在该系统中起着连接商品信息和用户订单的一个桥梁作用。购物车模块用例图如图3-4所示:图3-4 购物车模块用例图3.4 订单模块订单模块包括用户信息,付款方式与商品购物清单三大模块。用户信息模块:将已经注册的用户的详细联系方式显示出来,以确认该用户的身份及联系方式,在此部分用户可以点击其上的“修改”按钮来修改用户的信息并重新保存。付款方式模块:用户确认购买商品后需选择一种付款方式,这里提供三种付款方式:cash payment(现金付款方式);post payment(邮局付款方式);amount remit(汇款方式)。商品购物清单模块:该模块详细罗列了用户购物车里的商品,包括商品的数量,价格,小计,总计等信息,在这里用户还可以最后一次确认自己所选择购买的商品,如若无误,则可点击提交按钮。订单模块用例图如图3-5所示图3-5 订单模块用例图4系统设计对需求进行了分析以后,接下来对系统的整体架构进行设计。目的是为了使用户更容易理解整个系统的操作。4.1系统架构设计整个应用程序遵循多层的架构模式,从上到下依次为视图层、控制层、模型层、持久化层和数据库层。各层次之间的依赖关系应该是自顶向下的,即上层依赖下层,而下层不应对上层有依赖或尽量减少对上层的依赖。视图层和控制器层都是通过Servelt实现的。模型层又可细分为数据库访问层和数据服务层。持久化层是使用Hibernate实现的,并且使用了DAO模式。视图层控制层模型层持久化层数据库层依 赖 关 系 加 强依 赖 关 系 减 弱图 4-1 系统架构 4.2业务实体设计系统的业务实体在内存中表现为实体域对象,在数据库中表现为关系数据,实体业务实体包括以下内容。 (1)设计域模型,创建域模型实体对象。(2)设计关系数据模型。(3)创建映射文件。网上商品购物系统中有以下的业务实体:用户、用户信息、产品、产品种类、订单、订单条目、订单状态、付款方式。产品和产品种类:一种产品种类对应多个产品,一个产品只对应一种产品种类,他们之间是一对多的关系。产品和订单条目:一个订单条目对应多个产品,一种产品只对应订单里的一个条目,他们之间是一对多的关系。订单和订单条目:一个定单可以对应多条订单条目,一条订单条目只对应一个个订单,他们之间是一对多的关系。订单状态和订单:一个订单状态可以对应多个订单,而一个订单只能对应一种订单状态,他们之间是一对多的关系。订单与用户和付款方式:多个订单可以对应一个用户,一个用户可以选择多种付款方式,订单与用户之间是多对一的关系,用户与付款方式之间是一对多的关系。用户与用户信息:一个用户只能对应一种信息,一种信息也只对应着一个用户,用户与用户信息之间是一一对应的。4.3业务逻辑设计在系统中,应用的持久化层采用Hibernate做中间件,并使用了DAO设计模式实现数据层的访问。DAO模式是J2EE核心模式中的一种,其主要目的就是在业务核心方法和具体数据源之间再增加一层,用这一层来连接业务方法和数据源,这样就实现了两者的解耦,如图4-2所示。业务核心DAO数据源图 4-2 DAO模式数据源是多样化的,可能是XML或者是关系数据库。关系数据库有不同的产品,如MySQL或者Oracle。通过使用DAO模式,业务核心部分就不用关心数据层是如何实现数据库操作。5 数据库设计数据库设计是系统开发过程中的一个重要环节,它是连接底层代码和界面之间数据传递的枢纽,具体可以分为两个部分:一是数据库的连接,一是建表。5.1 数据库连接脚本数据库在安装好后只能说是成功了一半,要想使数据库能够存储数据并可以从外面调用数据库中的数据,则数据库的成功连接也是至关重要的。在创建数据库表之前,首先要创建一个数据库并连接。本系统使用的数据库是MySQL,数据库名为biyesheji。数据库连接的XML代码如下:<hibernate-configuration><session-factory><property name="show_sql">true</property><property name="connection.isolation">2</property><property name="hbm2ddl.auto">update</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql:/127.0.0.1:3306/biyesheji</property><property name="connection.username">root</property><property name="connection.password">panmin</property><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="myeclipse.connection.profile">ora20</property></session-factory></hibernate-configuration>5.2 设计表结构在系统中包含用户表user、用户信息表contactinfo、产品表product、产品种类表category、订单表orders、订单条目表ordersLine、订单状态表orderStatus、付款方式表payway等八个表,下面分别介绍。(1)用户表User表User用来保存用户的信息。结构如表5-2所示。表 5-2 表user的结构编号名称字段数据类型说明1用户名Useridlong主键2密码Passwordvarchar(20)(2)用户信息表ContactInfo表ContactInfo用来存储用户的详细信息。结构如图表5-3所示。表5-3表contactinfo的结构编号名称字段数据类型说明1地址Street1varchar(20)2省份ProvinceVarchar(10)3城市CityVarchar(10)4邮编ZipVarchar(10)5邮箱Emailvarchar(20)6家庭电话Homephonevarchar(20)7移动电话Cellphonevarchar(20)(3)产品表product表product用来保存产品的详细信息,结构如表5-4所示。表 5-4 表Product的结构编号名称字段数据类型说明1产品号Productidlong主键2产品名称PnameVarchar(10)3产品说明pdescriptionVarchar(1000)4基本价格BasepriceNumber(20)5描述ImagesVarchar(20)(4)产品种类表Category表Category用来保存产品种类信息,结构如表5-5所示:表5-5 表category的结构编号名称字段数据类型说明1种类号Categoryidlong主键2种类名称Cnamevarchar(30)3种类描述CdecriptionVarchar(100)(5)订单表orders表Orders用来保存订单的相关信息,结构如表5-6所示。表 5-6 表Orders的结构编号名称字段数据类型说明1订单号Ordersidlong主键2订单名称Onamevarchar(20)3订单花费OcostNumber(20)(6)订单条目表Ordersline表Ordersline用来保存订单的条目信息,结构如表5-7所示。表 5-7 表Ordersline的结构编号名称字段数据类型说明1订单条目号OrderslineidLong主键2数目AmountNumber(10)(7)订单状态表Orderstatus表Orderstatus用来保存订单状态信息,结构如表5-8所示。表 5-8 表Orderstatus的结构编号名称字段数据类型说明1订单号Orderstatusidlong主键2订单名称OsnameVarcher(10)3订单描述OsdescriptionVarcher(50)(8)付款方式表PayWay表PayWay用来保用户的付款信息,结构如表5-9所示。表 5-9 表PayWay的结构编号名称字段数据类型说明1付款方式号PayWayidLong主键2付款方式styleVarchar(10)5.3 数据库中建表至此,已经确定了简单数据库的相关信息。下面就该在数据库中建立所需要的表了,建表主要代码如下:/*八个子表 */<mapping resource="cn/edu/aust/entity/User.hbm.xml"/><mapping resource="cn/edu/aust/entity/ContactInfo.hbm.xml"/><mapping resource="cn/edu/aust/entity/Orders.hbm.xml"/><mapping resource="cn/edu/aust/entity/PayWay.hbm.xml"/><mapping resource="cn/edu/aust/entity/Product.hbm.xml"/><mapping resource="cn/edu/aust/entity/OrderLine.hbm.xml"/><mapping resource="cn/edu/aust/entity/OrderStatus.hbm.xml"/><mapping resource="cn/edu/aust/entity/Category.hbm.xml"/>该系统中,我使用的是自动建表功能,代码中通过映射共建立了八个表格,其中每个<mapping resource=""/>对应了相应的表格。向一些对应表中添加数据如下代码所示:/*向商品种类表(category)中插入数据*/insert into category(cname,cdescription) values('1','图书类');insert into category(cname,cdescription) values('2','日用品类');insert into category(cname,cdescription) values('3','饮料类');insert into category(cname,cdescription) values('4','水果类');/*向产品信息表(product)中插入数据*/insert into product(pname,pdescription,baseprice,cgory) values ('book1','This book which teach you English',20.0,1);insert into product(pname,pdescription,baseprice,cgory) values ('book2','The book is a good book which to teach you many things',18.0,1);insert into product(pname,pdescription,baseprice,cgory) values ('book3','The book which is about math',25.0,1);insert into product(pname,pdescription,baseprice,cgory) values ('book4','The book which is about chinaese',25.0,1);insert into product(pname,pdescription,baseprice,cgory) values ('fruit1','Which called apple',5.0,4);insert into product(pname,pdescription,baseprice,cgory) values ('fruit2','Which called banana',3.0,4);insert into product(pname,pdescription,baseprice,cgory) values ('fruit3','Which called orange',6.0,4);insert into product(pname,pdescription,baseprice,cgory) values ('shopping1','This is a cup',10.0,2);insert into product(pname,pdescription,baseprice,cgory) values ('shopping2','This is a desk',30.0,2);insert into product(pname,pdescription,baseprice,cgory) values ('shopping3','This is a coat',100.0,2);insert into product(pname,pdescription,baseprice,cgory) values ('drinking1','The water',2.0,3);insert into product(pname,pdescription,baseprice,cgory) values ('drinking2','The tea',50.0,3);insert into product(pname,pdescription,baseprice,cgory) values ('dinking3','The coffie',10.0,3);/*向付款方式表(payway)中插入数据*/insert into payway(paywayid,paystyle) values ('1','cash payment');insert into payway(paywayid,paystyle) values ('2','post payment');insert into payway(paywayid,paystyle) values ('3','amount remit');6 详细设计6.1 基本组件该系统中基本组件包括控制器组件和视图组件。6.1.1 控制器组件控制器组件负责接收用户请求、更新模型,以及选择合适的视图组件返回给用户。控制器组件有助于分离模型层和视图层,有了这种分离,就可以在同一个模型的基础上开发多种类型的视图,主要包括:(1)ActionServlet组件充当该组件的中央控制器(2)ActionInitListener组件监听器,监听子应用模块的请求(3)Action组件负责处理一些具体的业务6.1.2 视图组件视图组件的作用是为客户提供动态的网页。该系统中的视图主要由JSP组件构成,还可以包括以下组件:(1)HTML文档(2)JSP客户化标签(3)JavaScript脚本和样式页stylesheet6.2 通用功能实现在系统中有些功能是所有模块公用的,比如Hibernate的Session操作、抛出的异常处理操作ServiceException,这里把他们实现为通用功能以便其他模块也能使用。6.2.1 Hibernate的Session操作系统中Hibernate的Session操作是通过HibernateSessionFactory辅助类实现的,它提供了统一的Session获得的方法,系统中其他部分获得Hibernate的Session都是通过HibernateSessionFactory.getSession()方法统一获得的。该方法存储在系统中的cn.aust.edu包中的HbnUtil类中。6.2.2事务的实现系统中事务是通过编码式方式实现的,原理如下图6-1所示。业务方法开始从HibernateSessionFactory中得到Session调用Session.beginTransaction()开始事务用此Session初始化DAO对象,进行数据库访问与操作用此Session初始化DAO对象,进行数据库访问与操作事务提交返回事务回滚开始 出现异常 或出错图 6-1 事务实现原理从业务方法中传递session给数据访问DAO对象,控制事务的回滚与提交。6.3 功能模块实现6.3.1用户注册注册组件关系如下图6-2所示:RegisterError.jspregisterSuccess.jspUserAction.Register() Failure <inp