【《基于SSM框架的网上书城系统设计与实现》12000字(论文)】_第1页
【《基于SSM框架的网上书城系统设计与实现》12000字(论文)】_第2页
【《基于SSM框架的网上书城系统设计与实现》12000字(论文)】_第3页
【《基于SSM框架的网上书城系统设计与实现》12000字(论文)】_第4页
【《基于SSM框架的网上书城系统设计与实现》12000字(论文)】_第5页
已阅读5页,还剩45页未读, 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE49基于SSM框架的网上书城系统设计与实现ADDINCNKISM.UserStyle摘要随着社会经济的快速发展,网络的应用领域日益扩大,网络中的新事物层出不穷。电子商务极大地改善了人们的生活方式。通过互联网,产品信息推广、商业交易等行为带动了电子商务的快速发展,成为全球快速增长的主流之一。电子商务在我们的日常生活中扮演着的作用越来越重要。在网络如此发达的趋势下,顺应潮流,设计了基于SSM框架的网上书店系统销售平台,让用户足不出户就能买到自己想要的图书。本系统页面主要使用JSP实现,后台使用Springmvc、Spring、Mybatis等相关Java代码实现,数据管理使用MySQL数据库,开发工具使用Eclipse,服务器使用Tomcat9。系统分为管理员和普通用户2个类不同用户,管理员功能包括:商品管理、商品类型管理、订单管理、商品信息浏览、将商品加入购物车、下单等;普通用户功能包括:登录注册、浏览商品信息、添加商品到购物车和下单等。关键词:网上书城系统;Spring;Springmvc;Mybatis;MVC架构;Tomcat;MySQL;Jsp目录摘要 2Abstract 31引言 61.1研究背景 61.2研究意义 71.3国内外现状 81.4主要研究内容 82相关技术与理论简介 92.1B/S架构 92.2SSM框架 92.2.1Spring 102.2.2SpringMVC 102.2.3Mybatis 102.3Tomcat 102.4JSP 112.5MySQL数据库 113系统分析 123.1可行性分析 123.1.1技术可行性 123.1.2经济可行性 123.1.3--社会可行性 123.1.4操作可行性 123.1.5法律可行性 123.2√需求分析 133.2.1--功能需求 133.2.2非功能需求 143.2.3数据流图 144系统设计 174.1系统的功能模块设计 174.1.1系统前端 174.1.2系统后端 174.2系统主要模块详细设计 184.2.1用户注册 184.2.2用户登录 194.2.3用户查看商品 204.2.4添加商品到购物车 214.2.5商品管理 214.2.6商品种类管理 224.2.7管理员信息管理 235数据库设计 255.1数据库概念 255.2--数据库表结构设计 255.2.1用户表(USER) 255.2.2商品类型表(ARTICLE_TYPE) 265.2.3商品表(ARTICLE) 265.2.4订单表(ORDER) 265.2.5订单明细表(ORDER_ITEM) 275.2.6购物车表(SHOPCAR) 276--系统实现 276.1前台模块 276.2后台模块 397总结 49参考文献 511引言1.1研究背景一直以来,传统的实体书店曾经是我国图书出版发行行业的中坚力量,但是,2005年以来,传统实体国有书店减少了1944家,而民营的实体书店减少则高达4120家,而且减少的速度还呈现出了不断加快的趋势[1]邹燕芝.互联网时代传统书店的转型之路研究[D].石家庄:石家庄铁道大学,2014.。[1]邹燕芝.互联网时代传统书店的转型之路研究[D].石家庄:石家庄铁道大学,2014.随着互联网的发展,网上购物已经成为一种新的购物理念,人们足不出户就能买到自己需要的东西。随着“互联网+”、轻量级框架、分布式、高并发、高可用等概念的引入,Web应用的开发技术得到了进一步的推进及深发展,对网上商城的设计、实现、管理产生了深远的影响,并广泛用于购物网站的开发。为了适应市场的需求,越来越多的网上商城应运而生[2]荆钰心.基于SSM的WeShop游戏机商城的设计与实现[D].2020.。网上书城是Internet与电子商务发展的产物,与传统书店相比,网上书城拥有许多优势[2]荆钰心.基于SSM的WeShop游戏机商城的设计与实现[D].2020.[3]曾磊.基于SSH框架的网上书城设计与实现[D].南昌:江西农业大学,2016.首先,网上书店大大扩大了图书采购的地域限制。买家可以搜索任何地区的任何书店,无论是国内在线书店还是国外在线书店。只要他们访问自己的网站,就可以进入并购买所需的书籍。此外,网上书店打破了传统购书的时限。他们一年365天,每天24小时提供24小时服务,因此读者无需出门就能买到他们想要的书。同时,网上书店充分利用自身的网络优势,提供图书推荐、销量排行榜、图书评论、作者访谈、专业书评等多种服务,读者不仅可以获得有关图书的全面信息,还可以进行网上讨论和经验交流,很好地满足了读者的需求。其次,网上书店的价格远低于传统书店。传统的书城采购方式,无论是从当地书店还是其他地方的图书市场进货,都必须派人前往采购,这要花很多钱,而网上书城则可以直接从图书库存地发货,节省了这笔钱。因此,网上书店几乎所有的书都打折,而且折扣不低,对读者很有吸引力。此外,网上书店还提供各种检索选项。用户可以按书名、作者和出版商执行单独和组合检索方法。这种检索方式无疑比传统的图书检索方式方便得多,提高了网上书店的竞争力。与传统书店相比,网络书店有许多传统书店没有的优势,但如果说网上书店将完全取代传统书店还为时过早。随着互联网的发展,网上书店的确是一种很好的图书销售方式。1.2研究意义根据分析,网上书城具有以下优势:(1)投资少,回收快。对中国中小企业的研究显示,网店的投资成本很低,网上书店的“租金”远低于同等规模的书店,一个网上大店,想投资,起步资金只需上千元就可以了。(2)不需要额外的资金。传统贸易资源从几千元到几万元不等,网上商店不需要那么多钱。(3)24小时营业。网络商店延长了传统商店的营业时间,365天全天候营业,在延长工作时间的同时,经营者无需支付任何额外费用。(4)不限于仓储,街边小店也可以开大店。一个网上大店,可以只需要一个小门面,甚至没有都行。(5)这不受地理位置的影响。无论您离互联网多远,无论您在国内还是国外,您都可以在网上书店轻松购买商品。1.3国内外现状早在1991年,美国在线(AOL)就依托自己的计算机网络,建立了世界上最早的在线书店——“阅读美国”;如今全球最大的在线书店——亚马逊在线书店,由杰夫·贝佐斯(JeffBezos)于1994年在美国西雅图创立[3]。到目前为止,亚马逊在网络书店乃至全球电商领域都拥有巨大的领先优势,是业内公认的行业巨头。第二大网上书店是Barnes&Noble网上书店。此外,在美国创办的Millions网上书店和Borders网上书店也很有名气。德国知名的网上书店主要有Bertelsmann网上书店等,英国有Waterstone网上书店和AlphabetStreet网上书店等。我国政府从1997年起开始着手和重视电子商务的发展,部分地区的电子商务高新技术企业可享受政策优惠,网上书店也是从这时候慢慢开始发展起来。日前,我国目前存在的网上书店主要有以下几种类型:(1)国有书店或书楼出资设立的网络书店。这些网络书店主要依靠传统书店的库存进行网络销售。(2)各出版社出资的网络书店。目前中国有超过500家图书出版商,其中多达349家建立了自己的在线书店。(3)外贸出版公司出资设立的网络书店。这类网络书店的图书销售主要在国外进行,图书销量逐年增长。(4)境内出版业与境外机构共同出资的网络书店。例如,当当网。(5)民营网络书店。比如卓越网,但卓越网在2004年被亚马逊收购。此外,还有阿里巴巴集团创办的天猫书店和刘强东创办的京东网上书店。1.4主要研究内容本文以网上书城系统的研究和开发作为实例,设计并实现了一个基于SSM框架的网上书城系统;分析了系统的可行性、功能和非功能需求、工作原理,并对系统的总体架构进行了规划;介绍了数据库表的结构,及系统的实现。本文总共分六个部分,具体如下:第一部分,引言。本部分介绍了网上购物的背景以及网上书城系统的意义,简单阐述国内外网上书城系统的设计和开发现状,最后介绍本文的主要研究内容。第二部分,相关技术与理论概述。本部分对本系统所用到的相关技术与理论进行说明,包括B/S架构、SSM框架、Tomcat、JSP和MySQL数据库。第三部分,系统分析。本部分先对在线学习系统从技术、经济、社会、操作、法律5个方面进行了可行性分析,得到可以开发的结论。然后对系统功能性需求进行分析,功能性需求分析分为用户前端和管理员后端。非功能性需求包括了可复用性、易用性、安全性、可维护性和可拓展性。第四部分,系统的设计。本部分先介绍了系统总体架构,然后对系统前端和后端功能进行设计。第五部分,网上书城系统功能的实现。本部分介绍系统运行的结果,提供使用说明且展示界面。第六部分,总结。本部分对系统的设计和开发过程进行了总结回顾。2相关技术与理论简介2.1B/S架构常用的网络系统体系架构有Client/Server(客户机/服务器)和Browser/Server(浏览器/服务器)。本系统采用B/S架构,只安装维护一个服务器,而客户端选用浏览器运行软件,具有分布性强、维护方便、开发简单并且共享性强的特点[4][4]樊丰义.基于嵌入式Linux的农业远程监测系统的研究[D].西安:西北农林科技大学,2010.2.2SSM框架SSM(Spring+SpringMVC+MyBatis)框架集由两个开源框架Spring和MyBatis(SpringMVC是Spring的一部分)组成,常被用作数据源比较简单的web项目的框架[5]肖海鹏,牟东旭.SSM与SpringBoot开发实战[M].北京:人民邮电出版社,2020.07.[5]肖海鹏,牟东旭.SSM与SpringBoot开发实战[M].北京:人民邮电出版社,2020.07.(1)SpringSpring就像一个组装项目的大工厂,在配置文件中,可以指定使用具体参数调用实体类的构造函数来实例化对象,它也可以称为项目中的胶水。Spring的核心思想是IoC(InversionofControl),即程序员不再需要显式地`new`一个对象,而是让Spring框架为你做。(2)SpringMVCSpringMVC在项目中拦截用户请求,它的核心Servlet(即DispatcherServlet)承担中介或前台的职责,通过HandlerMapping将用户请求匹配到Controller,控制相应请求所执行的操作,SpringMVC相当于SSH框架中的struts。(3)MybatisMybatis是JDBC的封装,使数据库的底层操作透明,Mybatis的所有操作都是围绕sqlsessionfactory实例执行的;Mybatis通过配置文件链接到每个实体类的映射器文件,映射器文件配置每个类必须在数据库上执行的SQL语句映射;每次与数据库交互时,它都会通过sqlsessionfactory接收一条SQL语句,然后执行SQL命令[6][6]王成.JavaEE轻量框架技术SSM[M].厦门:厦门大学出版社,2020.页面向控制器发送请求,控制器调用业务层的处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,然后将结果返回到业务层,业务层向控制器发送处理逻辑,然后控制器调用视图来查看数据。2.3TomcatTomcat服务器是一个免费和开源的Web应用服务器,它是一个轻量级的应用服务器,广泛应用于中小型系统和并发用户不多的场合,是开发和调试JSP程序的首选;对于初学者来说,可以认为在机器上配置Apache服务器后,该服务器可以用来响应HTML(标准通用标记语言下的应用程序)页面的访问请求;实际上Tomcat是Apache服务器的一个扩展,但是它是独立运行的,所以当你运行tomcat时,它实际上是作为一个独立于Apache的进程运行的[7][7]崔洋.Tomcat与JavaWeb开发技术详解第3版[M].北京:中国铁道出版社,2013.2.4JSPJSP(JavaServerPages)是一种动态网页开发技术,基于Java编程语言进行web应用程序开发。其获取用户填写的数据、链接数据库或其数据源是通过网页表单进行,以此为基础创建网页。JSP开发项目通常前端和后端代码分离,前端一般HTML和JSP结合,JSP标签来实现动态部分,HTML语言表达静态页面内容。其次,JSP程序要比CGI程序性能更加优越,它可以直接在HTML网页中动态嵌入元素,直接方便,而CGI文件需要引用、载入解释器和目标脚本才能使用。2.5MySQL数据库数据库是按照数据结构组织、存储和管理数据的仓库。MySQL是一种关系型数据库管理系统,作为广泛使用的开源数据库之一,它被当今大多数公司使用[8]孙卫琴.MySQL数据库应用从入门到精通[M].北京:电子工业出版社,2019.。MySQL数据库运行效率极佳,非常适合本系统的开发和使用。它还适用多个系统包括:Windows、Linux等,支持多种语言包括:Java、Python、PHP、C、C++等。[8]孙卫琴.MySQL数据库应用从入门到精通[M].北京:电子工业出版社,2019.3系统分析3.1可行性分析3.1.1技术可行性本系统的设计与实现由Web服务器和浏览器完成,采用JavaWeb技术,利用方便、快捷、功能强大的Eclipse开发工具软件设计完成整个系统并建立Web项目;用Java语言编写程序,使用JSP(Java版HTML)设计丰富多彩、美观的动态界面,使用MySQL数据库存储数据。此外,本文还对系统的需求进行了分析,为正确、可靠地开发系统奠定了基础。因此,在技术与理论相结合的基础上,该系统在技术上是可行的。3.1.2经济可行性本系统使用的所有软件均为开源软件,为软件开发节省了大量资金和时间,达到了降低成本、提高开发效率的目的;此外,该系统对计算机配置要求不高,使用个人笔记本电脑来满足开发过程中的需求是足够的,因此在经济上是绝对可行的[12]王建明.计算机实验室管理系统的设计与实现[J].计算机与信息技术,2007,15(11):74-75.。[12]王建明.计算机实验室管理系统的设计与实现[J].计算机与信息技术,2007,15(11):74-社会可行性网上书店极大地扩大了对购书的地域限制,消费者可以访问任何地方的任何书店;无论是国内还是国外的网上书店,只要进入相应的网站,就可以进入书店购买所需书籍;此外,网上书店打破了传统购书的时限,一年365天提供24小时服务,可以随时进行购书[11]张歌燕.试析我国网上书店的优势、劣势及其发展对策[J].图书情报知识,2007.[11]张歌燕.试析我国网上书店的优势、劣势及其发展对策[J].图书情报知识,200操作可行性随着互联网和信息技术的不断进步,各种技术层出不穷,计算机的小型化和私有化,以及软件技术的成熟,使得许多系统得以实现应用,自主开发生产已经成为可能。Eclipse、Tomcat、MySQL等开发工具软件可以在线下载,应用教程也可以在线学习,Java、Web等jar包可以直接在网上下载导入开发工具,为程序编写提供便利。综上所述,系统的操作性是可行的。3.1.5法律可行性本系统的发展遵循客观规律和人性,不伤害他人,不侵犯他人财产和权利,宣誓遵守国家荣誉和法律。不存在危险主义,恐怖主义,帝国主义,侵权等问题,故在法律上是可行的。3.2需求分析为了开发真正满足用户需求的软件产品,我们首先需要了解用户的需求。对软件需求的深入理解是软件开发成功的先决条件。不管人们的设计和编程有多好,不能真正满足用户需求的程序只会让用户失望,让开发人员烦恼。需求分析是软件定义阶段的最后阶段。它的基本任务是回答“系统想要做什么?”,提出和确定用户的具体需求,即系统要完成哪些工作,而不是确定系统如何工[10][10]张海藩,牟永敏.软件工程导论第6版[M].北京:清华大学出版社,20系统功能性需求分析(1)前端功能性需求用户作为网上书城前端的使用主体,没登录时,只是游客身份,只能搜索商品不能提交订单。注册会员时,用户必须输入相关注册信息,经过邮箱验证后,才可以成功注册。登录账号后,用户可以搜索商品和查看商品详情,把感兴趣的商品加入购物车,提交订单并查看订单发货情况。前端用例图如图3.1所示:图3.1前端用例图(2)后端功能性需求系统后端为系统管理员的操作界面,具有特殊权限。系统管理员通过管理员账号和密码验证后就可以进入到网上书城后台管理系统。系统管理员可以管理商品信息和商品种类,同时对订单进行确认发货、对用户账号进行管理,且订单详情同步到用户前端显示。后端用例图如图3.2所示:(3)根据用例图分析,系统的功能需求如下:①登录功能:用户输入用户名和密码,系统确认登录。②注册功能:系统询问用户名是否已经存在,并通过电子邮件检查和激活注册信息。③商品搜索:用户可以查询商品并点击查看商品的详细信息。④购物车管理:用户可以向购物车添加商品或删除购物车中的商品。⑤订单查询:用户登录后可以发送订单,查询订单明细。⑥商品类别管理:进入后台后,管理员可以对商品类别进行管理(添加、修改、删除和查询)。⑦商品管理:管理员可以进入后台添加、删除、查询或更改商品信息。⑧订单管理:管理员可以进入后台查询订单,查看所有订单详细信息,确认订单交付。3.2.2系统非功能需求非功能性需求为软件产品为满足用户业务需求而必须具有且除功能需求以外的特性。本系统需要在稳定性、安全性、易用性等方面满足一定要求,方便用户的操作。(1)可复用性:类似组件或功能可以统一设计,在需要使用时方便套用或调用,有利于系统开发和用户理解本系统的功能使用,如各类资料的查看、上传和下载。(2)易用性:本系统遵循易学习、易操作的特点,菜单功能分类清晰,大部分功能只需点击,操作简单,易于上手。界面设计的美观和简洁性能吸引用户,增加用户黏性,提高用户使用率。(3)安全性:本系统需要账号和密码才能登陆,登陆后才能获得相应权限。为了防止机器人多次登陆破解密码,加入验证码,验证码在一定程度上保证了系统登陆的严密性和安全性。(4)可维护性与可拓展性:SSM框架将逻辑层和展示层分离,使修改和重构的难度降低,易调试,可维护性好。同时,易于拓展使用不同的技术,在系统上添加功能方便,可扩展性好。3.2.3数据流图数据流图(DFD)是一种图形技术,它描述了信息流以及数据在从输入到输出时所经历的转换;在设计数据流程图时,只需要考虑系统必须完成的基本逻辑功能,不需要考虑具体如何实现这些功能,是软件设计的一个很好的起点[9][9]沈波,张富国,徐升华.信息系统分析与设计[M].北京:高等教育出版社,2020.(1)网上书城系统顶层数据流图如图3.3所示。图3.3网上书城系统顶层数据流图(2)网上书城系统第一层数据流程图如图3.2所示。图3.4网上书城系统第一层数据流图(3)商品管理数据流图如图3.5所示。图3.5商品管理数据流图(4)用户管理数据流图如图3.6所示。图3.6用户管理数据流图4系统设计4.1系统的功能模块设计4.1.1系统前端网上书城系统的前端系统框架图如图4.1所示:图4.1前端系统框架图前台主要功能介绍:①商品信息:用户可以查询商品并点击查看商品详情。②会员信息:用户可以进行注册、登录、退出账号和修改会员信息操作。③购物车:用户可以添加商品到购物车、修改购物车中的商品数量和删除购物车中的商品。④用户管理:用户可以提交订单和查询订单。4.1.2系统后端网上书城系统的后端系统框架图如图4.2所示:图4.2后端系统框架图后台主要功能介绍:①商品种类管理:管理员可以进入后台添加、修改、删除和查询商品种类。②商品管理:管理员可以进入后台添加、下架、删除、查询商品。③订单管理:管理员可以进入后台查询订单、查看所有订单详情,并对订单确认发货。④用户管理:管理员可以进入后台查询、激活和冻结用户信息。⑤管理员信息管理:管理员可以登录、退出管理员账号,并修改管理员账号信息。4.2系统主要模块详细设计4.2.1用户注册用户在购买商品前必须在网上书店注册。用户注册流程图如图4.3所示。图4.3用户注册流程图4.2.2用户登录登录时,用户输入用户名和密码,系统验证用户输入的信息。如果用户输入不正确,则提示登录失败原因,如果用户输入正确,则登录成功。用户登录流程图如图4.4所示。图4.4用户登录流程图4.2.3用户查看商品用户无需注册和登录即可搜索产品并查看详细的产品信息。用户查看商品流程图如图4.5所示。图4.5用户查看商品流程图4.2.4添加商品到购物车登录系统后,用户可以向购物车添加商品或从购物车中移除商品。添加商品到购物车流程如图4.6所示。图4.6添加商品到购物车流程图4.2.5商品管理管理、添加和删除产品,更新产品信息。普通用户没有此权限。只有管理员才能执行此操作。商品管理流程图如图4.7所示。图4.7管理商品流程图4.2.6商品种类管理成功注册后,管理员可以管理、添加和删除产品类别。商品种类管理流程图如图4.8所示。图4.8管理商品种类流程图4.2.7管理员信息管理注册后,管理员可以登录、注销和更改管理员帐户信息。管理员信息管理流程图如图4-9所示。图4.9用户登录流程图5数据库设计5.1数据库概念数据库是存储数据的仓库,它的本质是一个文件系统,数据以特定格式存储,用户可以对数据库中的数据进行添加、修改、删除和查询[17]万常选,廖国琼,吴京慧,刘喜平.数据库系统原理与设计第3版[M].北京:清华大学出版社,2017.。[17]万常选,廖国琼,吴京慧,刘喜平.数据库系统原理与设计第3版[M].北京:清华大学出版社,2017.数据库设计是指基于系统分析设计系统所需的主要数据元素。在前文系统分析的基础上,本系统设计了以下六个表:用户、商品类型、商品、订单、订单明细和购物车。5.2数据库表结构设计在关系数据库中,数据库表是一系列二维数组的集合,由纵列和横行组成,用于表示和存储数据对象之间的关系,是数据库最重要的组成部分之一。一个数据库表由三部分组成:表名、表中的字段和表的记录。设计数据库表结构(即列名)就是定义数据库表的文件名,确定数据库表包含哪些字段,字段名,字段类型,每个字段的宽度。5.2.1用户表(USER)5.2.2商品类型表(ARTICLE_TYPE)5.2.3商品表(ARTICLE)5.2.4订单表(ORDER)5.2.5订单明细表(ORDER_ITEM)5.2.6购物车表(SHOPCAR)6--系统实现6.1前台模块(1)用户管理模块除了用户登录和注销外,该模块还具有接收邮件和激活用户信息的功能。在没有注册用户的情况下,如果没有账号,注册后进入注册邮箱即可激活账号,激活后的用户方可登录。用户信息注册的核心代码如下所示:<divclass="rowinfo-content"> <formid="registerForm"class="form-horizontal"method="post" action="${pageContext.request.contextPath}/user/userRegister"style="margin-top:20px;"> <divclass="form-group"> <labelclass="col-sm-2control-label">登录名称</label> <divclass="col-sm-3"> <inputtype="text"value=""id="loginName"name="loginName" class="form-control"placeholder="请输入您的登陆名称"onblur="validLoginName(this)"> </div> </div> <divclass="form-group"> <labelclass="col-sm-2control-label">真实姓名</label> <divclass="col-sm-3"> <inputtype="text"id="name"value=""name="name" class="form-control"placeholder="请输入您的真实姓名"> </div> </div> <divclass="form-group"> <labelclass="col-sm-2control-label">登陆密码</label> <divclass="col-sm-3"> <inputtype="password"id="password"name="password" class="form-control"placeholder="请输入您的密码"> </div> </div> <divclass="form-group"> <labelclass="col-sm-2control-label">确认密码</label> <divclass="col-sm-3"> <inputtype="password"id="okPassword"name="okpassword" class="form-control"placeholder="请输入您的确认密码"> </div> </div> <divclass="form-group"> <labelclass="col-sm-2control-label">性别</label> <divclass="col-sm-3"> <label>男:</label><inputname="sex"value="1"type="radio" checked="checked"><label>女:</label><input name="sex"value="2"type="radio"> </div> </div> <divclass="form-group"> <labelclass="col-sm-2control-label">联系电话</label> <divclass="col-sm-3"> <inputtype="text"id="phone"value=""name="phone" class="form-control"placeholder="请输入您的电话"> </div> </div> <divclass="form-group"> <labelclass="col-sm-2control-label">地址</label> <divclass="col-sm-8"> <textareaid="address"name="address"rows="4"cols="30" class="form-control"placeholder="请输入您的地址信息"></textarea> </div> </div> <divclass="form-group"> <labelclass="col-sm-2control-label">电子邮箱:</label> <divclass="col-sm-3"> <inputtype="text"id="email"value=""name="email" class="form-control"placeholder="请输入您的邮箱"> </div> <divclass="col-sm-3"> <spanstyle="color:red;"></span> </div> </div> <divclass="form-group"> <labelclass="col-sm-2control-label"></label> <divclass="col-sm-3"> <buttontype="submit"id="btn_submit"class="btnbtn-success"> <spanclass="glyphiconglyphicon-user">注册 </button> <buttontype="reset"class="btnbtn-info"> <spanclass="glyphiconglyphicon-edit">重置 </button> </div> </div> </form> </div>用户信息注册并发送激活码的后台主要功能代码如下所示:try{ //生成激活码 Stringactive=UUID.randomUUID().toString(); user.setCreateDate(newDate()); user.setActive(active); userMapper.saveUser(user); //开始发送邮件给用户 //创建Properties对象,用来封装邮件服务器相关信息 Propertiesprops=newProperties(); //设置邮件服务器的地址 props.setProperty("mail.smtp.host",""); //邮件服务器需要权限,指定用户必须登录邮件服务器才能发送邮件 props.setProperty("mail.smtp.auth","true"); //创建Authenticator的实例,实现账户、密码的鉴权。 Authenticatorauth=newAuthenticator(){ protectedPasswordAuthenticationgetPasswordAuthentication() { returnnewPasswordAuthentication("luochunlong666@126.com","luochunlong123"); } }; //通过Session与服务器建立连接 Sessionsession=Session.getInstance(props,auth); //创建发送邮件对象,该对象主要用于封装邮件相关信息,比如主题发件人邮件内容等 SMTPMessagemessage=newSMTPMessage(session); //设置邮件的主题 message.setSubject("用户注册激活邮件,请勿回复,按照指引激活"); //设置邮件的内容 message.setContent("<ahref='http://:8080"+request.getContextPath()+"/user/active?activeCode="+user.getActive()+"'target='_blank'>恭喜您注册成功,请点击该链接进行激活,无需回复!</a>","text/html;charset=utf-8"); //设置发件人 message.setFrom(newInternetAddress("luochunlong666@126.com")); //设置收件人接收者类型由:TO(收件人)、CC(抄送)、BCC(密送) message.setRecipient(RecipientType.TO,newInternetAddress(user.getEmail())); //发送邮件 Transport.send(message); }catch(Exceptione){ //TODO:handleexception e.printStackTrace(); }用户登录主要功能代码如下所示://根据用户输入的账号以及密码获取用户的信息 Useru=userService.findUserByNameAndPass(user); if(u==null){ model.addAttribute("error_message","您输入的账号或密码不正确,请核实!"); //跳转至登录页面/WEB-INF/jsp/login.jsp return"login"; }elseif(u.getDisabled().equals("0")){ model.addAttribute("error_message","您尚未激活,请打开您的邮箱进行激活操作!"); //跳转至登录页面/WEB-INF/jsp/login.jsp return"login"; }else{ //将用户信息存放在session中,直接跳转至首页 session.setAttribute("session_user",u); //判断用户的角色是普通用户还是管理员 if(u.getRole()==2||u.getRole()==3){ return"redirect:/article_manager/getAll.action"; }else{ return"redirect:/article/index"; } }}用户注册功能界面,如图6.1所示:图6.1用户注册功能界面用户注册收到激活码链接界面,如图6.2所示:图6.2用户注册收到激活码链接界面用户界面,如图4.3所示:图4.3用户登录界面(2)--首页模块该模块具有以下功能:查看产品信息、查找所需产品信息和检查产品详细信息。用户可以根据商品类型以及关键字进行搜索操作,在未登录的情况下也可以进行查询操作,如果当前登录的用户是管理员则右上角会出现进入后台标志该模块具有以下功能:查看产品信息、查找所需产品信息、查看产品详情。用户可以根据产品类型和关键词进行搜索,也可以在不登录的情况下进行查询操作。如果当前登录的用户是管理员,则右上角会出现一个背景标志。点击商品的类型标签以及根据用户输入关键字进行商品信息查看时的主要功能代码如下所示:@RequestMapping("/index") publicStringarticleIndex(Modelmodel,StringtypeCode,Stringkeyword,PageModelpageModel){ //获取所有的一级物品类型 List<ArticleType>articleTypes=articleService.findAllFirstArticleType(); model.addAttribute("articleTypes",articleTypes); model.addAttribute("typeCode",typeCode); model.addAttribute("keyword",keyword); System.out.println("typeCode:"+typeCode); //如果typecode不为空,则根据typeCode查询二级物品类型 if(typeCode!=null&&!typeCode.equals("")){//0001==>000100010001==>0001 Stringcode=typeCode.substring(0,4); //根据一级物品类型获取对应的二级物品类型信息 List<ArticleType>seArticleTypes=articleService.findAllSecondArticleTypes(code+"%"); //将二级物品类型存放至model model.addAttribute("secondArticleTypes",seArticleTypes); } //根据用户指定的商品类型查询数据库,获取相应的商品信息 List<Article>articles=articleService.findAllArticle(typeCode==null?null:typeCode+"%",keyword==null?null:"%"+keyword+"%",pageModel); model.addAttribute("articles",articles); //查询总记录数 inttotalNum=articleService.findTotalNum(typeCode==null?null:typeCode+"%",keyword==null?null:"%"+keyword+"%"); pageModel.setTotalNum(totalNum); //WEB-INF/jsp/articleIndex.jsp return"articleIndex"; }点击商品的图片可以进入到商品的详情页面的主要功能代码如下所示:@RequestMapping("/detail") publicStringarticleDetail(Integerid,Modelmodel){ //根据商品id获取商品信息 Articlearticle=articleService.getArticleById(id); model.addAttribute("article",article); ///WEB-INF/jsp/articleDetail.jsp return"articleDetail"; } 首页界面(商品界面),如图6.4所示:图6.4首页界面(商品界面)商品详情界面,如图6.5所示:图6.5商品详情界面(3)购物车模块该模块的主要是管理用户购物车商品信息,可以将商品信息添加至购物车以及删除购物车中商品信息、更新购物数量添加商品信息至购物车的主要功能代码如下所示:@Override publicvoidaddArticleToShopCar(HttpSessionsession,intid,intnumber){ //TODOAuto-generatedmethodstub //从session中获取用户信息 Useruser=(User)session.getAttribute("session_user"); //获取用户的id intuserId=user.getId(); //根据用户id以及商品id从购物车表中获取相关信息 ShopcarshopCar=shopcarMapper.getShopCarByUserIdAndArticleId(userId,id); if(shopCar!=null){ //该商品已经存在于当前用户的购车中,则进行商品数量的叠加 shopcarMapper.updateShopCar(userId,id,number); }else{ //该商品不存在与当前用户的购物车中 shopcarMapper.addShopCar(userId,id,number); } }查看购物车内的商品信息的主要功能代码如下所示://展示购物车中的商品信息 @RequestMapping("/showShopCar.do") publicStringshowShopCar(HttpSessionsession,Modelmodel){ //根据用户的id获取该用户购物详情 List<Shopcar>shopCars=shopCarService.getAllShopCarByUserId(session); model.addAttribute("shopCars",shopCars); //定义总金额 doubletotalPrice=0.0; //遍历集合计算购物车中商品的总金额 for(Shopcarshopcar:shopCars){ totalPrice+=shopcar.getArticle().getDiscountPrice()*shopcar.getBuynum(); } model.addAttribute("totalPrice",totalPrice); //跳转至展示购物车中商品信息的页面 return"shopCar"; }@Override publicList<Shopcar>getAllShopCarByUserId(HttpSessionsession){ //TODOAuto-generatedmethodstub //从session中获取用户信息 Useruser=(User)session.getAttribute("session_user"); //获取用户的id intuserId=user.getId(); //获取用户的购物详情信息 List<Shopcar>shopcars=shopcarMapper.getAllShopCarByUserId(userId); returnshopcars; }在购物车中进行购买数量更新的主要功能代码如下所示:@Override publicvoidupdateShopcar(HttpSessionsession,intid,intnumber){ //TODOAuto-generatedmethodstub //从session中获取用户信息 Useruser=(User)session.getAttribute("session_user"); //获取用户的id intuserId=user.getId(); shopcarMapper.updateShopcar(userId,id,number); }@Update("updateec_shopcarsetbuynum=#{buyNum}whereuser_id=#{userId}andarticle_id=#{id}") voidupdateShopcar(@Param("userId")intuserId,@Param("id")intid,@Param("buyNum")intbuyNum);删除购物车中商品的主要功能代码如下所示:@Override publicvoiddeleteShopcar(HttpSessionsession,intid){ //TODOAuto-generatedmethodstub //从session中获取用户信息Useruser=(User)session.getAttribute("session_user"); //获取用户的id intuserId=user.getId(); shopcarMapper.deleteShopcar(userId,id); }@Override publicvoiddeleteShopcar(HttpSessionsession,intid){ //TODOAuto-generatedmethodstub //从session中获取用户信息Useruser=(User)session.getAttribute("session_user"); //获取用户的id intuserId=user.getId(); shopcarMapper.deleteShopcar(userId,id); }购物车界面,如图6.6所示:图6.6购物车界面(4)订单模块该模块包括以下功能:查看所购买商品的订单信息并确定订单是否发货。会员用户或是管理员用户登录商城系统的前台系统后,选择“我的订单”,可以查看所购买商品的订单信息,并确认购买商品是否发货。这里主要对可以查看所购买商品的订单信息,并确认购买商品是否发货的功能进行代码说明。查看所购买商品的订单信息,并确认购买商品是否发货的主要功能代码如下所示:@Override publicList<Order>getOrdersByUserId(){ //TODOAuto-generatedmethodstub //获取当前用户的信息 //获取session HttpSessionsession=((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getSession(); //从session中获取用户信息 intuserId=((User)session.getAttribute("session_user")).getId(); returnorderMapper.getOrdersByUserId(userId); }<!--根据用户id获取订单信息--><selectid="getOrdersByUserId"resultMap="orderMapping">select*fromec_orderwhereuser_id=#{id}orderbycreate_datedesc</select>6.2后台模块(1)商品管理模块该模块主要具有以下功能:商品分页查询、商品信息的添加、删除、修改、只有管理员才进行进入后台管理进行如上操作,同时可以点击商品查询商品详情点击商品的类型标签以及进行商品检索时进行商品信息查看的主要功能代码如下所示:@RequestMapping("/getAll.action") publicStringgetAllArticles(Modelmodel,StringtypeCode,Stringtitle,PageModelpageModel){ //根据商品类型以及商品的标题获取商品信息 List<Article>articles=articleService.getAllArticles(typeCode,title,pageModel); model.addAttribute("articles",articles); model.addAttribute("pageModel",pageModel); model.addAttribute("title",title); model.addAttribute("typeCode",typeCode); //获取所有的一级商品类型 List<ArticleType>articleTypes=articleTypeService.findAllFirstArticleType(); model.addAttribute("firstArticleTypes",articleTypes); return"article/list"; }添加商品的主要功能代码如下所示:@RequestMapping("/getAll.action") publicStringgetAllArticles(Modelmodel,StringtypeCode,Stringtitle,PageModelpageModel){ //根据商品类型以及商品的标题获取商品信息 List<Article>articles=articleService.getAllArticles(typeCode,title,pageModel); model.addAttribute("articles",articles); model.addAttribute("pageModel",pageModel); model.addAttribute("title",title); model.addAttribute("typeCode",typeCode); //获取所有的一级商品类型 List<ArticleType>articleTypes=articleTypeService.findAllFirstArticleType(); model.addAttribute("firstArticleTypes",articleTypes); return"article/list"; }下架商品的主要功能代码如下所示://商品信息下架 @RequestMapping("/removeArticle.action") publicStringremoveArticle(Modelmodel,Integerid){ articleService.removeArticleById(id); return"redirect:/article_manager/getAll.action"; }@Update("updateec_articlesetdisabled='1'whereid=#{id}") voidremoveArticleById(Integerid);修改商品的主要功能代码如下所示:@RequestMapping("/updateArticle.action") publicStringupdateArticle(MultipartFilefile,Stringcode,Articlearticle,HttpServletRequestrequest){ try{InputStreaminput=file.getInputStream(); //获取项目部署路径 StringrealPath=request.getServletContext().getRealPath("/image/article"); //如果上传所指定的目录不存在则创建目录 Filef=newFile(realPath); if(!f.exists()){ f.mkdirs(); } //获取当前上传的文件的名字a.jpg StringimageName=file.getOriginalFilename(); if(imageName!=null&&!imageName.equals("")){ //重新生成新的文件名 StringnewFileName=UUID.randomUUID().toString()+imageName.substring(imageName.lastIndexOf("."),imageName.length()); System.out.println("文件路径:"+(realPath+File.separator+newFileName)); //构建输出流 OutputStreamout=newFileOutputStream(realPath+File.separator+newFileName); byte[]data=newbyte[1024]; intlen=0; while((len=input.read(data))!=-1){ out.write(data,0,len); out.flush(); } out.close(); input.close(); article.setImage(newFileName); } }catch(Exceptione){ System.out.println("未上传新图片:"+e.getMessage()); } try{ //指定商品类型 article.setTypeCode(code); //更新商品信息 articleService.updateArticle(article); request.setAttribute("tip","商品更新成功!"); }catch(Exceptione){ //TODO:handleexception e.printStackTrace(); request.setAttribute("tip","商品更新失败:"+e.getMessage()); } return"redirect:/article_manager/getAll.action"; }商品管理界面,如图6.8所示:图6.8商品管理界面商品详情界面,如图6.9所示:图6.9商品详情界面添加商品界面,如图6.10所示:图4.10添加商品界面修改商品界面,如图4.11所示:图4.11修改商品界面(2)商品类型管理模块该模块主要是进行商品类型的分页查询以及,删除,添加,更新操作;相关操作完成之后,买家可以实时看到响应的效果;查看商品类型的主要功能代码如下所示:@RequestMapping("/getAll.action") publicStringgetAll(Modelmodel,PageModelpageModel,Stringmessage){ //根据商品类型以及商品的标题获取商品信息 List<ArticleType>articleTypes=articleTypeService.getAllArticleTypes(pageModel); model.addAttribute("list",articleTypes); if(message!=null&&!message.equals("")){ model.addAttribute("message",URLDecoder.decode(message)); } return"articleType/list"; }添加以及修改商品类型的主要功能代码如下所示:@RequestMapping("/addOrUpdate.action") publicStringaddOrUpdate(ArticleTypetype,StringparentCode){ if(type.getCode()!=null&&!type.getCode().equals("")){ //进行更新商品类型操作 articleTypeService.updateArticleType(type); }else{ //进行添加商品类型操作 articleTypeService.saveArticleType(type,parentCode); } return"redirect:/articleType_manager/getAll.action"; }商品类型管理界面,如图6.12所示:图6.12商品类型管理界面m添加商品类型界面,如图6.13所示:图6.13添加商品类型界面修改商品类型界面,如图6.14所示:图6.14修改商品类型界面(3)订单管理模块该模块包括以下功能:订单的分页查询,订单列表页面不仅可以看到订单信息还可以看到订单中商品的信息,以及进行确认发货等相关操作。查看所有用户的订单信息的主要功能代码如下所示:@Override publicList<Order>getAll(PageModelpageModel){ //TODOAuto-generatedmethodstub //获取订单总记录数 inttotalNum=orderMapper.getToalNum(); pageModel.setTotalNum(totalNum); //订单分页查询 List<Order>orders=orderMapper.getAllOrders(pageModel); returnorders; }<!--订单分页查询--><selectid="getAllOrders"resultMap="orderMapping">select*fromec_orderorderbycreate_datedesclimit#{startNum},#{pageSize}</select>对订单进行“确认发货”以及“取消发货”操作的主要功能代码如下所示://确认发送订单 @RequestMapping("/checkOrder.action") publicStringcheckOrder(Orderorder){ orderService.checkOrder(order); return"redirect:/order_manager/getAll.action"; }@Override publicvoidcheckOrder(Orderorder){ //TODOAuto-generatedmethodstub if(order.getStatus().equals("0")){ //取消发货 order.setSendDate(null); }else{ //发货 order.setSendDate(newDate()); } orderMapper.checkOrder(order); }订单管理界面,如图6.15所示:图6.15订单管理界面(4)用户管理模块该模块包括以下功能:用户的分页查询,用户信息的冻结以及激活,主要针对角色为管理员的用户进行该操作。查看所有用户信息的主要功能代码如下所示:@RequestMapping("/userList.a

温馨提示

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

评论

0/150

提交评论