1、2013届毕业设计说明书 基于struts2的网上书店系统院 、 部: 计算机与信息科学学院 学生姓名: 指导教师: 职称 专 业: 计算机科学与技术 班 级: 完成时间: 2013年6月 34 / 39摘 要随着网络的不断发展,电子商务平台的不断增多,人们的购物方式变得方便快捷。在这种情况下,从网上购买书籍需求也变得非常强烈。因此,开发一套完善的图书管理系统就成不可少了。本文基于面向对象开发技术1,详细阐述了网上书店系统的设计与实现过程,该系统采用MySQL数据库,tomcat作为网络应用服务器,在MyEclipse开发环境下面采用html、javascript、css、jquery等技术控
2、制前台界面设计,是一个基于jsp技术和当前主流的MVC框架ssh(spring+struts+hibernate)开发的电子商务网站。本系统主要实现用户在网上购买书籍的过程,用户可以在网站上面注册用户后登录网站并购买书籍,登录状态下的用户可以对个人的基本信息、登录密码以及订单进行管理。做到让用户可以不用去书店就能方便快捷的买到自己理想的书籍,享受读书的快乐。关键词:网上书店;MySQL;SSH;jsp;javaAbstractWith the continuous development of Internet, e-commerce platform, increasing people b
3、ecome convenient way of shopping. In this case, from online buy books demand also become very strong. Therefore, develop a set of perfect books management system management system as necessary.Based on the object-oriented development technology, this paper expounds the design and implementation of o
4、nline bookstore system, the system USES the MySQL database, tomcat as a web application server, using HTML, JavaScript, CSS, JQuery at the front desk interface design techniques such as control under the MyEclipse development environment, is an MVC framework based on JSP technology and the current m
5、ainstream SSH (struts + spring + hibernate) development of e-commerce sites.This system mainly realizes the user in the process of buying books online, the user can login web site after registered users on site and buy books, user can login state for the basic personal information, password and mana
6、ge orders. Do let users dont have to go to a bookshop can be convenient to buy books to his ideal, to enjoy the pleasure of reading.Key words: Online bookstore;MySQL;SSH;JSP;java目 录1 绪论11.1 研究背景11.2 研究目的与意义11.3 国内外研究现状21.3.1国内网上书店研究现状21.3.2国外网上书店现状21.4 相关技术介绍31.4.1 Struts2技术简介31.4.2 Ajax技术简介41.5论文组织
7、62需求分析72.1综合需求72.2功能需求72.2.1识别外部角色72.2.2用例分析72.2.2场景分析83系统设计113.1 系统总体设计113.1.1系统基本流程113.1.2系统功能模块123.1.3系统开发环境133.1.4 MVC框架介绍133.2 数据库设计143.2.1数据库逻辑设计143.2.2数据库物理设计153.3 系统功能模块设计173.3.1 用户注册模块173.3.2 用户登陆模块183.3.3 修改用户资料模块203.3.4 图书购买模块213.3.5 上架下架图书模块223.3.6 图书搜索模块244系统测试与维护274.1系统测试环境274.2功能模块测试2
8、74.2.1登录模块274.2.2用户注册模块284.2.3修改用户资料/密码294.2.4上传图书模块304.2.5 购买图书31总 结32参考文献33致 谢341 绪论1.1 研究背景 网络是新时代最盛行的信息传递媒介,网络在发展,信息技术、Internet/Intranet技术、数据库技术地不断发展完善,网络进程的加快,传统的购物方式也越来越不能满足人们快节奏的生活需求,使得企业的IT部门已经认识到Internet的优势,电子商务就是在这样一个背景下产生和发展起来的。伴随着电子商务技术的不断成熟,电子商务的功能也越来越强大,注册用户可以在网上搜索购买到自己想要的各种商品,初步让人们体会到
9、了足不出户便可随意购物的快感。我们需要开发一个电子商务系统-网上书店销售系统。 网上书店不同的是,它更多依托地面店的优势运营。10年之后的2006年,这个国内最早的网上书店演变成了浙江博库书城及其网群。相同的是,他们仍然更多地依靠地面店的优势在运营。1999年,国内真正意义上第一家网上书店当当网上线。北京大学社会学专业毕业、从国家机关辞职下海的李国庆,拿着第一笔风险投资的基金开始了自己的网店生涯。8年后,这家号称全球最大中文网上书店的企业营业额已经达到8个亿。此后,伴随着世界电子商务浪潮的到来,越来越多的网上书店在国内兴起。1.2 研究目的与意义 电子商务将是21世纪的经济增长点,它所带动的电
10、子商务的技术、产品、服务的发展将会给不同的行业带来大量新的机会。电子商务的快速发展以及上网人数的剧增,为企业创造了许多网络商机。网上书店作为电子商务系统的一个应用具有如下优点:突破了商业往来的时间限制:网络中的计算机可以一天24小时,天天提供客户完善的网络服务。而且可以提供给全国各地的消费者,以最快的速度将公司图书的外观、内容、价格及相关信息提供给客户了解。 节省公司营运成本:网上书店本身没有店面,减少了公司的管理费用,此外,网上书店管理系统精简了办公程序,促进了管理的规范化。 提高了客户购物的积极性:顾客利用网上书店,可以很快的找到所需的图书,提交订单后,图书很快就会送到顾客手中,节省了顾客
11、的购物时间和精力。 图书商品本身的优越性:根据国内外同行的经验,专业、学术等图书更加适合邮购、自销等无店铺销售。1.3 国内外研究现状1.3.1国内网上书店研究现状在国内,有关在电子商务中的企业创新行为也有了一定的研究,近年来报刊杂志讨论的文章很多。对于传统书店和网上书店的存在和发展问题,国内学者认为,方便和快捷的网络正在改变人们传统的购书习惯,网络销售目前已占据整个图书市场的5%,未来的3至5年,网络售书将占到图书市场的20%至30%。而与此对应的是,传统书店也深深的感受到网上书店带来的阵阵冲击,或改革、或学习,传统书店面临诸多生存挑战。不过,虽然网上书店具有着众多的优势,尤其在市场范围和成
12、本优势上,但是传统的实体销售和网络销售面对的是不同的顾客群,彼此是不可取代的,甚至可互动、互促,提高交易频率。因此,建议传统书店要结合网上书店一起经营。国内学者普遍认为一个完整的网上书店系统要实现商家在线发布商品信息、消费者在线购买等功能,主要有以下几点功能:后台的网站数据远程维护包括业务数据和分类与信息的添加、修改、删除等功能;分类的灵活维护拥有不限制数量根据业务的多级分类目录;可以在线添加、删除、修改书目各级类别;注册用户、商品信息轻松地维护;支持商品图片上载功能,订单结算统计功能;用户免费注册及用户信息修改功能;购物流程简单快捷,包含商品折扣机制,强大的信息分类检索浏览功能,分类列表简洁
13、,商品条目分页显示;强大的信息查询功能,使用户更快捷地查找到用户所要的商品信息;面向消费者的订单查询功能,其他功能还包括读者点评、新书预定、用户个性化设等功能;界面友好,用户浏览网页时候视觉舒服,网站功能方便快捷易用;兼容性好,系统支持Access数据库,SqlServer数据库,即装即用。1.3.2国外网上书店现状世界上第一家网上书店是1991年在美国联机公司(AOL)的网络上建立的阅读美国书店。1994年贝佐斯在西雅图成立的亚马逊网上书店,如今已成为全球最大网上书店,1998年的顾客总数为450万,销售额达6.1亿美元,股票市值100多亿美元,控制着美国80%的网上图书销售市场。亚马逊网上
14、书店的成功在图书销售领域产生了巨大影响。1997年5月,美国最大的连锁书店巴诺书店也正式开办了网上书店。此外,美国较有名的网上书店还有肥脑网上书店鲍德斯网上书店等。据统计,到1998年美国的网上书店已达1200多家。英国的书店也比较多,大型的有因特网书店(Internet bookshop)、字母街网上书、沃特斯通网上书店。1998年,英国网上书店图书销售额为1500万英镑。德国的网上书店主要有贝塔斯曼出版集团的图书在线网上书店()、霍尔兹布林克出版公司和施普林格出版社联合开办的T-ONLINE网上书店等。据资料显示,1998年德国购书的网民达40万人。1.4 相关技术介绍 1.4.1 Str
15、uts2技术简介struts22并不是一个陌生的web框架,它是以Webwork的设计思想为核心,吸收struts1的优点,可以说struts2是struts1和Webwork结合的产物。 图1 Structs2原理图一个请求在Struts2框架中的处理分为以下几个步骤:客户端发出一个指向servlet容器的请求(tomcat);这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过滤器。过滤器FilterDispatcher是struts2框架的心脏,在处理用户请求时,它和请求一起相互配合访问struts2的底层框架结构。在web容器启动时,struts2框架会自动加载
16、配置文件里相关参数,并转换成相应的类。如:ConfigurationManager、ActionMapper和ObjectFactory。ConfigurationManager 存有配置文件的一些基本信息ActionMapper存有action的配置信息。在请求过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。过滤器会通过询问ActionMapper类来查找请求中需要用到的Action。如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。ActionProxy为Action的代理对象。Acti
17、onProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类。ActionProxy创建一个ActionInvocation的实例。ActionInvocation在ActionProxy层之下,它表示了Action的执行状态,或者说它控制的Action的执行步骤。它持有Action实例和所有的Interceptor。 ActionInvocation实例使用命名模式来调用,首先 ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。然后 通过ActionInvocation.invoke方法调用Ac
18、tion实现时,执行Interceptor。在调用Action的过程前后,涉及到相关拦截器(intercepetor)的调用。一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。1.4.2 Ajax技术简介 众所周知,Ajax3并不是一个新生的语言,它是一系列语言的结合体:HTML/XHTML、CSS、DOM、XML、XSLT、XMLHttp、JavaScript。
19、可以说Ajax涉及的知识面的确是很广的,在Web开发中为我们提供了很方便的交互式用户体验模式。以往我们浏览网页的原理是由Client向Server提交页面申请,再由Server将申请通过HTTP传回给Client生成浏览页面:图2 Ajax原理图使用Ajax后的工作原理如下图,可见通过Ajax在用户交互方面有了很大改进,用户可以不用为提交了Form而长时间等待服务器应答,而且通过Ajax也可以开发出华丽的Web交互页面。图3 Ajax工作原理图在利用Ajax向服务器提交请求时,需要先确定三点:使用GET或POST方式提交请求? 需要请求的页面(Page)或代码(Script)? 将请求的页面或
20、代码加载到页面什么位置?其中readyState表示当前对象状态,分为04的类别,0: uninitialized, 1: loading, 2: loaded, 3: interactive, 4: complete。status表示HTTP响应状态,常见状态有200 OK,304 Not Modified,401 Unauthorized,403 Forbidden,404 Not Found,500 Internal Server Error,503 Service Unavailable。代码中认定readyState=4和status=200为正常状态。1.5本文组织结构本文围绕着开
21、发一个基于struts2的网上书店系统,描述了完成这个系统的主要过程,本文分为如下几个部分:第一章是介绍网上书店系统的背景及国内外现状;第二章主要对网上书店系统的需求进行了详细的分析,为系统的设计做好前期准备;第三章主要是系统的设计思路及详细实现过程,主要包括了系统总体设计,数据库设计以及系统功能的具体实现;第四章对系统进行了系列的测试,验证最后的系统功能;第五章对本项目所获得的系统做了相应的总结。2需求分析2.1综合需求基于struts2的网上书店系统,基本能够实现书店销售的一些流程,做好信息的录入。该系统是一个基于internet网络的网上B/S9书籍交易平台,用户可以通过在网上点击搜索查
22、看并购买书籍,正真做到足不出户就可以获得自己想要的学习资料及课外书籍。功能主要包括:用户注册/登陆、用户资料修改、购买书籍、用户账单管理等功能。2.2功能需求2.2.1识别外部角色在买书网这个系统中,首先我们可以确定“管理员”和“普通用户”是该系统的两个主要实体。2.2.2用例分析管理员负责维护系统书籍并使用系统的主要功能,普通用户从系统中获取所需要的书籍及对自己基本资料进行维护。以上两个实体的主要功能如表1所示;用例图如图4所示。表1 基本用例实体功能普通用户注册用户注册、查询图书登陆、修改个人资料、查询/购买图书、订单查询管理员登陆、上架图书、下架图书、管理系统用户图4 系统用例图2.2.
23、2场景分析用户登陆场景:用户输入用户名和密码之后将数据提交到后台,后台对用户名和密码进行判断,如果判断成功跳转到首页,如果不成功就返回让用户重新登录。图5 用户登陆顺序图用户注册场景:用户访问注册页面输入用户基本信息及登录密码之后,前台先对数据合法性判断,判断成功之后提交到后台,后台将数据最终回写到数据库库。图6 用户注册顺序图用户修改资料场景:用户登录系统之后可以查看并修改用户相关资料,主要包括修改登录密码、联系方式及其他除用户名之外的所有信息。图7 修改用户资料顺序图用户账单管理场景:用户购买书籍后会生成相应的账单,用户在登录系统的状态下可以查看并管理自己的账单。用户账单管理主要只提供查看
24、功能,用户可以通过制定对应日期及相关条件查看制定的订单。图8 账单管理顺序图图书上架/下架场景:当有存在图书过期或者断货的时候管理员可以对图书进行下架,简单来说就是将对应的图书删除不在显示在书店中,同样当存在新的图书的时候管理员可以添加新的图书到书店中,添加时候管理员需要提供图书的详细信息。图9上架图书顺序图3系统设计系统设计的目的是9确定系统如何完成预定的任务,也就是确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。首先需要从数据流程图15出发,设想完成系统功能的若干种合理的物理方案,分析员应该仔细比较这些方案,并且和用户共同选定一个最佳的方案,然后,进行软件结构设计,确定软件由
25、哪些模块组成以及这些模块之间的动态调用关系。进行软件结构设计时应该遵循的最主要的原理是模块独立原理,也就是说:软件应该由一组完成相对独立的子功能模块组成,这些模块之间的接口关系应尽量简单。自顶向下逐步求精是进行软件结构设计的常用途径,但是,如果已经有了详细的数据流图,也可以使用面向数据流的设计方法,用形式化的方法有数据流图映射软件结构。在进行详细的过程设计和编写程序之前,首先进行结构设计,其好处在于可以在软件开发的早期站在全局高度对软件结构进行优化,在这个时期进行优化付出的代价不高,却可以是软件质量得到重大的改进。3.1 系统总体设计3.1.1系统基本流程基于struts2的网上电子书店,实现
26、网上购书的整个流程,用户进入网站的主页,可以先浏览书籍,也可以选择先注册用户成为书店的合法用户,如果用户没有注册并且登陆,是不能够实现下单操作的。用户可以通过网站上的图书查询或者点击图书,浏览商品的详细信息,如果要购买该书籍,则可以点击购买按钮将该书籍加入购物车,然后可以选择继续浏览书籍,或者去结账下单操作,如果此时用户没有注册登陆,则是不能够进行下单操作的,在对购物车进行操作时候,用户可以选择修改商品的数量,也可以选择删除该商品,删除的将放在下面的页面显示删除过的商品,用户可以选择恢复操作,恢复刚刚删除的商品,用户可以直接点击结账进入确定购买的商品,然后用户选择下一步填写收货地址,收货用户以
27、及一些其他的基本信息,如果用户以前购买商品,用户可以选择以前使用过的商品地址,直接生成,减少用户的数量两,最后,最后生成一个订单信息,告诉用户。此时用户还可以继续购买书籍。整体流程如图10所示。继续购书 用户注册 用户等登陆查找图书 用户资料修改 没登陆 成功添加 添加到购物车 查看购物车 修改数量 退回指定图书 结账 生成订单 支付 确认收货 订单查询 清空购物车 图10 整体流程图3.1.2系统功能模块用户模块:用户注册部分:网上书店规定只有合法用户才能购买图书,所以要购买图书的新用户必须进行注册,为了能及时发货给用户以及随时联系用户,所以系统必须记录每一位用户的详细信息。在用户注册的时候
28、,提供用户名的唯一性验证,密码安全性验证。用户登录部分:提供用户登录功能,如果用户名和密码不正确,不允许登录。用户名密码验证成功就提示用户登录成功,用户就可以进行购买操作。查看书籍模块:提供用户浏览各个书籍的功能,用户能够根据自己的需要浏览需要的商品,同时还提供购买操作功能,将用户需要购买的商品加入购物车。购物车模块:记录用户浏览购买的商品,提供用户删除指定的商品,清空购物车里面的商品。订单模块:用于生成用户的订单信息,并且记录用户的订单信息到数据库中,同时记录用户的地址信息。数据库模块:用于存放用户的数据,图书的数据,以及用户订单的数据等。网上书店 图书显示 新书上架 图书分类浏览 销售排行
29、 用户模块 用户注册 用户登陆 购物车 生成订单添加至购物车 查看购物车 移除指定图书 清空购物车 数据库图11系统模块划分图3.1.3系统开发环境服务器:Tomcat7.010;数据库:MySQL-5.6.105;平台:MyEclipse 8.54操作系统:windows 7(32位)框架:SSH(struts2+spring+hibernate) 83.1.4 MVC框架介绍MVC14的定义:MVC全名是Model View Controller,是模型(model)视图(view)控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个
30、方法的假设前提是如果业务逻辑被聚集到一个部件里面,而且界面和用户围绕数据的交互能被改进和个性化定制而不需要重新编写业务逻辑MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。MVC如何工作:MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。视图:视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia F
31、lash和XHTML,XML/XSL,WML等一些标识语言和Web services。如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。模型:模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需
32、写一次就可以被多个视图重用,所以减少了代码的重复性。控制器:控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。3.2 数据库设计3.2.1数据库逻辑设计依据网上书店的处理需求,对应数据表的设计及功能如下:用户表:存放网上书店用户信息。用户账户:存放网上书店用户的账户信息。书籍信息表:存放书店书籍的描述信息。书籍内容表:存放书籍的内容包括封面及目录等。订单表:存放购买书籍订单消息。订单子表:存放订单的详细信息书
33、籍类型:存放书籍的类型数据库的逻辑设计图:图12 逻辑设计图3.2.2数据库物理设计在基本的数据表的结构确定后,就可以在MySQL中完成数据表的创建工作,下面给出建立对应数据表的SQL脚本。用户表create table user( ID int(8) not null, name varchar(50) NOT NULL unique, alias varchar(50), password varchar(50) NOT NULL, telephone varchar(10), email varchar(20), primary key (ID);alter table user com
34、ment 用户表;用户账户表create table useraccount( id int(8) not null, use_ID int(8), integral numeric(8,5), balance numeric(8,5), password varchar(50), primary key (id);alter table useraccount add constraint FK_1 foreign key (use_ID) references user (ID) on delete restrict on update restrict;书籍表create table b
35、ook( id int(8) not null, name varchar(100), price numeric(5,2), integral int(8), buycount int(8), createTime datetime, booktype varchar(50), totalCount int(8), primary key (id);书籍内容表create table bookcontent( id int(8) not null, book_id int(8), content blob, type int(5), primary key (id);alter table
36、bookcontent add constraint FK_2 foreign key (book_id) references book (id) on delete restrict on update restrict;书籍类型create table booktype( id int(8) not null, name varchar(100), primary key (id);订单create table order( id int(8), user_id int(8), status int(2), price float(10);alter table order add co
37、nstraint fk_5 foreign key (user_id) references user (ID) on delete restrict on update restrict;订单子表create table order_2( id int(8), orderId int(8), bookId int(8), price float);alter table order_2 add constraint FK_4 foreign key (orderId) references order (id) on delete restrict on update restrict;al
38、ter table order_2 add constraint FK_3 foreign key (bookId) references book (id) on delete restrict on update restrict;3.3 系统功能模块设计3.3.1 用户注册模块过程描述用户访问regist.jsp,输入用户名、密码、昵称、密码、手机号码及邮箱之后点击提交便可以在买书网上免费注册一个属于自己的账户,在输入内容的时候前台jsp页面需要对用户名及密码进行空值判断。同时为了确保用户的唯一性需要对用户名进行判断。如果所有的条件判断通过之后提交到后台,后台将数据内容存入数据库对应的用
39、户表中,将用户添加到session对象中(注册完后默认用户为登录状态),页面跳转到首页。数据流程图,如图13所示。实现的主要代码17public String execute() throws Exception / 得到requestHttpServletRequest request = ServletActionContext.getRequest();User user = new User();user.setName(getName();user.setPassword(getPassword();user.setAlias(getAlias();user.setEmail(get
40、Email();user.setTelephone(getTelephone();boolean account = service.regist(user); if (account) request.getSession().setAttribute(user, user);return SUCCESS; else return ERROR;3.3.2 用户登陆模块过程描述用户访问login.jsp,输入用户名和密码点击登录,在登录过程中前台会先做简单的判空处理,通过之后提交到后台,后台通过用户名从数据库中获得对应的用户记录,如果为获得用户则跳转到错误错误页面,如果用户存在比较密码,如果密
41、码不同则跳转到错误提示页面,如果所有判断通过保存用户session信息,然后根据模式进行相应的跳转(例如:当从个人资料里面登陆则跳转到个人资料,首页则跳转到首页)。数据流程图,如图14所示。图13 数据流程图 图14 用户登录流程图(3)实现的主要代码public String execute() throws Exception / 得到requestHttpServletRequest request = ServletActionContext.getRequest();/账户是否正确User user = service.login(getUserName(), getPassword
42、(); boolean account = false;if(user!=null)if(getPassword().equals(user.getPassword()account = true;if (account) ServletActionContext.getRequest().getSession().setAttribute(user, user);if(mode!=null&detail.equals(mode)return detail;elsereturn index; else return ERROR;3.3.3 修改用户资料模块过程描述修改用户基本资料:用户访问买书
43、网首页,点击我的买书网进入到功能页面,点击个人资料,从session中获取当前用户信息。用户对个人资料进行编辑修改之后点击提交,前台进行简单判断空处理。前台验证通过之后提交到后台,后台通过用户ID获得对应的用户,修改用户对象,将修改的内容写入数据库修改用户登陆密码:用户访问首页,在首页点击修改密码连接将弹出一个对话框修改用户密码,在修改密码时需要对原有的密码进行验证通过之后,用户需要输入两次相同的新密码,验证无误之后提交到后台,后台从session中获得用户对象修改其密码,并回写到数据库中。数据流程图:如图15所示。实现的主要代码public void exe() throws Exception HttpServletRequest request = ServletActionContext.getRequest();request.setCharacterEncoding(utf-8);PrintWriter pw =