New Life电子商务系统的设计与实现_第1页
New Life电子商务系统的设计与实现_第2页
New Life电子商务系统的设计与实现_第3页
New Life电子商务系统的设计与实现_第4页
New Life电子商务系统的设计与实现_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

长春科技学院本科毕业设计(论文)New Life电子商务系统的设计与实现摘 要近年来,电子商务发展迅速,各种基于网络的商城平台得到普及,越来越多的用户体验着网购带来的便利。而电商主要分为实物型电商,和服务型电商,在这里我门主要讲实物型电商1。例如国内表现突出的电商平台如淘宝网、京东商城等,它们每天为数以万计的用户提供服务。电商系统不同于传统系统之处在于,它具有高并发、分布式、高可用、海量数据等特点。它应该能快速的响应用户请求,应该足够的稳定。这也要求它不能以传统的方式进行设计,电商系统要考虑更多的问题,如系统的结构、数据的存取、可靠性的保证、响应的速度等。本次毕业设计将独立完成一个New Life电商系统。New Life将实现电商系统的基本功能。如用户登录、注册、购物车、订单、第三方支付等。New Life的开发将使用一些当下流行的技术,如使用Maven管理项目,使用SSM框架开发程序,使用Apache Shiro框架进行后台用户登录认证、权限管理等,业务流程将尽可能地符合实际情况。关键词:电子商务系统;开源框架;数据库Design And Implementation Of New Life Electronic Commerce SystemABSTRACTIn recent years, e-commerce has been developing rapidly, various web-based shopping platforms have gained popularity, and more and more users are experiencing the convenience of online shopping.E-commerce platforms such as and 360buy, which are prominent in China, provide services to tens of thousands of users every day.Unlike traditional systems, the e-commerce system is characterized by high concurrency, distributed, high availability, and vast amounts of data.It should respond quickly to user requests and should be stable enough.It also requires it cannot in the traditional way to carry on the design, want to consider the problem of more electricity system, such as system structure, data access, and the assurance of reliability and response speed, etc.The graduation design will complete a New Life e-commerce system.New Life will implement the basic functionality of the e-commerce system.Such as user login, registration, shopping cart, order, third-party payment, etc.The development of the New Life will use some of the popular technologies, such as using Maven project management, the use of SSM framework development program, using Apache Shiro framework for background user login authentication, rights management, etc., the business process will be as much as possible to conform to the actual situation.Keywords:Electronic Commerce System Open Source Framework DatabaseI目 录第一章 绪论11.1 研究背景与意义11.2 国内电商行业现状11.3研究内容与目标2第二章 理论技术基础32.1 相关理论基础介绍32.2相关技术及开发工具介绍5第三章 NEW LIFE的系统分析与设计123.1需求分析123.2系统用例图123.3系统重要实体E-R图133.4数据库设计14第四章 NEW LIFE系统实现174.1开发环境174.2项目结构174.3重要模块的实现184.4模块实现界面展示21第五章 总结255.1 New Life的缺陷及可行的解决方案255.2结束语26参考文献27III第一章 绪论1.1 研究背景与意义互联网自1969年诞生以来,已经走过了将近50个年头。如今它已然成为人们生活中必不可少的娱乐、工作工具,并发挥着越来越重要的作用。互联网给人们生活带来了便利,尤以各种电子商务系统为例。人们可以足不出户,从这些网上商城浏览购买自己所需物品,真可谓是“坐享其成”。也因此电子商务得以迅猛发展。电子商务其实可分为两个方面,一个方面为单子方式,一种方面为商业贸易。其可以认为是利用简单、快捷、低成本的电子通讯方式,买卖双方不谋面地进行各种商贸活动。在这其中B2B模式的电子商务成为一种最为大家所熟悉,最为大家喜欢的实现形式,也就是新兴的专门做电子商务的网站2。例如国外的亚马逊,亚马逊开始只是一家通过互联网售卖图书的网上书店而它在短短的两年时间一举超过无数成名已久的百年老店而成为世界上最大的书店。国内也有著名的淘宝网,京东等知名的电商网站,每天也在不断的接待这数以万计的客户。所以说未来电子商务的前景是非常好的,随着电子商务的发展,客户们对期的要求也会越来越高,而且随着发展个性化、专业化是电子商务发展的两大趋势,而且每个网站在资源方面总是有限的,客户的需求又是全方位的,所以不同类型的网站以战略联盟的形式进行相互协作将成为必然趋势。1.2 国内电商行业现状中国是一个人口大国,电子商务对于中国人来说,就不可以只是方便就行了,还要考虑很多问人数多的时候卡不卡,面对众多订单时我的数据是否有错误,我的运输问题怎么办等等众多问题,而如何解决这些问题,解决的怎么样,就是这些电商脱颖而出的关键。例如国内著名的淘宝网,从成立到现在,不断调整架构,优化设计,刷新着人们的认识。淘宝2016年“双十一”,活动交易额1207亿,每一时刻都有数以万计的用户访问。淘宝虽然是国内首个电商平台,最早占领了市场,然而此刻并不能独霸电商世界。京东作为后起之秀,是中国最大的自营式电商企业,它以自己独特的经营方式也在电商行业站稳了脚。如今的各大电子商务迅速发展,分布式,高并发,高可用,海量数据的等,让更多的人想去了解这些电商系统的架构与实现。本次毕业设计旨在独立完成一个小型的电商系统,借此了解电商系统的业务流程,提高编程能力,学习更多更新的技术。1.2.1 分布式为了抗并发,电商系统采用分布式。数十台服务器,甚至百台、千台、万台,包括:Nginx 负载均衡集群、Tomcat Web中间件集群、Redis缓存集群、RabbitMQ消息队列集群、MySQL主从、Solr全文检索集群等。1.2.2 高并发电商系统不同于传统的系统。传统系统并发量并不高,而电商系统可能在同一时刻就要承受数以万计的请求。1.2.3 高可用电商系统要7X24小时不间断运行。服务器一旦宕机,可能带来严重的后果。1.2.4海量数据电商系统需要存储、管理海量数据,需要使用大量服务器。比如海量商品图片的存储,需要提供更多的存储空间和更快的访问速度。1.3研究内容与目标通过电商现状的分析,进一步认识到电商的发展具有广阔的前景。因此此次毕业设计决定独立完成一个小型的电商系统。这个系统包含基本电商所具有的功能。分为前台模块和后台模块。前台主要实现,用户注册、登录、商品浏览、购物车、订单、第三方支付;后台主要实现,商品管理、用户管理、角色管理、权限管理。在实现过程中,探索具体的业务流程,如用户注册的流程、订单支付的流程;研究后台系统如何与前端页面交互数据;如何高效的存储、查询数据。此系统将使用一些当下流行的技术,如使用Java开源框架Spring MVC、Spring、MyBatis构建项目,使用Apache Shiro进行登录认证、权限控制。在程序实现的过程中不断强化这些技术的使用,并探究其实现原理,加强自身的编程能力、逻辑思维能力。系统每一个功能将参考真实电商系统,并结合自己的理解去实现。模拟真实的环境,在实现具体功能的同时,提高系统的并发性能,采取具体可行的措施提升系统的响应速度。努力将此系统做成一个可以和用户友好交互的、可以为外界提供完整功能的、拥有良好性能的电商系统。第二章 理论技术基础2.1 相关理论基础介绍2.1.1 面向对象系统分析与设计当下系统的分析与设计多采用面向对象的技术。而提起面向对象的的设计方式,面向过程的分析设计方式不可不提。面向过程的分析设计方式又称为结构化分析法。结构化分析方法给出一组帮助系统分析人员产生功能规约的原理与技术。由于简单、清晰,易于学习掌握和使用,这种系统分析方法曾经盛极一时。然而随着计算机技术的快速革新,用户需求的提高和软 、硬件技术的不断发展变化,这种设计方式的缺点日益显露:(1)结构化分析法一切基于功能。这导致相同的功能模块不能再不同的系统之间复用,使得开发不同的系统都必须从始至终逐一实现功能,开发效率会很低。(2)结构化方式要求设计者从一开始就设计好各个功能模块,如果系统过于庞大,设计难度也会大大增加。(3)对于大型系统,使用结构化分析法将消耗相当长的周期,并且开发出的系统很难再扩展。面向对象的思想为系统分析设计注入了新动力。面向对象的方式符合人类认知事物的过程,它抽象出不同的类,以这些类为模板创建出对象,不同的对象之间相会合作完成任务。面向对象的分析设计方式可以采用迭代的方式,它并不要求一蹴而就,而是在开发周期的不同阶段不断地迭代、完善,这样可以不必在设计初始就设计特别好详细的开发文档,从而降低了难度,提高了效率。面向对象方法学中的基本概念:(1)对象。简单地理解,对象就是现实世界中的具体事物。比如一个人,一个手机,它具有自己的相关属性和具体行为。(2)类。它是对同种对象的共同属性和相同行为的抽取。如果说一辆法拉利是一个对象,那么提供规范的的设计图纸就是一个类。根据一个类可以生产好多对象,一个对象是一个类的实例化操作。(3)消息。不同对象通过它来实现通信,产生联系,从而相互协作,协同完成任务。面向对象方法有三大特性:(1)继承。现实世界中有许多类似,动物、哺乳动物、人这样的关系。它们有共同的部分,但哺乳动物又在动物的基础上添加了新的内容,而人既有哺乳动物的所有特征,又拥有自己独有的特性,这样逐层的扩展,不断添加新特性,也变的越来越具体。那么,在面向对象的世界里,动物、哺乳动物、人被抽象为类,他们之间的逐层扩展行为被称为继承。显而易见,继承的特性避免了相同属性和相同行为的重复定义,并且表现出了事物与事物之间的层次关系。(2)封装。形象地理解,封装就像把东西放在一个黑盒子里,使外界不能看到其中的具体事物。通过封装,使用者不能轻易地获取对象数据,提高了系统的安全性。(3)多态。从字面理解多态是多种形态的意思,在Java语言中多态体现在方法的重载、重写和子类对象用父类声明。这种特性使得程序更加灵活。这三大特性使得通过面向对象方式设计出的系统更加健壮,更好维护,并且开发效率也优于结构化分析方式。基于面向对象的分析设计方式的诸多优点,本次New Life电商系统将参考这种方式,并使用面向对象的语言Java进行代码的开发。2.1.2 Java Web开发模式在实际的程序开发过程中往往需要遵循一些规范或使用开发模型,这样可以使得开发出的程序易于维护,还能够提高开发效率3。而这些开发模型是随着计算机软硬件的发展、用户需求的改变、程序员编程经验的积累而逐步发展,趋于完善的。不同业务场景可以使用不同的开发模型,没有放之四海皆准的模型,只有同一场景下最合适的模型。在使用Java开发Web应用程序的过程中,出现过多种开发模式:(1)Model1如图2-1所示图2-1 Model1在模式一中,JSP 负责接受请求,并将数据封装到JavaBean,调用JavaBean中的方法来处理逻辑,最后将处理结果展示给用户。JavaBean负责封装数据和处理逻辑。这种模式优点显而易见,架构简单。缺点也很明显,JSP的职责过重,并且很难维护。(2)Model2如图2-2所示图2-2 Model在模式二中,Servlet负责接受请求,把数据封装到JavaBean中,控制程序流程。JavaBean负责封装数据。JSP负责展示页面。这种模式每个模块各司其职,使得整个程序的结构清晰。Model2符合著名的MVC设计思想。(3)三层模型如图2-3所示表示层(JSP/Servlet)业务逻辑层(业务规则)持久化层(持久化逻辑,JDBC)图2-3 三层模型Model2将复杂的逻辑代码分离到Servlet中,这样不同的模块相互分离,使得系统处于松耦合状态。然而,在现实项目开发中,常常在此基础上进行如图2-3的软件分层。这样的设计方式,提高了模块的复用性,进一步降低了模块间的耦合性,被称-为Java EE的经典三层架构,并被广泛的使用。New Life将采用经典三层架构构建项目。2.2相关技术及开发工具介绍2.2.1 JSP技术JSP全称Java Server Page,可以实现在HTML中嵌入Java代码,是一种动态的服务器端的技术。JSP技术诞生后,受到了Java开发者广泛的认可,因为开发者可以将所有的业务逻辑嵌入到JSP页面中,甚至一个应用只需使用JSP。但是随着用户需求的不断提高,应用程序也越来越庞大,此时只用JSP技术必然造成代码繁杂,不够清晰,难以维护问题。更多的程序员意识到这一点,逐渐将Java代码从JSP中分离,只用它来展示数据。一个完整的JSP执行过程如下:图2-4 JSP运行流程(1)客户端请求JSP页面。(2)Web容器接收到客户端请求,将指定的JSP转义成Servlet。此处的Servlet就是一个普通的Java源文件。(3)编译器将此Java源文件编译成Class文件,类加载器将此字节码加载到JVM方法区,并进行实例化。(4)Web容器调用此实例处理数据,最后将结果数据和HTML整合,响应给客户端。2.2.2 Java EE开源框架现在几乎所有的企业级开发都会选用Java开发框架,如盛极一时的SSH(Struts2+Spring+Hibernate)框架,现下流行的SSM(Spring MVC+Spring+MyBatis)框架。那么问题来了,既然JSP+Servlet完全可以开发出一个完整、功能完善的Web应用程序,那么为什么还要使用这些开发框架呢?使用JSP+Servlet开发Web应用主要有以下缺点:(1)开发周期长。使用Servlet,我们必须手写更多冗余的代码,开发效率低。(2)需要在web.xml中配置每个Servlet,不易维护。(3)一个Servlet中只能有一个方法处理请求,如果有更多的不同请求,将会生成庞大的Servlet集合。(4)某些代码繁琐。最典型的如,需要我们手动地从Request中获取参数,并将这些参数逐一封装到对象中。这导致程序员将大量的精力和时间浪费在单一的、繁琐的、毫无技术含量的代码编写上。(5)与数据库交互复杂。程序员必须自己编写连接数据库,发送SQL语句,获取执行结果,封装结果集的代码,这样的操作依然是繁琐的,费时的。这些缺点导致使用JSP+Servlet开发程序效率低,并且代码量大,模块重用性不高等问题。而使用一些已封装好的开发框架则很好的避免了这些缺陷。这些框架将繁琐的代码封装起来,屏蔽掉了底层复杂的操作,帮助程序员更快更高效的开发出一个稳定的,安全的系统。常用的Java开源框架如:(1)SpringSpring是一个基于Java的开源框架,它封装了复杂的Java代码,使得开发变得简单、有趣4。不论上述提到的SSH、还是SSM构建项目,都使用到了Spring,可见Spring是一个优秀的开发框架。Spring通过分层方式将不同的模块独立出来,这些模块相互独立,可以选择性的使用一个或多个模块。它的架构图如下:图2-5 Spring整体架构图Spring之所以被程序员喜爱,更重要的是它独道的IOC和AOP思想的应用。所谓IOC,是Inversion of Control的缩写,译为控制反转。Java创建对象有四种方式:通过new关键字创建、通过反射创建、通过Clone创建、通过反序列化创建。而最熟悉的也是最常用的是第一种方式。通过这种方式程序员需要自己去控制对象的创建,这样在Web程序开发中,将导致代码的耦合。一个明显的例子如:在程序的Service层中的方法中定义有如下Dao层的成员:UserService userService = new UserDao()。那么当需要替换掉UserDao这个类时,将要修改UserService中的代码,如果其他类中也定义了此成员,那么需要修改的位置就不只一处。这就导致代码的高度耦合,不便于后期的维护。而IOC的思想巧妙地解决了这种问题。使用IOC,对象将由Spring容器统一创建。并且Spring会管理对象与对象之间的依赖关系,可以通过简单的配置实现属性的注入,而当替换一个类时,只需添加此类,重启应用而已。IOC使程序处于松耦合状态,而AOP使程序更加灵活、减少同种功能代码的冗余使用。所谓AOP是面向切面编程的意思。经常有人拿AOP和OOP来比较,然而两者并没有可比性。OOP是一种处于全局的编程思想,而AOP为了解决某种问题的解决方案。一个典型的案例,需求是在程序中每个方法调用前后进行日志的收集,收集内容为何时哪个类调用了哪个方法。最简单的做法是,在每个方法中代码执行前后嵌入日志收集代码。这种方式缺点很明显,代码量大,并且都是重复代码。一种很好的解决方式是通过动态代理,在方法执行前后进行收集工作,但使用动态代理,需要为不同类型的类生成不同的动态代理类,这样导致出现大量的代理类。而AOP的使用轻松地解决了这种问题。将日志收集的代码从系统中剥离出来,独立到一个类(切面)中,通过设置规则将这个类实现的功能插入到程序方法执行前后。在不需要这个功能时,只需修改规则,便可以去掉这项功能,这样做到了日志收集功能模块的“即插即用”。同样的利用AOP还进行统一的事务处理、异常处理等。Spring另一大优势在于它可以整合现下流行的各大框架。它就像一个大管家一样,在它的协调管理下各个框架有条不紊地协作着,共同服务于Web应用。(2)Struts2Struts2是著名开源组织Apache的开源项目。它是一个MVC框架,它拦截器思想的使用让人耳目一新。它为每个请求实例化一个Action,使用这个Action处理请求。也因此它是线程安全的。 (3)Spring MVCSpring MVC是一个优秀的轻量级的MVC框架。它是Spring的组件,可以与Spring无缝整合,这也是它相对于Struts2的优势。另外无论是Spring还是Spring MVC都可以使用注解的形式代替配置文件,注解的使用使得编程更加简洁,通常需要在配置文件中配置许多信息才能实现的功能,可能只需使用一个简单的注解就可以实现,这是另开发者兴奋的。Struts2也是优秀的框架,它良好的结构、拦截器思想、丰富的功能等被程序员称赞。然而它的缺点也很明显,如引入值栈、OGNL表达式和它的标签库等,导致性能不高。尤其是在高并发场景下,Struts2就更显吃力了。如下图是各种技术的性能比较:图2-6 Spring MVC和Struts2性能对比仅比较Struts2和Spring MVC,Spring MVC的抗并发能力是远超过Struts2的。Struts2的核心是拦截器,而Spring MVC的核心是前端控制器(DispatcherServlet)。它的执行流程如下:图2-7 Spring MVC执行流程客户端发起请求到Web容器,Web容器将请求转发给前端控制器(Dispatcher)。前端控制器将请求交给处理器映射器(HandlerMapping),处理器映射器通过访问路径匹配处理该请求的控制器,并告知前端控制器。前端控制器将请求交给匹配到的控制器,控制器执行具体的任务,并将结果数据和返回的页面的逻辑名称封装到ModelAndView对象中返回给前端控制器。前端控制器将ModelAndView对象交给试图解析器,视图解析器从ModelAndView中获取数据渲染页面,响应给客户端。这就是一个完整Spring MVC处理请求的流程,从中不难发现,前端控制器起到了至关重要的作用。还有一点要注意的是不论是Spring 还是Spring MVC,它们管理的对象(Bean)默认情况下是单利的(Singleton),非懒加载的(no-lazy-init)。也就是说默认情况下在整个Spring或Spring MVC容器启动时每个类只实例化一次,所以会有线程安全问题,使用共享变量时一定要注意。(4)HibernateHibernate是一个开源的全自动的使用在持久层的ORM(对象关系映射)框架。它对JDBC进一步封装,避免了程序中冗杂的JDBC代码。它的一大优势是可以自动生成SQL语句,这使得将程序员从繁琐的SQL编程工作中解脱出来,这也是许多程序员热衷于使用它的一个重要原因。在使用Hibernate时,程序员不用去关心底层数据库,因为Hibernate屏蔽了底层数据库,只需在其配置文件中配置相应属性,它就能自动生成针对不同数据库方言的SQL语句,这提高了持久层的可复用性。然而,自动生成SQL语句并不是在所有的情况下都合适的,因为通过程序生成的SQL语句可能并不是最优的,这导致效率的降低。另外Hibernate面对大批量数据更新也存在性能问题。(5)MyBatisMyBatis 也是一个持久层框架,但它需要手动编写SQL。MyBatis与数据库交互,大大减轻了程序员的压力。MyBatis相对于Hibernate的优点在于:简单易学单一的MyBatis的Jar包只有不到1MB大小,没有复杂的关联关系,不需配置繁琐的数据表映射关系,并且入门简单。更加灵活Mybatis需要程序员编写SQL,而不是自动生成SQL,这使得可以将复杂的程序逻辑转化为灵活的SQL,减轻程序的编写难度。SQL与系统分离将SQL语句同一的写在MyBatis配置文件中,降低了SQL和程序的耦合,便于统一管理。面对高并发情况,MyBatis性能优于Hibernate,由于手动编写SQL,可以对SQL语句进行优化,进一步提高查询性能。综上,可以看出SSH框架适用于传统的项目,抗并发能力较弱。而SSM框架面对高并发的情况表现出优良的性能。电商项目要应对的是高并发、高访问量的压力,因此New Life选择SSM框架构建。2.2.3 MySQL数据库对于一个Web应用来说,数据存储是一个值得考虑的问题。而将数据存储在关系型数据库中是一个很好的选择。流行的关系型数据库如DB2、Oracle、MySQL、SQL Server等,它们各自有优缺点,针对不同的场景应该选择合适的数据库。而对于电商应用来说,使用MySQL是一个不错的选择。MySQL是一个小型的、开源的、免费的(Oracle收购前)RDBMS。电商系统上线后每天可能产生大量的数据,日积月累,存储大量的数据导致数据库性能降低,查询速度变慢,这时数据库将成为整个应用程序的瓶颈。这时就需要对数据库做集群或分库分表操作。而使用MySQL提供的集群方案优势在于,它可以很方便地实现数据库实例的横向扩展,可以通过添加MSQL节点应对激增的数据,更适合 OLTP(联机事物处理)应用。因此New Life使用MySQL存储数据。第三章 New Life的系统分析与设计 3.1需求分析一个完整的电商系统需要有前台和后台模块。前台主要实现,用户登录、商品浏览、购物车、订单添加、第三方支付功能。后台主要实现,商品信息管理、用户信息管理、角色管理、模块权限管理。对于前台,商品浏览不要求用户登录,而购物车、订单支付功能需要用户登录。对于后台,要求管理员必须登录,不同的管理员拥有不同的角色,不同角色被赋予不同的权限,因此通过角色的分配控制用户的操作范围。3.2系统用例图系统用例图从系统角色出发,讨论角色所参与的功能以及不同功能间的关系,用例图直观的展示出系统的参与者和具有的功能模块5。如下是New Life的前、后台用例图,它清晰地描述了整个系统将实现的功能模块。(1)前台用户图3-1 前台用户用例图(2)后台用户图3-2后台用户用例图3.3系统重要实体E-R图实体-联系图(Entity-Relation Diagram)展现的是实体及其拥有的属性、实体间的关联关系。E-R图可以帮助数据库设计者更好、更快地设计数据库模型。以下是New Life数据库建模过程中重要实体间的E-R图。3.3.1用户-订单-商品图3-3用户-订单-商品E-R图3.3.2用户-角色-模块图3-4 用户-角色-模块E-R图3.4数据库设计数据库设计在整个项目开发过程中占有很重要的地位。一个良好的数据库模型有利于数据的存储,可以带来更好的性能。3.4.1 New Life的物理数据模型下图是New Life系统的物理数据模型,它采用PowerDesigner绘制。PowerDesigner是一个强大的建模工具。系统设计者使用PowerDesigner可以很方便地进行数据库建模。图3-5 New Life物理数据模型3.4.2表关系与性能优化图3-5中,各表之间具有明确的关联关系,数据表之间的关联关系、主外键关系,可以维护数据的一致性,避免了数据冗余,这也基本满足了数据库三大范式的要求。对于传统项目来说,规矩的使用三大范式是必要的,是行之有效的维护数据一致性的手段。然而,符合规范的表结构可能带来性能的降低,比如外键的使用虽然保持了数据的一致性,但却牺牲了性能,因为在跟新数据时数据库还必须维护数据表之间的关联关系,进行外键的检查。电商系统面临的是高并发场景,对数据库的访问性能要求很高,这就需要在数据一致性保证和性能之间进行权衡。而最终一致性向性能妥协,因为没有用户愿意去等待缓慢的数据库查询。综上,上图的物理数据模型只停留在理论上,还需进行一些优化,以提高性能:(1)不使用外键。外键实现了表记录的参照完整性,使用外键并不代表抛弃完整性的保证,而是在程序中维护这种参照关系,降低了数据库的压力。(2)适当的字段冗余。表之间的连接查询相对于单表查询是耗时的,尤其在两张或两张以上大表关联查询时凸显。对于这种情况,解决办法是在其中一张表中添加关联表中的某些所需字段,这样就可以转化为单表的查询。这种方式是不满足规范的,因此被称为反范式。这也是空间对时间的妥协。典型的,在订单表中添加商品信息字段,避免了订单表和商品表的连接查询。(3)拆分大表。一些表的字段很多,这会影响查询性能,这时可以将表中不常查询的字段拆分到一张独立的表中,这也称为数据表的垂直切分。(4)主键单调递增。主键保证了数据表记录的不重复,很多情况下需要通过主键检索记录,因此主键要选用合适的数据类型。对于MySQL而言,应避免使用字符类型的数据作为主键。典型的,订单表不要使用UUID作为主键,而应使用BIGINT数据类型,并且设置自增。(5)合理的使用索引。索引的使用对数据表查询性能起到了非常重要的作用。使用索引的查询速度要高于全表扫描。以MySQL为例,MySQL的MYISAM和INNODB存储引擎使用的是B+Tree索引,B+Tree是二叉树的变种,因此查询性能优于顺序查找。然而索引并不是建立的越多越好,因为如果在一张表上建立过多的索引,那么维护索引也是耗时的,数据的更新会导致索引的变更,这也是耗时的。因此应该在经常查询的字段上建立索引,并且不要在经常进行更新操作的表上建立索引,这可能导致维护索引的时间大于使用索引节约的时间。第四章 New Life系统实现4.1开发环境使用Eclipse 4.6.3开发代码JDK 1.8和Web中间件Tomcat 8为运行环境使用Maven 3.3.9管理项目使用MySQL 数据库的5.7.13版本使用Power Designer 15.6进行数据库建模使用SSM框架开发代码4.2项目结构图4-1项目结构4.3重要模块的实现4.3.1购物车添加模块的实现图4-2购物车添加流程图(1)用户点击添加购物车按钮,发起请求,携带商品ID和商品购买数量(2)判断用户是否已经登录。访问购物车需要用户ID,因此用户必须登陆。此处通过Spring拦截器实现对“/car/*”路径访问的拦截。若用户未登录,则返回到登陆页面,提示用户登陆,若用户已登陆进行步骤(3)(3)查询购物车。根据登陆用户ID和商品ID查询结果,若结果集为空,则用户第一次添加此商品,将商品信息持久化到数据库的购物车表中。若结果集不为空,则此用户已添加过此商品,更新购物车商品数量。4.3.2前台用户注册模块的实现图4-3前台用户注册流程图(1)用户发起注册请求,携带注册信息。(2)验证用户填写的验证码是否与服务器生成的验证码一致。若不一致,返回到用户注册页面,并提示用户“验证码错误”。若一致,进行下一步。(3)根据用户名查询数据库。若用户名已存在,返回注册页面,并提示用户“用户名已存在”。若用户名不存在,进行下一步。(4)对用户密码进行加密操作。将用户信息持久化到数据库。4.3.4 Apache Shiro实现后台登录认证和权限控制图4-4 Apache Shiro登录验证流程图Spring也自带了安全管理组件Spring Security,但它没有Shiro简单易用。Shiro的核心是安全管理器(Security Manager),无论是登陆认证,还是权限管理都依赖于它。Shiro进行登陆认证的过程如下:(1)用户(Subject,包括一切发起请求的浏览器、客户端)提交登陆请求,并携带用户名密码。(2)为此用户创建令牌(Token),此令牌中传入用户提交的用户名、密码。(3)通过Shirod的Subject对象进行登陆操作,传入(2)中创建的Token。(4)Shiro调用原材料(Realm),Realm要做的工作是根据用户名查询数据库获取用户信息。(5)判断数据库返回结果是否为空,若为空证明此用户不存在,可以手动抛出异常。若不为空,进行步骤(6)。(6)调用凭证匹配器(Credentials Matcher),在Credentials Matcher中获取用户提交的密码并进行与用户注册时一致的加密操作,并调用doCredentialsMatch方法,将加密操作得到的密码和从数据库查出的密码传入进行匹配。(7)匹配失败将抛出异常,匹配成功则返回用户信息。另外对于未经过认证的用户,可以在Shiro中配置跳转到登录页面。使用Shiro进行权限管理,需要在用户登录成功后查询该用户拥有的权限列表,并将权限列表告知Shiro,Shiro会自动的实现权限验证,控制用户的访问。使用它可以进行细粒度的权限控制。4.4模块实现界面展示4.4.1前台主要界面展示图4-5 前台主界面图4-6 前台注册页面图4-7 前台登录页面图4-8 商品列表页面图4-9 购物车页面4.2.2后台主要界面展示图4-10 后台admin看到的主界面图4-11用户角色分配页面图4-12角色模块分配页面第五章 总结New Life电商系统的设计与实现过程持续了将近两个月,在这两个月中通过查资料,看技术视频,询问朋友等途径掌握了许多新技能,了解了很多新的流行的开发技术。并将某些技术融入到了New Life系统。New Life的实现过程让我初步体会到从事Web系统开发的流程,也使我对编程有了更新的认识,程序的编写不只是能够实现功能而已,能够有一个良好的编程规范,编写出清爽易读的代码是对一个程序员编程功底的考验,而这需要更多的实践,尝试参与开发不同的系统,这样才能进步,使自己的编程能力不断提高。5.1 New Life的缺陷及可行的解决方案New Life实现了电商系统基本的功能。然而它并不完美,存在很多缺陷,比较突出的是:(1)系统结构不适用于高并发场景。典型的,前后台耦合在一起,这导致一旦其中的一个瘫痪则整个系统将无法为外界提供服务。另外,若同一时刻有数以千计的用户访问系统

温馨提示

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

评论

0/150

提交评论