已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要互联网技术发展到现在已经相当成熟,互联网已经成为一个全世界最大最全的信息中心,越来越多的人在利用互联网来完成他们的工作,同时也有越来越多的人利用互联网来解放他们的生活,他们利用互联网来完成几乎所有所有现实生活中的事物。由于所有的领域都在利用互联网,传统商业也是,现在已经有越来越多的商家将他们的生意搬上了互联网,他们小一点的可以开个小的网店。大一点的可以开个网站。本次毕业设计的题目就是设计和实现一个网上售书的电子商务网站。为一个传统的书店提供一个网上展览和销售的平台。本系统主要以STRUTS和HIBERNATE加MYSQL为开发基础,以JSP为前台表现手段。在功能上面基本实现一个电子商务网站应该有的功能模块,包括前台和后台两个层面。前台方面主要功能有用户注册,登录,注销,添加收货人信息,修改收货人信息,删除收货人信息,浏览商品。添加商品进购物车,修改购物车中商品,删除购物车中商品,清空购物车,将购物车中商品生成定单,查看定单,查看定单明细。后台方面主要功能有查看管理员列表,添加管理员,删除管理员,修改管理员,查看用户列表,添加用户,删除用户,修改用户,查看商品列表,添加商品,删除商品,修改商品,查看定单列表,删除定单等。关键字STRUTSHIBERNATEB/SABSTRACTINTERNETTECHNOLOGYHASBEENDEVELOPEDTOAMATURE,THEINTERNETHASBECOMEAWORLDWIDELARGESTANDMOSTOFTHEINFORMATIONCENTER,ANINCREASINGNUMBEROFPEOPLEUSINGTHEINTERNETTOCOMPLETETHEIRWORK,ANDALSOMOREANDMOREPEOPLEUSETHEINTERNETTOTHELIBERATIONOFTHEIRLIVESTHEYUSETHEINTERNETTOCOMPLETEALMOSTALLOFALLTHETHINGSINREALLIFESINCEALLTHEFIELDSINTHEUSEOFTHEINTERNET,TRADITIONALBUSINESSISALSONOWAGROWINGNUMBEROFBUSINESSMENWILLBETHEIRBUSINESSONTOTHEINTERNET,THESMALLERTHEYCANOPENASMALLSHOPTHEBIGPOINTCANOPENAWEBSITETHEGRADUATIONPROJECTISTHESUBJECTOFDESIGNANDIMPLEMENTATIONOFANONLINEBOOKSELLERSOFECOMMERCESITESFORATRADITIONALONLINEBOOKSTORETOPROVIDEAPLATFORMFOREXHIBITIONANDSALETHISSYSTEMISMAINLYTOSTRUTSANDHIBERNATEBASISFORTHEDEVELOPMENTANDMYSQLTOJSPFORTHEFUTUREPERFORMANCEOFMEANSINTHEABOVEBASICREALIZATIONOFAFUNCTIONALECOMMERCESITESSHOULDHAVEFUNCTIONALMODULES,INCLUDINGTHEPROSPECTSANDTHEBACKGROUNDLEVELPROSPECTSINTHEMAINFEATURESAREUSERREGISTRATION,SIGNIN,WRITEOFF,ADDTHECONSIGNEE,THECONSIGNEETOAMENDTHEINFORMATION,DELETETHECONSIGNEEINFORMATION,VISITTHEMERCHANDISEADDGOODSINTOTHESHOPPINGCART,SHOPPINGCARTOFGOODSAMENDEDTODELETETHESHOPPINGCARTOFGOODS,EMPTYSHOPPINGCART,THECARTWILLGENERATEGOODSORDERS,VIEWORDERS,ORDERSDETAILSVIEWBACKGROUNDINTHEMAINFEATURESARESHOWTHELISTADMINISTRATORS,MANAGERSADD,DELETEADMINISTRATOR,MODIFYADMINISTRATORTOVIEWTHELISTOFUSERS,ADDUSERS,DELETEUSERS,MODIFYTHEUSERTOVIEWTHELISTOFGOODS,ADDEDCOMMODITIES,COMMODITIESDELETE,MODIFYMERCHANDISE,VIEWORDERSLIST,DELETEANDSOONORDERSKEYWORDSTRUTSHIBERNATEB/S目录摘要1ABSTRACT2目录31绪论52开发环境及开发工具的介绍621JAVA语言介绍622JAVABEAN介绍623SERVLET/JSP介绍724ECLIPSE介绍725TOMCAT介绍726MYSQL介绍83开源框架介绍931HIBERNATE介绍9311HIBERNATE的工作方式9312使用HIBERNATE的场合9313HIBERNATE的两中类型的配置文件1032STRUTS介绍11321模型MODEL11322视图VIEW11323控制器CONTROLLER114需求分析1341系统主要功能详细描述1342系统角色及其功能分析135系统总体设计1451DB层设计1752DAO层设计2153SERVICE层设计2154WEB层设计21541控制器CONTROLLER21542模型MODEL22543表现VIEW2255系统数据流图产品模块,定单模块,购物车模块226详细设计2461系统的数据库设计24611PRODUCT表24512ORDER表25513ORDERITEM表2552系统模块的划分26521产品模块主要子模块26532购物车模块主要子模块26533定单模块主要子模块2653系统模块的具体实现26531产品模块主要子模块265311增加产品26532购物车模块主要子模块30533定单模块主要子模块33总结与体会35致谢36参考文献371绪论近年来,随着INTERNET的迅速崛起,互联网已日益成为收集提供信息的最佳渠道并进入传统的流通领域。于是电子商务开始流行起来,一种全新的购物理念开始形成并逐步发展。网上购物是一种具有交互功能的商业信息系统。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些比经常变动或更新的资源,如公司简介等;动态信息是指随时变化的商务,是通过电子化的手段来完成商业贸易活动的一种方式。等等。那么究竟什么是电子商务电子商务,顾名思义是指在互联网上进行的电子化的商务活动。从狭义上看,电子商务也就是电子交易,主要指利用WEB提供的通信手段在网上进行交易活动,包括通过INTERNET买卖产品和提供服务。产品可以是实体化的,如汽车、电视,也可以是数字化的,如新闻、录像、软件等基于比特的产品。此外,还可以提供各类服务,如安排旅游、远程教育等。总之,电子商务并不仅仅局限于在线买卖,它将从的信息,如商品报价,会议安排和培训信息等。网上购物系统具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易或EDI交易。这种全新的交易方式实现了公司间文档与资金的无纸化交换。今天,我们已经可以确信电子商务毋庸置疑是未来的发展方向。但是电子商务却还没有一个标准的定义。INTEL公司认为电子商务电子市场电子交易电子服务;IBM认为电子商务WEB;HP公司则说“电子生产到消费各个方面影响进行商务活动的方式。除了网上购物,电子商务还大大改变了产品的定制、分配和交换的手段。而对于顾客,查找和购买产品乃至服务的方式也大为改进。而从广义上讲,电子商务还包括企业内部商务活动,如生产、管理、财务等以及企业间的商务活动,它不仅仅是硬件和软件的结合,更是把买家、卖家、厂家和合作伙伴在INTERNET、INTRANET和EXTRANET上利用INTERNET技术与现有的系统结合起来开展的业务活动。从最初的电话、电报到电子邮件以及20多年前开始的EDI,都可以说是电子商务的某种形式;发展到今天,人们已提出了包括通过网络来实现从原材料的查询、采购、产品的展示、定购到出品、储运以及电子支付等一系列贸易活动在内的完整电子商务的概念。在发达国家,电子商务已发展迅速,通过INTERNET进行交易已成为潮流。2开发环境及开发工具的介绍21JAVA语言介绍JAVA语言是一门高级程序设计语言它在各个重要的行业部门得到了广泛的应用,JAVA技术的通用性、高效性、平台移植性和安全性,使之成为网络计算的理想技术除上面的技术之外还有其他的特点JAVA语言是面向对象的语言,主要集中在对象和接口的设计。JAVA将具有相同特性的数据封装成一个类,实现了对现实实体的抽象,也就是对对象的总体描述;JAVA可以实现模块化和信息隐藏,JAVA将数据和操作数据的方法封装在一起,使得数据全都隐藏起来,暴露给外面程序的仅是对数据操作的方法;一个类提供了一类对象的原型,通过JAVA的继承机制,子类可以使用父类所提供的方法,从而实现了代码的复用;多态就是一个实体多种形态,在JAVA中表现的最突出的就是一个类实现了多个接口,从而可以有多个功能。另外JAVA语言是安全的,JAVA不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用“特洛伊“木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。JAVA程序是可移植的,与平台无关的特性使JAVA程序可以方便地被移植到网络上的不同机器。同时JAVA的类库中也实现了与不同平台的接口,使这些类库可以移植。另外,JAVA编译器是由JAVA语言实现的,JAVA运行时系统由标准C实现,这使得JAVA系统本身也具有可移植性。JAVA语言和其它解释执行的语言如BASIC不同,JAVA字节码的设计使之能很容易地直接转换成对应于特定CPU的机器码,从而得到较高的性能。22JAVABEAN介绍简单地说,JAVABEAN是用JAVA语言描述的软件组件模型,其实际上是一个类。这些类遵循一个接口格式,以便于使函数命名、底层行为以及继承或实现的行为,可以把类看作标准的JAVABEAN组件进行构造和应用。JAVABEAN有以下特点易于维护、使用、编写。可实现代码的重用性。可移植性强,但仅限于JAVA工作平台。便于传输,不限于本地还是网络。可以以其他部件的模式进行工作。JAVA程序中往往有重复使用的段落,JAVABEAN就是为了能够重复使用而设计的程序段落,而且这些段落并不只服务于某一个程序,而且每个JAVABEAN都具有特定功能,当需要这个功能的时候就可以调用相应的JAVABEAN。从这个意义上来讲,JAVABEAN大大简化了程序的设计过程,也方便了其他程序的重复使用。23SERVLET/JSP介绍JSP(JAVASERVERPAGE)是在普通HTML中嵌入了JAVA代码的一个脚本,在这一点上,它与其它的脚本语言一样,但它与其它语言不同的是其它脚本语言由服务器直接解释这个脚本,而JSP则由JSP容器(如TOMCAT)首先将其转化为SERVLET,然后再调用JAVAC将SERVLET编译为CLASS文件最终,服务器解释的是CLASS文件那么什么是SERVLET呢SERVLET其实是一个特殊的JAVA类,SERVLET类一般从HTTPSERVLET类继承而来,在这个类中至少要实现DOGET或者DOPOST函数,在这两个函数中处理来自客户的请求,然后将结果返回24ECLIPSE介绍ECLIPSE是一种可扩展的开放源代码IDE,业界厂商合作创建了ECLIPSE平台ECLIPSE允许在同一IDE中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改变了项目工作流程,使开发者可以专注在实际的业务上利用ECLIPSE,我们可以将高级设计也许是采用UML与低级开发工具如应用调试器等结合在一起如果这些互相补充的独立工具采用ECLIPSE扩展点彼此连接,那么当我们用调试器逐一检查应用时,UML对话框可以突出显示我们正在关注的器件事实上,由于ECLIPSE并不了解开发语言,所以无论JAVA语言调试器、C/C调试器还是汇编调试器都是有效的,并可以在相同的框架内同时瞄准不同的进程或节点ECLIPSE的最大特点是它能接受由JAVA开发者自己编写的开放源代码插件,这类似于微软公司的VISUALSTUDIO和SUN微系统公司的NETBEANS平台ECLIPSE为工具开发商提供了更好的灵活性,使他们能更好地控制自己的软件技术。25TOMCAT介绍TOMCAT是一个免费的开源的SERLVET容器,是一个开源的服务器,里面可以装载WAR的类似于JAR的压缩文件,这个文件按一定目录结构来组织通常其根目录下包含有HTML和JSP文件或者包含这两种文件的目录,另外还会有一个WEBINF目录,这个目录很重要通常在WEBINF目录下有一个WEBXML文件和一个CLASSES目录,WEBXML是这个应用的配置文件,而CLASSES目录下则包含编译好的SERVLET类和JSP或SERVLET所依赖的其它类(如JAVABEAN)在TOMCAT中,应用程序的部署很简单,你只需将你的WAR放到TOMCAT的WEBAPP目录下,TOMCAT会自动检测到这个文件,并将其解压你在浏览器中访问这个应用的JSP时,通常第一次会很慢,因为TOMCAT要将JSP转化为SERVLET文件,然后编译编译以后,访问将会很快26MYSQL介绍MYSQL是一个真正的多用户、多线程SQL数据库服务器,它是一个客户机/服务器结构的实现。MYSQL是现在流行的关系数据库中其中的一种,相比其它的数据库管理系统(DBMS)来说,MYSQL具有小巧、功能齐全、查询迅捷等优点。MYSQL主要目标是快速、健壮和易用。关键的是它是免费的,可以在INTERNET上免费下载到,并可免费使用。MYSQL对于一般中小型,甚至大型应用都能够胜任。MYSQL是开源的,开源意味着任何人都可以使用和修改该软件,任何人都可以从INTERNET上下载和使用MYSQL而不需要支付任何费用如果你愿意,你可以研究其源代码,并根据你的需要修改它3开源框架介绍31HIBERNATE介绍311HIBERNATE的工作方式使用HIBERNATE惟一需要做的就是创建一份XML“映射文档”,告诉HIBERNATE希望保存在数据库中的类,以及它们如何关联到该数据库中的表和列,然后就可以要求HIBERNATE以对象的形式获取数据,或者把对象保存为数据HIBERNATE在运行时,HIBERNATE首先读取映射文档,然后动态构建JAVA类,以便管理数据库与JAVA之间的转换在HIBERNATE中有一个简单而直观的API,用于对数据库所表示的对象执行查询要修改这些对象,(一般情况下)只需在程序中与它们进行交互,然后告诉HIBERNATE保存修改即可类似地,创建新对象也很简单;只需以常规方式创建它们,然后告诉HIBERNATE有关它们的信息,这样就能在数据库中保存它们HIBERNATEAPI学习起来很简单,而且它与程序流的交互相当自然在适当的位置调用它,就可以达成目的它带来了很多自动化和代码节省方面的好处,所以花一点时间学习它是值得的而且还可以获得另一个好处,即代码不用关心要使用的数据库种类借助于HIBERNATE,只需要简单地修改HIBERNATE配置文件即可312使用HIBERNATE的场合如果应用对于数据存储的需要十分简单例如,您只想管理一组用户优先选择就根本不需要数据库,更不用说一个优秀的对象关系映射系统了对于熟悉使用关系数据库和了解如何执行完美的SQL查询与企业数据库交互的人来说,HIBERNATE似乎有些碍手碍脚,这就像带有动力和自动排挡的快艇车会使注重性能的赛车驾驶员不耐烦一样如果您属于这种人,如果您所在的项目团队拥有一个强大的DBA,或者有一些存储过程要处理,您可能想研究一下IBATIS当然,还有其他的外部原因会导致采用另外的方法比如,在一个企业环境中,必须使用成熟的EJB架构(或者其他的一些非普通对象映射系统)可以为提供自己的数据存储工具的平台量身定做代码,比如MACOSXSCOREDATA使用的可能是像XMLDTD这样的存储规范,而它根本不涉及关系数据库但是,如果您使用的是富对象模型,而且想要灵活、轻松且高效地保存它,那么HIBERNATE很可能就是您理想的选择您可能会惊讶于节省的时间之多,以及您将会多么地喜欢使用它313HIBERNATE的两中类型的配置文件首先创建系统的HIBERNATE配置文件HIBERNATECFGXML,该文件中存放着数据库连接驱动程序类、登录数据库的用户名/密码、映射持久化类配置文件的位置等,HIBERNATE初始化时会自动在CLASSES路径中寻找这个文件,并读取其中的配置信息,为后期数据库操作做准备,其完整代码如下。COMMICROSOFTJDBCSQLSERVERSQLSERVERDRIVERJDBCMICROSOFTSQLSERVER/1270011433DATABASENAMEDB_MATERIALSATRUE创建持久化类的映射文件32STRUTS介绍STRUTS是一个基于SUNJ2EE平台的MVC框架,主要是采用SERVLET和JSP技术来实现的由于STRUTS能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的这段时间里STRUTS把SERVLET、JSP、自定义标签和信息资源MESSAGERESOURCES整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说STRUTS是一个非常不错的应用框架STRUTS主要有三个部分组成,首先是支持MVC模式的的三个部分,其次是关于STRUTS的配置文件STRUTSCONFIGXML。下面来介绍下他们。321模型MODEL本质上来说在STRUTS中MODEL是一个ACTION类这个会在后面详细讨论,开发者通过其实现商业逻辑,同时用户请求通过控制器CONTROLLER向ACTION的转发过程是基于由STRUTSCONFIGXML文件描述的配置信息的322视图VIEWVIEW是由与控制器SERVLET配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面323控制器CONTROLLER本质上是一个SERVLET,将客户端请求转发到相应的ACTION类STRUTSCONFIGXML配置文件是整个框架的主心骨WEBXML文件定义了一个请求到来应向何处转发后,后面的工作就全权由STRUTSCONFIGXML管理控制了可以说STRUTSCONFIGXML就是整个STRUTS框架的核心,只有它清楚所有请求与动作的映射关系。如今的应用系统,XML形式的配置文件越来越多,如果整个系统只使用一个这样的配置文件的话,那么保持整个系统的模块化和可维护性都非常的轻松使用配置文件来描述请求动作的控制过程和相互关系,而不是在代码中将对象之间的调用关系写死,那么当应用系统有变动时,我们只用修改配置文件就行了,而不是再重新编译发布程序了CONTROLLER通过STRUTSCONFIGXML文件的配置信息确定当有请求时应该调用那个对象来处理,从效率的角度出发,这些信息都是在系统启动时读入并存在内存中的4需求分析41系统主要功能详细描述用户可以注册,登录。登录用户可以查看用户资料,修改密码,添加收货人,删除收货人。1所有用户可以浏览商品列表及每个商品的详细信息。2所有用户可以进行查询本站所拥有的自己需要的物品。3所有用户可以查看用户留言列表,登录用户可以留言。3登录用户可以进行购物,并会像超市的购物车一样放入自己需要的物品以便后面的下单。登录用户可以对自己的购物车进行相关操作。4登录用户可以在进行购物后,进行下单,网站可以对定单进行处理。5用户只能查看自己已经有的定单,并能看到每个定单的详细信息。6后台管理员可以对用户进行添加,删除,修改和查询操作。6后台管理员可以对商品进行添加,删除,修改和查询操作。7后台管理员可以查看所有的用户对应的定单。并能对每个定单进行删除操作。6后台管理员可以对用户留言进行删除操作。42系统角色及其功能分析系统主要用户有三类游客,登陆用户,管理员。游客主要可以用的功能是查看所有商品,搜索商品,查看商品详细信息,查看用户留言列表。登录用户主要可以用的功能查看修改自己的资料,查看所有商品,搜索商品,查看商品详细信息,购买商品,下定单,查看定单,查看用户留言列表,留言。管理员主要功能操作普通管理员信息,操作用户信息,操作产品信息,操作定单信息,操作用户留言信息。5系统总体设计网上书城系统是基于B/S架构。实现网上售书的电子商务网站。系统使用JAVA语言开发,利用到HIBERNATE和STRUTS等开源框架,整个系统分成多层,有效实现了系统各部分的低偶合整个系统主要有表现层业务层数据访问层。利用软件分层把系统偶合度降低。在数据访问层,使用接口和和实现分离。上层的服务只依赖于底层的接口,底层的实现方式改变不会影响到上层的服务。这样就会最大程度的降低了软件各部分之间的偶合。便于以后修改底层的实现。在分层的基础上。有将软件分模块,从而使系统横向上面分模块,纵向上面分层次。整个软件的层次是表现层业务层数据访问层DB整个软件根据系统需求分析,可得出系统两种用户的业务流程图。前台用户操作业务流程为开始浏览用户留言信息览商品列表登录浏览商品详细信息登录NN登录YY添加商品进购物车用户留言购物车生成定单退出结束在用户业务流里面,首先用户连接到主界面,主界面显示所有商品,并且提供商品的搜索服务,在主界面可以直接连接到用户留言列表界面,在主界面还可以连接到用户登录界面。用户在主界面可以浏览所有的商品,也可以查看商品的详细信息,在用户主界面和商品详细信息界面,用户可以将商品添加进购物车,此操作只有登录用户可以使用,非登录用户选自添加进购物车会被拦截到未登录界面。用户在留言主界面可以进行留言。非登录用户不能留言。用户可以点击购物车,进入购物车界面,在购物车界面,用户可以对购物车里的商品进行删除操作,也可以将购物车中的商品修改数量,还可以清空购物车。也可以在购物车界面选择继续购物,连接到主界面继续选择商品。用户还可以在购物车界面进行下单操作。将购物车里的商品生成定单。生成定单后,用户可以查看自己的定单。后台管理员的业务流程为开始登录管理员主界面有权限N权限出错页面Y管理员管理用户管理产品管理定单管理留言管理退出结束在后台中,管理员可以直接进入管理员入口登录管理员管理界面。在管理员管理的主界面显示的是管理员所有的操作。管理员可直接选择操作进入不同的管理界面,对管理员管理主要有超级管理员来实现,其他管理员没有此操作。用户管理界面直接显示所有用户的列表,在用户管理界面。管理员可以选择添加和删除用户,在产品管理界面,管理员可以添加和删除产品。定单管理界面。管理员可以删除定单。留言管理界面。管理员可以删除留言。51DB层设计DB主要是保存实体及实体之间关系的,这里只些关于此次系统中作者设计的几个模块的ER图441USER于ORDER关系图CREATETIMEORDERITEMSORDERSTATEPAYINFOTOTALPRICEORDERIDUSERUSERITEMORDERNHAVE1USERUSERIDUSERNAMECREATETIMESTATEORDERSROLEPASSWORDUSERITEMS用户与定单之间是一对多的关系,每个用户可以同时有多个定单,每个定单却只能属于一个用户。这样在定单的实体类中就会有一个对用户的引用,在用户的实体类中就会有一个集合用来保存用户当前所有的定单。在数据库中,用户和定单是两张表,定单表中的外键是用户表中的主键,在这里要注意一点。在查找用户的时候会同时把用户所有的定单都拿到,所以要在用户实体类的HIBERNATE配置文件中将定单集合的延迟加载设置为FALSE这样就能在查出的用户中直接拿到用户所有的定单442ORDER与ORDERITEMCREATETIMEORDERITEMSORDERSTATEPAYINFOTOTALPRICEORDERIDUSERUSERITEMORDER1ORDERBYNORDERITEMORDERORDER_ITEM_IDPRODUCTQUALITY定单与定单条目之间是一对多的关系,每个定单可以同时有多个定单条目,每个定单条目却只能属于一个定单。这样在定单条目的实体类中就会有一个对定单的引用,在定单的实体类中就会有一个集合用来保存用户当前所有的定单条目。在数据库中,定单和定单条目是两张表,定单条目表中的外键是定单表中的主键,在这里要注意一点。在查找定单的时候要同时把定单所有的定单条目都拿到,所以要在定单实体类的HIBERNATE配置文件中将定单条目集合的延迟加载设置为FALSE这样就能在查出的定单时直接拿到定单所有的定单条目443ORDERITEM与PRODUCTNAMEORDERITEMSPRICEOTHERSPRODUCT1HASNORDERITEMORDERORDER_ITEM_IDPRODUCTQUALITY产品与定单条目之间是一对多的关系,每个定单条目只包含一中产品。每个产品对应多个定单条目,这里多个定单条目不是属于同一个定单。这样在定单条目大实体类中就会有哟个属性用来保存产品的引用,产品中也相应的有一个结合来保存所有包含此产品的定单条目。在数据库中,产品和定单条目是两张表,定单条目表中的外键是产品表中的主键。这里不需要在得到产品的时候就拿到定单条目的集合,所以使用默认的HIBERNATE配置就可以了。444ORDER与USERITEMCREATETIMEORDERITEMSORDERSTATEPAYINFOTOTALPRICEORDERIDUSERUSERITEMORDERNTO1USERITEMUSER_ITEM_IDUSERITEM_NAMEORDERSITEM_ADDRESS收货人与定单之间是一对多的关系,每个收货人可以同时有多个定单,每个定单却只能属于一个收货人。这样在定单的实体类中就会有一个对收货人的引用,在收货人的实体类中就会有一个集合用来保存用户当前所有的定单。在数据库中,收货人和定单是两张表,定单表中的外键是定收货人表中的主键。52DAO层设计在数据访问层,将全部使用接口和实现分离,这样便于以后更换数据库等工作。在这层中,主要是对数据库的表操作。我们利用的是HIBERNATE技术。这是一种ORM技术,可以将关系数据库中存的每条记录都对应成一个实体,由于所有数据库中的表都只通过DAO来访问,所以在DAO中要有每个表的入口。因此,要为每和实体类对应一个DAO。53SERVICE层设计SERVICE主要是系统的业务逻辑,也就是系统的实际的业务逻辑活动,是系统的真正的核心,这一层主要都是一些业务。同时这一层中应该加上事务,因为,对数据库的操作可能出现异常,而SERVICE完全依赖于DAO,所以当数据库出现异常后,这里可以对未完成的事务进行回滚。54WEB层设计WEB层主要是用来接收用户请求,并通过请求的不同选择相应的服务来处理请求,再把结果表现给用户。这样在WEB中把请求,服务和表现分开。我们在JAVA的开源框架中选择STRUTS来做WEB层,我们首先利用ACTION来接收请求,在ACTION中有不同的方法来处理不同的请求,再在ACTION中调用相应的SERVICE来处理请求。对执行结果进行判断后,选择不同的JSP来进行表现。STRUTS中这种开发我们成为MVC模式,下面是MVC模式的图解,以及在本系统中的具体作用C控制层ACTIONNEWREQUESTRETURNM模型层浏览器FORWARD/REDIRECTRESPONSEV视图层JSP541控制器CONTROLLERCONTROLLER是这个框架中扮演“交通警察”的角色,当客户端与服务器有交互动作时,都由她来控制CONTROLLER将HTTP请求封包并转发到框架中相应的对象,这些对象可能是一个JSP页面或一个ACTIONCONTROLLER在WEBXML中设置为ORGAPACHESTRUTSACTIONACTIONSERVLET的一个实例。在一个完整的控制过程中,也就是处理一个HTTP请求时,在控制过程之初,这个SERVLET会从求情的路径中解析出具体的STRUTS的路径,再从配置文件STRUTSCONFIGXML中获取请求与控制动作向对应的配置信息,CONTROLLER通过这些配置信息来决定HTTP请求该往何处转发,而这些ACTION在接收到转发来的请求后,再实现真正的商业逻辑。542模型MODEL所谓MODEL就是在对用户请求的整个控制过程中,真正处理用户请求并保存处理结果的对象,在整个过程中,我们一般利用JAVABEAN来把一些信息保存起来以便在各个对象之间传递因为在框架中,MODEL对象是真正处理商业逻辑功能的对象,因此也就是框架中应用需求实现相关性最大的部分在STRUTS的实现里,MODEL的具体表现形式就是ACTIONFORM对象和与其对应的ACTION对象了对用户提交表单的数据进行校验,甚至对数据进行预处理都能在ACTIONFORM中完成通常的应用中,一般是一个MODEL对象和一个请求页面对应的关系,但也可以一个MODEL对象对应多个页面请求如果STRUTSCONFIGXML配置文件没有指定一个MODEL对象对应的ACTION,那么控制器将直接把通过MODEL对象完成数据封装的请求转到一个VIEW对象543表现VIEWVIEW只是用来向用户表现信息。不进行业务处理。这里主要是一些JSP页面55系统数据流图产品模块,定单模块,购物车模块登陆网站访问数据库用户和管理员购物系统数据库中的显示信息返回结果各种资源0层图数据库中的定单定单模块表及定单条目表用户购物车模块数据库中的产品模块产品表1层图数据库中的定单定单管理表及定单条目表管理员数据库中的产品管理产品表1层图6详细设计61系统的数据库设计611PRODUCT表PRODUCT表是用来存储产品信息的应有的字段是PRODUCTIDNUMBERNAMEVARCHARISBNVARCHARPRINTERVARCHARAUTHORVARCHARPRICENUMBERBOOKNUMVARCHARDESCRIPTIONVARCHARIMAGEPATHVARCHARCETATETIMEDATESTATENUMBERCATALOGFIDNUMBERPRODUCT表的建表语句为CREATETABLEE_PRODUCTPRODUCTIDINT10NOTNULLAUTO_INCREMENT,NAMEVARCHAR50NOTNULL,ISBNVARCHAR100DEFAULTNULL,PRINTERVARCHAR50DEFAULTNULL,AUTHORVARCHAR50DEFAULTNULL,PRICEDOUBLEDEFAULTNULL,BOOKNUMINT4DEFAULTNULL,CATALOGIDINT10NOTNULL,DESCRIPTIONVARCHAR1000DEFAULTNULL,IMAGEPATHVARCHAR100DEFAULTNULL,CREATETIMEDATEDEFAULTNULL,STATEINT2DEFAULT0,PRIMARYKEYPRODUCTID,KEYCATALOGIDCATALOGIDDEFAULTCHARACTERSETUTF8612ORDER表ORDER表主要用来存储定单的一些信息主要有下面一些字段ORDERIDNUMBERTOTALPRICENUMBERORDERSTATENUMBERPAYINFONUMBERCREATETIMEDATEUSERNUMBERUSERITEMNUMBERORDER对应表的建表语句为CREATETABLEE_ORDERORDERIDINT11NOTNULLAUTO_INCREMENT,TOTALPRICEDOUBLEDEFAULT0,ORDERSTATEINT11DEFAULT0,PAYINFOINT11DEFAULTNULL,CREATETIMEDATEDEFAULTNULL,USERIDINT11NOTNULL,USER_ITEM_IDINT11NOTNULL,PRIMARYKEYORDERID,KEYUSER_ITEM_IDUSER_ITEM_ID,KEYUSERIDUSERIDDEFAULTCHARACTERSETUTF8613ORDERITEM表ORDERITEM表主要记录定单条目信息,有两个外键分别是ORDERID和PRODUCTID,具体字段为ORDER_ITEM_IDNUMBERQUALITYNUMBERPRODUCTNUMBERORDERNUMBERORDERITEM对应表的建表语句是CREATETABLEE_ORDER_ITEMORDER_ITEM_IDINT11NOTNULLAUTO_INCREMENT,PRODUCTIDINT11NOTNULL,ORDERIDINT11NOTNULL,QUALITYINT11NOTNULL,PRIMARYKEYORDER_ITEM_ID,KEYPRODUCTIDPRODUCTID,KEYORDERIDORDERIDDEFAULTCHARACTERSETUTF862系统模块的划分621产品模块主要子模块产品模块主要子模块有1增加产品;2删除产品;3修改产品4查看产品列表;5查看产品详细信息622购物车模块主要子模块购物车模块主要子模块有1生成购物车;2删除购物车;3删除购物车中的商品;4清空购物车中的商品;5修改购物车中商品数量;6向购物车中添加商品;623定单模块主要子模块定单模块主要子模块有1创建定单;2删除定单;3查看定单列表;4查看定单中的详细条目;63系统模块的具体实现631产品模块主要子模块6311增加产品添加产品只能有管理员来操作,管理员由浏览器输入产品信息,通过REQUEST的参数形式,传到服务器端,浏览器端和服务器端主要代码有JSP中接收用户输入的代码段是/ADMIN/ADDPRODUCTDO“METHOD“POST“【书名】ACTION中主要用来接收用户信息来进行业务操作,主要代码为PUBLICACTIONFORWARDADDPRODUCTACTIONMAPPINGMAPPING,ACTIONFORMFORM,HTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSETHROWSEXCEPTIONACTIONFORWARDFORWARDMAPPINGFINDFORWARD“ERROR“TRYSTRINGNAMEREQUESTGETPARAMETER“NAME“/省略部分定义几个用来接收用户输入的变量CATALOGCATALOGPRODUCTSERVICEGETCATALOGCATALOGIDPRODUCTPRODUCTNEWPRODUCTPRODUCTSETCATALOGCATALOG/省略部分将接收到的信息包装成一个PRODUCTPRODUCTSETSTATE0PRODUCTSERVICEADDPRODUCTPRODUCT/将PRODUCT保存到DB中COLLECTIONPRODUCTSPRODUCTSERVICEGETPRODUCTSREQUESTGETSESSIONSETATTRIBUTE“PRODUCTS“,PRODUCTS/查找产品生成集合再将集合放到SESSION中;INTSIZEPRODUCTSSIZEREQUESTSETATTRIBUTE“SIZE“,SIZEREQUESTSETATTRIBUTE“PRODUCTS“,PRODUCTSFORWARDMAPPINGFINDFORWARD“SUCCESS“CATCHEXCEPTIONEEPRINTSTACKTRACERETURNFORWARD在此ACTION中,调用了服务层的PRODUCTSERVICE的ADDPRODUCT方法ADDPRODUCT方法有调用DAO层的ADDPRODUCT方法在SERVICE层中加了事物处理在DAO层有对数据库的操作;对数据库的操作如下PUBLICVOIDADDPRODUCTPRODUCTPRODUCTSESSIONSESSIONNULLTRYSESSIONHBNUTILGETSESSIONSESSIONSAVEPRODUCTCATCHEXCEPTIONEXTHROWNEWSTOREEXCEPTIONEX这里直接对数据库操作,直接调用SESSION的SAVE方法6312删除产品;删除产品只能由管理员俩进行,管理员选择要删除的产品,然后由REQUEST参数的形式将PRODUCTID传给服务器,在服务器端将产品删除,JSP主要代码有在服务器端,ACTION接收到的CHOCHBOX的STRING数组,利用循环将数组中的PRODUCTID拿到并且根据PRODUCTID来删除PRODUCT,代码为STRINGPRODUCTIDSREQUESTGETPARAMETERVALUES“CHECKBOX“IFPRODUCTIDSNULLRETURNFORWARDMAPPINGFINDFORWARD“SUCCESS“FORINTI0I/ADMIN/GETPRODUCTDOPRODUCTIDPRODUCTPRODUCTID“修改/这里就是通过这个连接来修改产品的在服务器端接收到GET请求后,拿到PRODUCTID在从数据库里查出此PRODUCT放入REQUEST中,转向修改页面,修改各属性后,在通过FORM表单的形式将参数传给服务器,在服务器端,先拿到各属性值,在通过PRODUCTID在数据库中将PRODUCT查出,再将得到的各属性放到查出的PRODUCT中在将PRODUCT保存入数据库这里ACTION中的代码断为STRINGNAMEREQUESTGETPARAMETER“NAME“INTCATALOGIDINTEGERVALUEOFREQUESTGETPARAMETER“CATALOG“/上面省略部分为获得请求中参数的过程CATALOGCATALOGPRODUCTSERVICEGETCATALOGCATALOGIDINTEGERPRODUCTIDINTEGERVALUEOFREQUESTGETPARAMETER“PRODUCTID“PRODUCTPRODUCTPRODUCTSERVICEGETPRODUCTBYIDPRODUCTID/通过PRODUCTID来从数据库中得到PRODUCTPRODUCTSETCATALOGCATALOGPRODUCTSETIMAGEPATHIMAGEPATH/上面省略将属性值放入PRODUCT中的部分代码PRODUCTSERVICEMODIFYPRODUCTPRODUCT/将PRODUCT放入数据库6314查看产品列表;查看产品列表是所有的用户都可以作的一向操作;用户在登陆首页后就可看到所有产品的列表,此请求先对数据库进行查询;将查询到的产品生成一个COLLECT,在将COLLECT传给JSP去进行表现这里主要有一个实现分页查询的方法INTPAGE1TRY/第一次因为没有设置PAGE属性,所以会抛个空指针异常,捕获之后将PAGE设置为1PAGEINTEGERPARSEINTREQUESTGETPARAMETER“PAGE“CATCHEXCEPTIONEXPAGE1PAGEHELPERPAGEHELPERNEWPAGEHELPER/这里PAGEHELPER为一个辅助PAGEHELPERSETPAGESIZEGLOBALSPAGE_SIZE/类用来实现分页PAGEHELPERSETCURRENTPAGEPAGEPAGEHELPERSETMAXCOUNTPRODUCTSERVICEGETPROUDCTCOUNTCOLLECTIONPRODUCTSPRODUCTSERVICEGETPRODUCTSBYPAGESPAGEREQUESTSETATTRIBUTE“NAVIGATION“,PAGEHELPERSHOWNAVIGATION“LISTALL“REQUESTSETATTRIBUTE“PRODUCTS“,PRODUCTS在此过程的DAO中用到了HIBERNATE的分页查询LISTPRODUCTSNEWARRAYLISTSESSIONSESSIONNULLTRYSESSIONHBNUTILGETSESSIONPRODUCTSSESSIONCREATEQUERY“FROMPRODUCTPORDERBYPPRODUCTID“SETFIRSTRESULTPAGE1GLOBALSPAGE_SIZESETMAXRESULTSGLOBALSPAGE_SIZELISTRETURNPRODUCTSCATCHEXCEPTIONEXTHROWNEWSTOREEXCEPTIONEX这里首先设置了从什么地方开始放到结果集中,在设置了结果集的长度从而实现了分页查询;6315查看产品详细信息;此操作也是用户可以操作而且不需要登陆的情况下就可以查看了,用户只需要在首页点下查看详细信息的超连接,就可以看到产品的详细信息了在JSP中有这样的一个连接/PAGE/PRODUCTDOMETHODLISTDETAILCARTCARTNEWCARTSESSIONSETATTRIBUTE“CART“,CART这个方法在SESSION被创建时自动执行,这个方法是将创建的SESSION中放入一个空的购物车第二个用到的地方是在清空购物车后,再加商品进购物车时,SESSION中没有CART,从而创建一个新的购物车此过程在ACTION中实现CARTCARTCARTSESSIONGETATTRIBUTE“CART“IFCARTNULLCARTNEWCART6232删除购物车;在SESSION被销毁的时候,既用户推出时,或者SESSION过期时候,有监听器自动实现PUBLICVOIDSESSIONDESTROYEDHTTPSESSIONEVENTARG0HTTPSESSIONSESSIONARG0GETSESSIONCARTCARTCARTSESSIONGETATTRIBUTE“CART“SESSIONREMOVEATTRIBUTE“CART“CARTNULLUSERUSERUSERSESSIONGETATTRIBUTE“USER“SESSIONREMOVEATTRIBUTE“USER“USERNULL6323删除购物车中的商品;此操作需要登陆用户才可操作,登陆用户在对购物车主界面中点击删除按钮/BIZ/CARTDOMETHODREMOVE“在服务器端拿到要删除的商品的PRODICTID,进行删除;此操作不进行数据库的操作所以不用调DAO;在ACTION中直接对CART对象操作;ACTION中代码片段为HTTPSESSIONSESSIONREQUESTGETSESSIONINTEGERPRODUCTID
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生命印记课程设计思路
- python路径规划课程设计
- 矿山场地除尘课程设计
- 石棉厂通风除尘课程设计
- 石油课程设计
- 观光农业规划课程设计
- 施工组织课程设计附图
- 流速控制系统课程设计
- 数棋课程设计
- 管井课程设计任务书
- 2024-2030年中国装备故障预测和健康管理(PHM)行业发展现状与前景预测分析研究报告
- 关爱流浪小动物(教学设计)-2024-2025学年三年级上册综合实践活动教科版
- 期中测试题-2024-2025学年道德与法治六年级上册统编版
- 历史知识清单2024~2025学年统编版九年级历史上册
- 2024至2030年全球及中国眼动仪行业市场分析及投资建议报告
- 无脊椎动物课件-2024-2025学年人教版生物七年级上册
- 初中体育与健康 初二 水平四(八年级)田径大单元教学设计+快速跑教案
- 江苏省无锡市江阴市澄要片2023-2024学年八年级上学期期中联考数学试卷
- 2024出海印度尼西亚实操白皮书
- 部编人教版道德与法治二年级上册全册教案
- 2024-2025学年华东师大版数学七年级上册计算题专项训练
评论
0/150
提交评论