基于SSH轻量级架构的网上书店系统论文_第1页
基于SSH轻量级架构的网上书店系统论文_第2页
基于SSH轻量级架构的网上书店系统论文_第3页
基于SSH轻量级架构的网上书店系统论文_第4页
基于SSH轻量级架构的网上书店系统论文_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

摘要在信息社会中,随着电脑与网络技术的日益兴旺,电子商务空前开展,许多商品的销售也逐渐从有形的市场转向虚拟的网络,为了满足人们购书的需求,网上书店应运而生。网上书店系统的创立可以更好地解决人们因没有时间到书店而不能买到自己需要的书籍的问题,旨在书店与消费者之间架起一座高速、便捷的网上信息桥梁,从而节省用户的时间、方便他们购书,使其永远走在时代的前沿。本毕业设计严格遵循软件开发流程,使用MVC模式,采用开源框架Struts、Spring、Hibernate进行开发,后端的数据库采用MySQL,通过JDBC驱动程序和数据库进行无缝连接,应用可以跨平台的Web应用技术JSP开发的网上购物系统—网上书店。设计的主要目的是了解Web应用程序的这些开源框架技术,熟练使用框架开发的流程。系统的功能主要分为两局部:一是前台网上订购图书功能,包括用户注册登录、购物车、订单生成等;二是后台管理员对用户、图书、订单等的管理功能。对管理员而言,用户、会员、图书管理等模块实现了添加、删除、修改、浏览的功能,订单管理模块实现了订单处理、查看、删除的功能。对会员而言,可以通过输入图书名称搜索图书,可以查看自己的购物车和订单信息。本论文主要论述了网上书店系统的功能设计与实现过程,包括需求分析、系统设计、数据库设计及相关前后台页面的界面设计等。关键词:网上书店,Struts,Spring,Hibernate,MVC,JSPAbstractIntheinformationsociety,withthecomputerandnetworktechnologyincreasinglydeveloped,theunprecedenteddevelopmentofe-commerce,salesofmanycommoditiesmarketshavegraduallyshiftedfromthetangiblevirtualnetwork,inordertomeettheneedsofpeopletextbook,onlinebookstorecameintobeing.Onlinebookstoresystemcanbecreatedtobetteraddressthepeoplebecausethereisnotimetothebookstoretobuytheirownneedsandnottheissueofbooksdesignedtobuildabridgebetweenconsumersbookstorehigh-speed,convenientonlineinformationbridge,whichsavesuserstimefacilitatetheirbooks,sothatitalwayswalkintheforefrontofthetimes.Graduationstrictlyfollowthesoftwaredevelopmentprocess,theuseoftheMVCpattern,usingtheopen-sourceframeworkStruts,Spring,Hibernatefordevelopment,backenddatabaseusingMySQL,anddatabasesthroughJDBCdriversforseamlessconnectivity,applicationscanbecross-platformWebapplicationtechnologiesJSPdevelopmentoftheonlineshoppingsystem-onlinebookstore.ThemainpurposeofthedesignistounderstandtheseopensourceWebapplicationframeworktechnology,skilleduseofframeworkdevelopmentprocess.Themainfunctionofthesystemisdividedintotwoparts:First,orderbooksonlinereceptionfeatures,includinguserregistrationlogin,shoppingcart,ordergeneration,etc.;Second,backgroundadministratoruser,books,ordersandotheradministrativefunctions.Fortheadministrators,users,membership,booksmanagementmodule,delete,modify,addbrowsing,ordermanagementmodulerealizestheorderprocessing,view,deletefunction.Themembership,tosearchforbooksbyenteringthelibraryname,youcanviewyourshoppingcartandorderinformation.Thispapermainlydiscussestheonlinebookstoresystemfunctiondesignandimplementationprocess,includingrequirementsanalysis,systemdesign,databasedesignandassociatedfrontandbackpagesoftheinterfacedesign.Keywords:onlinebookstore;Struts;Spring;Hibernate;MVC;JSP目录1前言11.1网上书店研究背景及意义11.2网上书店的研究现状21.3课题主要工作22系统技术及运行环境32.1主流技术框架32.1.1Struts框架32.1.2Spring框架32.1.3ORM中间件名流Hibernate42.2MySQL简介42.3MyEclipse简介42.4MVC设计模式53需求分析73.1工程概述73.2用例图74系统设计114.1系统架构设计114.2模块设计114.2.1功能结构114.2.2功能详细说明124.3数据库设计134.3.1概念模型设计134.3.2逻辑模型设计165系统实现245.1后台管理员登录模块设计245.1.1数据校验245.1.2控制器类265.2购物车管理页面275.2.1视图层275.2.2业务控制器285.3图书管理页面345.4书店前台界面设计357总结37致谢39参考文献401前言1.1网上书店研究背景及意义随着网络时代的开展,信息技术、数据库技术的不断开展,网络进程的加快,传统的购物方式已经越来越不能满足人们快节奏的生活需求,网上书店正是适应了当今社会快节奏的生活,打破地域与空间的限制,以一种全新的姿态步入我们的生活,给图书爱好者一个全新的购书体验。它以其方便、快捷的优势冲击着传统的图书发行行业,与传统书店相比,网上书店的建立可以大大减少图书销售中的中间环节,节省大量的人力、物力,并且图书种类丰富,读者可以随时随地的查询及订购所需图书,节省了他们许多珍贵的时间。另外,还便于商家根据读者留言,为其提供个性化效劳,极大地满足了读者的需求。随着业务量的增长,客户量及图书量都会大幅度增加。这意味着,网上书店的访问量的提高,同时需要处理的数据量也更加庞大,这对网上书店系统的性能就有了更高的要求。网上书店的管理者们发现,他们的系统越来越不堪重负,越来越不能够满足客户的需求。比方,现有的图书信息检索系统效率低下,按图书标题进行的一个简单搜索也要花费10秒钟。如此慢的响应速度,成了该系统的软肋。因此,“解决性能瓶颈,提高效劳质量,并为在未来扩展客户效劳范围打下良好根底〞,成为管理者们的燃眉之急。经过以上的分析,可得网上书店具有光明的前景。因此,构建一个应用系统之前,首先考虑的是采用哪种结构来实现这个应用系统,怎样设计可以实现组件之间的松散耦合,使其具有良好的灵活性,所以对工程开发框架的选择很重要。本课题在开发过程中使用轻量级架构SSH来处理页面逻辑、业务控制和对象的持久化工作,即用Struts来架构表示层,用Spring来架构业务层,而用Hibernate架构持久层,然后把这些框架无缝的整合起来,使系统的结构更加清晰,同时简化开发工作。使用MYSQL作为后台数据库,MYSQL是高性能、客户/效劳器的RDBMS〔关系型数据库管理系统〕,能够支持大吞吐量的事务处理,具有较高的平安性,也能与其他系统进行完好的交互操作。1.2网上书店的研究现状目前,国内外网上书店都很多,如国内的当当和卓越亚马逊,国外的亚马逊。国外的网上书店由于起步早,现在已较为成熟,最具代表性的首推亚马逊网上书店。亚马逊具有高质量的综合书目数据库和方便的图书检索系统,经营的图书达400多万种,如今已成为全球的最大网上书店,控制着美国80%的网上图书销售市场。相对来说,国内的网上书店起步晚,与国外有一定的差距。由于效劳不完善、查询、分类形式单一,注重图书数量的丰富而忽略图书及相关知识和信息的提供,并且我国有许许多多的中小型书店仍只是采用传统书店的经营模式,而这种模式需要大量的人力、物力,且库存难以满足所有顾客的需求。随着人们日益增长的购书需求,图书数量剧增,有关购书的信息业成倍增长,这就需要有一个好的信息支持平台。面对庞大的信息量,有必要开发网上书店来提高管理工作的效率,也顺应了电子商务的潮流.1.3课题主要工作网上书店系统主要采用JSP、MySQL、Struts等技术来实现,遵循软件开发流程,进行了需求分析、系统设计、数据库设计和代码实现。它的主要功能是实现后台图书管理的自动化,图书新增、删除的及时化,会员及管理员信息的更新,订单的及时处理,围绕这些主要功能,本系统涉及到以下核心功能:图书管理、订单管理、会员管理等。该系统设计的主要目标是:设计一个网上书店系统,主要功能分为图书查询、订单、购物车和后台图书、管理员管理等。在订单模块中,用户能够将自己喜欢的图书添加至购物车,生成订单;在图书查询模块中,用户能输入需要查询的图书名称按条件查询;在图书管理模块中要求能完成如添加图书的分类、图书是否特价、图书的根本信息等日常管理功能。2系统技术及运行环境2.1主流技术框架所谓框架就是提供了一组统一的接口和编程方式的可重用组件,同时我们可以在框架中扩充我们自己的特定逻辑。目前主流的技术框架如下:2.1.1Struts框架Struts是最早的Java开源框架之一,也是现在JavaWeb框架的事实标准,现在的绝大多数JavaWeb应用程序都是基于Struts框架构建的。Struts是MVC设计模式一个优秀的实现。Struts定义了通用的Controller〔控制器〕,通过配置文件〔一般是struts-config.xml〕隔离了Model〔模型〕和View〔视图〕,以Action的概念对用户请求做了封装,使代码更清晰易读。Struts还提供了自动将请求的数据填充到对象中以及页面标签等简单编码工具。Struts使开发大型JavaWeb工程成为可能。2.1.2Spring框架Spring的出现改变了Java世界。它的目标是使现有的JavaEE技术更易用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。它主要作为依赖注入容器和AOP实现存在。还提供了声明事务、对DAO层的支持等简化开发的功能。Spring还可以很方便地与Struts、Hibernate等技术集成,致力于JavaEE应用的各层的解决方案,而不是仅仅专注于某一层的方案,可以说Spring是企业应用开发的“一站式〞选择,并贯穿表现层、业务层及持久层。Spring的核心概念是IoC(InversionofControl),IoC的抽象概念是控制反转。它可以完成组件之间的依赖关系注入,使得组件之间的依赖关系到达最小,进而提高组件的重用性。通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,防止硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。2.1.3ORM中间件名流HibernateHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。对于对象——关系映射ORM〔Object-RelationMapping〕,它是用来将对象和对象之间的关系对应到数据库表与表之间的关系的一种模式。现在,ORM工具有很多种,其中比拟有影响力的一种就是Hibernate。Hibernate确实是一个优秀的持久化框架,主要负责简化将对象数据保存到数据库中或从数据库中读取数据并封装到对象的工作。通过简单配置和编码即可替代JDBC繁琐的程序代码。Hibernate处理数据库操作的方式代表了当前的趋势。2.2MySQL简介MySql是一个快速、多线程、多用户的SQL数据库效劳器,其出现虽然只有短短的数年时间,但凭借着“开放源代码〞的东风,它从众多的数据库中脱颖而出,支持正规的SQL查询语言和采用多种数据类型,能对数据进行各种详细的查询等特点。MySQL的开发者为瑞典MySQLAB公司,它作为开放源码的小型关联式数据库管理系统,目前被广泛地应用在Internet上的中小型网站中。正因为其体积小、速度快、总体拥有本钱低,尤其是开放源码这一特点,所以许多中小型网站为了降低网站总体拥有本钱而选择了MySQL作为网站数据库。2.3MyEclipse简介MyEclipse,是一个十分优秀的用于开发Java,J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse企业级工作平台〔MyEclipseEnterpriseWorkbench,简称MyEclipse〕是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序效劳器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完全支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate。MyEclipse目前支持JavaServlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具。本系统采用的开发环境为MyEclipse8.5+MySQLServer5.1+JSP。2.4MVC设计模式MVC是模型(Model)、视图(View)和控制〔Controller)的缩写,其目的实现Web系统的职能分工。其中Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现;View层用于与用户的交互,通常用JSP来实现;Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。MVC是一个设计模式,模式图如图2-1,它强制性的将应用程序的输入、处理和输出分开。MVC使应用程序被分成三个核心部件:模型、视图、控制器,它们各自处理自己的任务。图2-1MVC模式图模型组件:负责业务逻辑,模型包含应用程序的核心功能,模型封装了应用程序的状态。有时它包含的唯一功能就是状态,它对视图或控制器一无所知。视图组件:负责表示业务范围的视图,视图提供模型的表示,它是应用程序的外观。视图可以访问模型的读方法,但不能访问写方法。此外,它对控制器一无所知。当更改模型时,视图应得到通知。控制器组件:负责控制用户输入的流和状态,控制器对用户的输入作出反响。它创立并设置模型。3需求分析3.1工程概述随着Internet的飞速开展,网上购物已成为越来越多人首选的购物方式。商家可以通过这个电子商务平台销售自己的图书,消费者可以通过该系统订购自己要买的图书。消费者通过网上书店系统的用户界面,可以浏览图书、查看图书的详细信息。在浏览图书的过程中,如果消费者对某本图书感兴趣,那么可以将其添加到购物车。消费者随时可以查看购物车中的情况,并及时更新。购物活动完成后,消费者如需购置,必须结账生成订单。消费者可以搜索查询所需的书籍,如果不存在可以填写缺书登记,也可以给管理员留言。消费者可以针对某本图书发表自己的评论。系统管理员从后台管理程序入口登录,如果验证通过,那么具有管理员权限,可以进入后台管理系统,维护图书信息、管理订单、管理留言、管理用户等模块。3.2用例图用例图用来确定需求的范围,这些需求是设计开发的依据。用例图将系统看作黑盒,从外部执行者的角度来理解系统。图中的用例是用户与计算机之间一次典型的交互作用,在UML中,用例表示为一个椭圆,执行者是指用户在系统中用类似人的图形来表示的,但执行者未必是人。例如,执行者可以是一个外界系统,该外界系统可能需要从当前系统中获取信息,与当前系统进行交互。根据以上需求分析,我们利用RationalRose画出系统的主要用例图,如图3-1所示。主要的角色包括系统管理员和顾客。图3-1系统用例图系统主要用例说明如下:会员登录和注册会员登录是电子商务网站应用必须具备的功能之一。博友网上书店系统登录页面要求用户输入用户名和密码,在输入用户名和密码之后,系统将验证用户名和密码是否正确。如果验证成功,就使会员处于登录状态,否那么,系统显示用户名和密码错误的信息。会员登录UseCase图如3-2所示。图3-2会员登录用例图另外,游客在登录页面中能够进行新会员注册,这时系统要求用户输入用户注册信息,包括用户名、电子邮箱、居住地址、邮政编码等内容。新会员注册UseCase图如图3-3所示,新会员注册要检验注册信息,然后成为会员,具有普通会员的功能。当用户登录后可以随时修改个人的注册信息。图3-3新会员注册用例图浏览与搜索图书用户可以通过系统浏览各种图书。在系统主页面提供了所有图书列表,通过单击某种图书的链接,用户可以查看该图书的名称、描述和单价等信息以及添加该图书到购物车的通道。用户还可以根据图书作者、图书名称搜索图书信息。维护购物车当用户单击“添加到购物车〞按钮时,图书会被自动添加到购物车中。在购物车页面,将列出用户的购物车中的所有图书,并且会列出每种图书的图书名、作者、出版社等相应信息。用户也可以修改、删除购物车的内容。填写/确认订单当用户最终确定所选购的图书后,进入购物车页面,生成订单。生成订单是网上书店系统的最终目的,购物车的所有功能实现都是为最后生成一个客户满意的订单做根底。客户还可以点击“我的订单〞,查看订单的状态。5.管理员后台登录只有管理员才有权限进入后台,所以要设计管理员的登陆功能。管理员输入用户名和密码后,系统会检验用户名、密码和权限是否正确,校验成功后,进入后台系统,进行图书的管理操作和其他信息的维护。管理员UseCase图如图3-4所示。图3-4管理员登录用例图4系统设计在分析了整个网站的需求以后,下面开始设计系统的整体架构。4.1系统架构设计整个系统遵循多层次的架构模式,从上到下依次为视图层、控制器层、模型层、持久化层和数据库层,如图4-1所示。层次间的依赖关系的原那么应该是自顶向下的,即上层可以依赖下层,而下层应该尽量减少对上层的依赖,同时层次之间的交互应该表达延迟实现的原那么,通过接口进行交互。例如在网上书店系统中使用Hibernate实现持久化层,假设要采用其他机制实现持久化层时,不需要改动业务逻辑中的代码。视图层和控制器层使用Struts2框架实现,持久化层使用Hibernate实现。最后由Spring技术整合所有功能,配置数据源。并且管理组件与组件之间的关系,使整个系统有效地运行。图4-1系统架构4.2模块设计4.2.1功能结构根据用例分析,网上书店系统分为前台和后台两大局部。前台局部由用户使用,主要包括用户注册、登录和修改信息、购物车、生成及查询订单和留言板、图书查询等模块。后台局部由管理员使用,主要包括管理员登录、图书类别管理、图书信息管理、会员管理、订单处理、公告管理等模块。系统的功能结构如图4-2所示:图4-2博友网上书店系统功能结构图4.2.2功能详细说明前台局部:1、用户注册、登录用户进入书店首页,可以在页面顶端点击“注册〞按钮。新用户注册进行数据校验成功后成为网站会员,可以登录到网站查询、浏览、购置图书。图4-3用户注册、登录功能图2、图书浏览当浏览网页的时候,可以单击某一图书,查看该图书的详细信息〔包括图书名、厂家、市场价等〕。3、查询图书可以在网站的查询框中按图书名搜索图书也可以按作者查找图书。系统将查询结果〔如果有此图书返回图书的详细信息,如果没有返回当前没有此图书的信息等〕返回。4、订购图书在浏览图书时会员可以查看选中图书的详细信息并添加此图书到购物车,最后选择是否购置此图书。5、订单查询会员可以随时查看自己的购物车,查看自己的订单详细情况。后台局部:1、管理员登录通过图书后台管理系统,输入具有相应模块的管理员权限的用户名和密码,数据校验成功后进入后台管理主界面,对相应模块的信息进行管理。2、图书分类管理管理员可以进入图书分类管理页面添加二级图书类别,对其进行管理。3、会员级别管理在会员级别管理页面添加指定用户为会员,设置级别属性及会员积分。4、图书、会员、订单、公告、友情链接管理管理员进入后台管理系统可以对这些模块进行添加、编辑、删除等操作。4.3数据库设计概念模型设计博友网上书店系统中的业务实体如下:图书〔book〕:代表一个图书实体,其主要属性有图书ID〔id〕、图书名称〔bookName〕、作者〔author〕、ISBN号〔isbn〕、出版社〔publisher〕、描述〔description〕、价格〔price〕、库存〔stock〕、图片〔picture〕、出版时间〔pubDate〕、图书类别ID〔typeId〕、优惠价〔sprice〕、是否特价〔special〕、发布状态〔status〕、图片保存路径〔HtmlPath〕。图书类别〔btype〕:图书类别ID〔id〕、一级图书分类ID〔ParentID〕、图书类别名称〔typeName〕。订单〔orders〕:代表一个订单实体,其主要属性有订单ID〔ID〕、会员ID〔MemberID〕、购物车ID〔CartID〕、订单号〔OrderNO〕、订购日期〔OrderDate〕、订单状态〔OrderStatus〕。会员〔member〕:代表一个会员实体,其主要属性有会员ID〔id〕、会员级别ID〔MemberlevelID〕、登录账号〔LoginName〕、登录密码〔LoginPwd〕、真实姓名〔MemberName〕、电子邮箱〔EMail〕、居住地址〔Address〕、邮政编码〔Zip〕、〔Phone〕、注册日期〔RegDate〕、最后日期〔LastDate〕、登录时间〔LoginTimes〕、会员积分〔Integral〕。会员级别〔memberlevel〕:ID(id)、会员级别名称〔LevelName〕、会员积分〔Integral〕、优惠百分比〔Favourable〕。购物车〔cart〕:其主要属性有ID〔id〕、会员ID〔MemberID〕、金额〔Money〕、购物车状态〔CartStatus〕。购物车商品选购记录表〔cartselectedbook〕:ID〔id〕、购物车ID〔CartID〕、图书ID〔BookID〕、选购数量〔Number〕、价格〔Price〕、金额〔Money〕。友情链接〔link〕:ID〔id〕、链接名称〔linkName〕、链接地址〔linkAddr〕。公告〔notice〕:ID〔id〕、公告标题〔noticeTitle〕、公告内容〔noticeContent〕、公告日期〔noticeDate〕。图书评论〔remark〕:ID〔id〕、图书ID〔bookId〕、用户ID〔userId〕、评论题目〔remarkTitle〕、评论内容〔remarkContent〕、评论日期〔remarkDate〕。用户留言〔comment〕:ID〔id〕、用户ID〔userId〕、留言标题〔commentTitle〕、留言内容〔commentContent〕、留言日期〔commentDate〕。管理员〔admin〕:代表一个管理员实体,其主要属性有管理员ID〔id〕、管理员姓名〔adminName〕、管理员密码〔adminPassword〕、权限〔power〕。为了描述各个模型,可以使用实体关系图,即E-R图〔ERD,EntityRelationshipDiagram〕。用实体关系图描述实体模型能够预先精确定义数据需求,从而能够对以后的改动做出有效的规划。以上局部实体的E-R图如下所示。管理员信息实体如图4-4所示:图4-4管理员实体的E-R图图书实体如图4-5:图4-5图书信息实体的E-R图订单实体如图4-6:图4-6订单信息的E-R图4.3.2逻辑模型设计book、member、order等上述实体对象都需要持久化,它们在数据库中有对应的表。对应于数据模型,设计出的数据库一共分为12个表:图书表〔book〕、图书类别表〔btype〕、会员表〔member〕、会员级别表〔memberlevel〕、购物车表〔cart〕、购物车选购记录表〔cartselectedbook〕、订单表〔orders〕、图书评论表〔remark〕、用户留言表〔comment〕、管理员表〔admin〕、友情链接表〔link〕、公告表〔notice〕。数据库名称为bookshop,其建立的SQL语句如下:createdatabaseifnotexists‘bookshop’;接下来创立数据表,以下是bookshop的数据字典定义:1、图书表表4-1图书表字段名字段类型字段长度是否允许为空是否为主键描述idint11否是图书IDbookNamevarchar45是否图书名称authorvarchar45是否作者typeIdint11是否图书类别IDisbnvarchar64是否ISBN号publishervarchar64是否出版社续表4-1字段名字段类型字段长度是否允许为空是否为主键描述descriptiontext是否图书描述pricedouble(20,0)是否价格stocksmallint5是否库存picturevarchar32是否图片pubDatedatetime是否出版日期spricedecimal(8,2)是否会员价specialint11是否特价statusiInt11是否状态HtmlPathvarchar100是否图片保存路径约束:id作为主键,不允许重复,不允许为空。2、图书类别表表4-2图书类别表字段名字段类型字段长度是否允许为空是否为主键描述idint11否是图书类别IDParentIDint11是否上级类别IDtypeNamevarchar45是否图书类别名3、会员表表4-3用户表字段名字段类型字段长度是否允许为空是否为主键描述idint11否是会员IDMemberlevelIDint11是否会员级别IDLoginNamevarchar20是否会员登录名LoginPwdvarchar50是否会员登录密码续表4-3字段名字段类型字段长度是否允许为空是否为主键描述EMailvarchar100是否电子邮箱Addressvarchar100是否居住地址Zipchar6是否邮政编码Phonevarchar40是否RegDatedatetime是否注册日期LoginTimesint11是否登录时间Integralint11是否会员积分4、订单表表4-4订单表字段名字段类型字段长度是否允许为空是否为主键描述IDint11否是订单IDMemberIDint11是否会员IDCartIDint11是否订单IDOrderNOvarchar20是否订单号OrderDatedatetime是否订购日期OrderStatusint11是否订单状态5、会员级别表表4-5会员级别表字段名字段类型字段长度是否允许为空是否为主键描述IDint11否是IDLevelNamevarchar20是否会员级别名称Integralint11是否会员积分Favourableint11是否优惠百分比6、友情链接表表4-6友情链接表字段名字段类型字段长度是否允许为空是否为主键描述idint11否是IDlinkNamevarchar64否否链接名称linkAddrvarchar128否否链接地址7、公告表表4-7公告表字段名字段类型字段长度是否允许为空是否为主键描述idint11否是IDnoticeTitlevarchar64否否公告标题noticeContentvarchar128否否公告内容noticeDatedatetime否否公告日期8、购物车图书选购记录表表4-8购物车图书选购记录表字段名字段类型字段长度是否允许为空是否为主键描述IDint11否是IDCartIDint11是否购物车IDBookIDint11是否图书IDNumberint11是否订购数量Pricedecimal(8,2)是否金额Moneydecimal(9,2)是否总价9.图书评论表表4-9图书评论表字段名字段类型字段长度是否允许为空是否为主键描述idint11否是IDbookIdint11否否图书IDuserIdint11否否用户IDremarkTitlevarchar64否否评论题目remarkContentvarchar128否否评论内容remarkDatedatetime否否评论日期10.用户留言表表4-10用户留言表字段名字段类型字段长度是否允许为空是否为主键描述idint11否是IDuserIdint11否否用户IDcommentTitlevarchar64否否留言标题commentContentvarchar128否否留言内容commentDatedatetime否否留言日期11.管理员表表4-11管理员表字段名字段类型字段长度是否允许为空是否为主键描述idint11否是管理员IDadminNamevarchar15否否管理员姓名adminPasswordvarchar32否否管理员密码powervarchar15是否权限12、友情链接表表4-12友情链接表字段名字段类型字段长度是否允许为空是否为主键描述IDint11否是IDmemberIDint11是否会员IDMoneydecimal(9,2)是否金额CartStatusint11是否购物车状态创立数据表脚本:在根本的数据表的结构确定后,就可以在mysql中完成数据表的创立工作,下面给出建立对应数据表的几个主要的SQL脚本。〔1〕图书根本信息表:CREATETABLE`book`(`id`int(11)NOTNULLAUTO_INCREMENT,`bookName`varchar(45)DEFAULTNULL,`author`varchar(45)DEFAULTNULL,`typeId`int(11)DEFAULTNULL,`isbn`varchar(64)DEFAULTNULL,`publisher`varchar(64)DEFAULTNULL,`description`varchar(128)DEFAULTNULL,`price`decimal(8,2)DEFAULTNULL,`stock`int(5)DEFAULTNULL,`picture`varchar(100)DEFAULTNULL,`pubDate`datetimeDEFAULTNULL,`sprice`decimal(8,2)DEFAULTNULL,`special`int(11)DEFAULTNULL,`status`int(11)DEFAULTNULL,`HtmlPath`varchar(100)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=35DEFAULTCHARSET=gbkCOMMENT='图书表';〔2〕管理员表:CREATETABLE`admin`(`id`int(11)NOTNULLAUTO_INCREMENT,`adminName`varchar(15)NOTNULL,`adminPassword`varchar(32)NOTNULL,`power`varchar(15)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=42DEFAULTCHARSET=gbkCOMMENT='管理员';〔3〕会员信息表:CREATETABLE`member`(`ID`int(11)NOTNULLAUTO_INCREMENT,`MemberlevelID`int(11)DEFAULTNULL,`LoginName`varchar(20)DEFAULTNULL,`LoginPwd`varchar(50)DEFAULTNULL,`MemberName`char(12)DEFAULTNULL,`Phone`varchar(40)DEFAULTNULL,`Address`varchar(100)DEFAULTNULL,`Zip`char(6)DEFAULTNULL,`RegDate`datetimeDEFAULTNULL,`LastDate`datetimeDEFAULTNULL,`LoginTimes`int(11)DEFAULTNULL,`EMail`varchar(100)DEFAULTNULL,`Integral`int(11)DEFAULTNULL,PRIMARYKEY(`ID`))ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT='注册会员表';〔4〕订单表:CREATETABLE`orders`(`ID`int(11)NOTNULLAUTO_INCREMENT,`MemberID`int(11)DEFAULTNULL,`CartID`int(11)DEFAULTNULL,`OrderNO`varchar(20)DEFAULTNULL,`OrderDate`datetimeDEFAULTNULL,`OrderStatus`int(11)DEFAULTNULL,PRIMARYKEY(`ID`))ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=gbkCOMMENT='订单表';〔5〕图书类别表:/*图书类别表*/CREATETABLE`btype`(`id`intNOTNULLauto_increment,/*图书类别ID*/`ParentID`intDEFAULTNULL,`typeName`varchar(45)DEFAULTNULL,/*图书类别名*/PRIMARYKEY(`id`)/*设置id为主键*/)ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT='图书类别表';5系统实现5.1后台管理员登录模块设计超级管理员要维护图书、会员、订单等信息,需要进入后台管理系统登录页面,如图5-1所示,然后针对用户输入的数据,系统首先会进行数据校验,并给予提示。图5-1管理员登录数据校验在Web应用程序中,为了防止客户端传来的数据引发程序的异常,需要对用户输入的数据进行验证,防止一些恶意的用户通过输入精心伪造的数据来攻击我们的系统,破坏系统的运行,窃取协同的机密资料。因此构建一个强有力的验证机制,是保障系统稳定运行的前提条件。数据验证分为两个局部:一是验证输入数据的有效性,二是在用户输入了不正确的数据后向用户提示错误信息。以前做的系统是在Servlet中进行有效的效劳器端校验,但是这种校验很繁琐,需要书写多行的校验代码才能完成一个表单的数据校验,而且这种方式开发效率低,校验不够标准。在本次毕设过程中,我们使用Struts2提供的根本验证框架来实现,主要是利用校验规那么文件来对输入数据进行校验,Struts2中每个Action都可以对应一个校验文件,而且校验文件命名有一定的标准,对于管理员登录信息的校验,我采用了Action中某个方法的校验命名格式:ActionClassName-ActionAliasName-validation.xml,并且通过ActionSupport的getText()方法获取国际化提示信息,管理员登录数据校验文件AdminAction-admin_login-validation.xml如下所示:AdminAction-admin_login-validation.xml:<?xmlversion="1.0"encoding="GBK"?><!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN" "://opensymphony/xwork/xwork-validator-1.0.2.dtd"><!--对登录表单中的三个必填字段进行必填验证--><validators> <fieldname="adminName"> <field-validatortype="requiredstring"> <paramname="trim">true</param> <message>${getText("name.required")}</message> </field-validator> <field-validatortype="regex"> <paramname="expression"><![CDATA[(\w{4,25})]]></param> <message>${getText("name.regex")}</message> </field-validator> </field> <fieldname="adminPassword"> <field-validatortype="requiredstring"> <paramname="trim">true</param> <message>${getText("password.required")}</message> </field-validator> <field-validatortype="regex"> <paramname="expression"><![CDATA[(\w{4,25})]]></param> <message>${getText("password.regex")}</message> </field-validator> </field></validators>国际化资源文件中关于管理员数据校验的信息如下所示:图5-2管理员登录数据校验国际化信息如果输入的用户名和密码错误,提示信息如下列图所示:图5-3数据校验结果显示控制器类当用户名和密码都合法时,表单提交至控制器层的action类admin_login.action,该类具体实现如下:AdminAction.java:/**处理登录请求*/ publicStringlogin(){ AdmintempAdmin=adminservice.adminLogin(admin.getAdminName(),admin.getAdminPassword()); if(tempAdmin!=null){ ServletActionContext.getRequest().getSession().setAttribute("admin",tempAdmin); return"main"; }else{ addActionError(getText("login_fail")); returnINPUT; } }当从数据库中查询到有此用户名和密码后,页面自动跳转到后台管理系统主界面。5.2购物车管理页面视图层1、查看购物车cart.jsp页面顾客在浏览图书详细信息时,通过单击“购置〞按钮即可将图书放入购物车内。“购置〞的响应按钮是由以下这段JS代码调用addToCart.action实现的:<scriptlanguage='javascript'> //选购图书 functionbuy(bookid){ if(!loginStatus) alert('对不起,您尚未登录,请先登录后再选购图书,谢谢合作!'); else window.location='addToCart.action?bookId='+bookid; }</script>购物车管理业务控制器CartAction.java的addToCart方法将指定的图书放入指定注册会员的购物车后再携带提示信息重定向到viewCart方法,viewCart方法提取当前会员的所有选购记录存入selList中,供cart.jsp展现给顾客,如下列图所示。图5-4cart.jsp页面运行效果2、购物车管理的国际化消息资源messageResource_zh_CN.properties中与购物车管理相关的消息内容如下:图5-5购物车国际化信息业务控制器1、购物车管理业务控制器类购物车管理业务控制器CartAction类采用模型驱动,直接使用持久化类Cart充当模型类,用于封装表单属性、请求参数及处理结果。业务控制器CartAction.java局部代码如下:/**购物车处理控制器*/@SuppressWarnings("serial")publicclassCartActionextendsActionSupportimplementsModelDriven<Cart>{/**通过依赖注入CartService与BookService组件实例*/ CartServicecartservice; BookServicebookservice;/**购物车管理所有请求中常用的参数值*/privateStringactionMsg;//Action间传递的消息参数privateList<Cart>cartList;//购物车列表privateList<Cartselectedbook>selList;//选购记录列表privateIntegerbookId;//选购的图书IDprivateIntegernumber;//选购数量privateIntegerselId;//选购记录ID//采用模型驱动privateCartmodel=newCart();//用于封装购物车属性模型publicCartgetModel(){returnmodel; }/**处理购置请求*/publicStringaddToCart(){ Membermember=(Member)ServletActionContext.getRequest().getSession().getAttribute("member"); Cartcart=null; Bookbook=null; Cartselectedbooksel=null;doubleprice=0;if(member!=null){//装载当前注册会员的购物车 cart=cartservice.loadCart(member);if(cart==null){//如果尚无购物车那么为该用户创立一个购物车 cart=newCart();//购物车的初始状态为0,表示尚未结帐 cart.setCartStatus(0);//购物车默认总金额为0 cart.setMoney(Double.valueOf(0));//购物车与当前注册会员进行关联 cart.setMember(member);//持久化购物车if(!cartservice.saveOrUpdateCart(cart)){ addActionMessage(getText("cart_add_fail")); } }//装载被选购的图书 book=bookservice.loadBook(bookId);if(book!=null){//该图书有效//检查是否已存在相同的选购记录 sel=cartservice.loadCartselectedbook(cart,book);if(sel==null){//不存在相同的选购记录sel.setCart(cart); sel.setBook(book); sel.setNumber(1);//默认选购数量为1//图书划价if(book.getSpecial().intValue()==1){//特价图书,购置价格即为特价 price=book.getSprice(); }else{//非特价图书,购置价格为优惠后的市场价 price=book.getPrice()*(100-member.getMemberlevel().getFavourable())/100; } sel.setPrice(price); sel.setMoney(price);//重新计算购物车总金额//cart.setMoney(cart.getMoney().doubleValue()+price); cart.setMoney(cart.getMoney()+price); }else{//已存在相同的选购记录 sel.setNumber(sel.getNumber()+1);//选购数量加1sel.setMoney(sel.getMoney()+sel.getPrice());//金额加一个单价//重新计算购物车总金额//cart.setMoney(cart.getMoney().doubleValue()+sel.getPrice()); cart.setMoney(cart.getMoney()+sel.getPrice()); }//持久化购物车及其选购记录if(cartservice.saveOrUpdateCart(cart)){if(cartservice.saveOrUpdateCartselectedbook(sel)){ addActionMessage(getText("cart_add_succ")); }else{ addActionMessage(getText("cart_add_fail")); } }else{ addActionMessage(getText("cart_add_fail")); } }else{//指定图书不存在 addActionMessage(getText("cart_add_fail")); } }else{//会员尚未登录,无法进行在线购物 addActionMessage(getText("cart_add_fail")); }return"toViewCart"; }2、Spring中配置业务控制器CartAction类将Struts2的业务控制器CartAction委托给Spring容器负责从生成到消亡的生命周期管理,可充分利用Spring容器的IoC特性,实现高度解耦。在Spring3中配置业务控制器CartAction类使用原型模式,即设置scope=〞prototype〞;applicationContext.xml中配置业务控制器CartAction<!--部署Struts2.1负责购物车管理的控制器CartAction--><beanid="cartAction"class="com.bookshop.Action.CartAction"scope="prototype"><propertyname="cartservice"ref="cartservice"/><propertyname="bookservice"ref="bookservice"/></bean>3、Struts.xml中配置业务控制器CartAction类用户的具体请求、业务控制器中的处理方法及结果展现视图之间的对应关系必须在Struts2的配置文件struts.xml中进行正确配置方能生效,对于那些具有一定命名规那么的用户请求可以使用通配符实现动态方法的调用。struts.xml中配置业务控制器CartAction<!--配置购物车管理的CartAction映射--> <actionname="viewCart"class="com.bookshop.Action.CartAction"method="viewCart"> <result>/cart.jsp</result> </action> <actionname="addToCart"class="com.bookshop.Action.CartAction"method="addToCart"> <resultname="toViewCart"type="redirectAction"> <paramname="actionName">viewCart</param> <paramname="namespace">/</param> <paramname="actionMsg">${actionMsg}</param> </result> </action> <actionname="updateSelectedNumber"class="com.bookshop.Action.CartAction"method="updateSelectedNumber"> <resultname="input"type="redirectAction"> <paramname="actionName">viewCart</param> <paramname="namespace">/</param> <paramname="actionMsg">${actionMsg}</param> </result> </action> <actionname="delCartselectedbook"class="com.bookshop.Action.CartAction"method="delCartselectedbook"> <resultname="input"type="redirectAction"> <paramname="actionName">viewCart</param> <paramname="namespace">/</param> <paramname="actionMsg">${actionMsg}</param> </result> </action> <actionname="clearCart"class="com.bookshop.Action.CartAction"method="clearCart"> <resultname="toViewCart"type="redirectAction"> <paramname="actionName">viewCart</param> <paramname="namespace">/</param> <paramname="actionMsg">${actionMsg}</param> </result> </action>4、最后订单提交成功页面如图5-6所示:图5-6订单提交成功页面5.3图书管理页面图书browseBook.jsp页面:图书管理业务控制器BookAction.java的browseBook方法通过处理用户请求book_browseBook.actaion,取得图书列表并存入List实例bookList中,供browseBook.jsp展现给用户,如下列图所示。图5-7browseBook.jsp页面运行效果当管理员将添加的图书发布之后,图书的状态如上图所示,那么与之对应,前台页面图书详细展示信息如下列图所示:图5-8图书详细信息展示页面5.4书店前台界面设计1、书店欢送页index.jsp如下列图所示,页面分为用户登录和注册模块,购物车、订单模块、图书查询模块、图书分类、促销公告、图书显示等功能模块。图5-9网上书店系统前台页面2、用户登录之后,点击新书速递中的“购置〞按钮,可以将图书添加至购物车,进入购物车管理页面,如图5-4所示,按照操作步骤,生成订单。点击页面顶部‘我的订单’,可以看到刚刚购置的图书的订单处理情况,如图5-10所示:图5-10顾客订单管理页面3、图书查询:在页面顶端搜索图书文本框中输入所要查询的图书,如书名“纳兰词〞,然后显示图书搜索结果页面:图5-11图书查询结果界面显示7总结本次毕业设计的网上书店系统是基于开源框架SSH开发的,根本上实现了会员与管理员的功能需求,学生可以通过系统可以查询图书的根本信息、购物车中选购的图书信息,撤销订单、修改注册资料等操作。管理员可以通过系统对会员信息、图书信息等模块的增、删、改、查,各个模块的功能都已根本实现。对于本文,首先介绍了网上

温馨提示

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

评论

0/150

提交评论