《基于SSM框架的快乐商城设计与实现.docx》由会员分享,可在线阅读,更多相关《基于SSM框架的快乐商城设计与实现.docx(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-文档均为 word 文档,下载后可直接编辑使用亦可打印-摘 要:随着互联网的发展,网上购物的用户越来越多,更多的人喜欢网上购物,网上购物方便,快捷。其中的图书商城也是网上购物的一部分,现在的人们的节奏越来越快, 时间对于个人来说非常的重要,基于各种原因促使了网上购物的快速发展!网上购物可以让人只需要一个电脑 ,就可以轻轻松松的买到自己想要购买的书 ,用户也可以通过图书介绍来了解图书的大概内容。网上购物商城的经营成本低,用户检索很方便,购物的时间大大缩短。本系统主要以 Jsp 为工具,包括用户登录 ,注册,图书查找等功能。关键词: java; spring; springMVC; Mybati
2、s;第一章前言1.1 系统开发引言近年来,随着计算机相关技术和网络技术的发展,计算机正在不断的改变人的生活方式,它的影响是潜移默化的。尤其是这几年,互联网发展的速度令人难以想象。人们更加希望通过网上购物所节约下来的时间去做更多的事情。于是网上商城就这样发展起来了,网上购物非常方便,支付非常快捷,足不出户就可以买到自己想要购买的东西。并且网上商城的物品更新速度很快,用户可以第一时间得到新品的详细信息。网上商城的成本比较的,这样商品也会随之而然的比较低,就会吸引到更多的人去购买。网上在线商城,就是为了将用户和商品之间架起一个快速的平台。第二章相关开发工具介绍2.1 Eclipse 介绍eclips
3、e 是一个开发了源代码,基于java 的开发平台,是一个免费的编写java 的开发工具。它本身只是一个框架和一些服务,它通过很多的插件来组成开发环境。它的页面简单,使用起来非常便捷,非常适合 java 开发的新手使用。它最初是属于 IBM 公司的一个软件,后来IBM 公司宣布将其开放源码。它的设计理念就是,一切都可以是插件。它是一个较为强大的集成环境,集成了cvs,junit,ant,maven 等。现在很多学生和公司依然会选择它,最重要的原因:它是免费的!2.2 Oracle 数据库Oracle Database,又名 Oracle RDBMS,或简称 Oracle。是甲骨文公司的一款数据库
4、系统。它的使用范围非常广泛,可以用于大,中,小环境。它的使用率比较高,可靠性也很好,对于吞吐量大的也完全适应,保存数据的时间很长,具有完备的关系产品。安全性很高,但是价格比较贵,具有分布式的处理功能。2.3 Tomcat 服务器Tomcat 服务器是 Apache 提供的,它是一个开源并且免费的一个产品。它有 Apache 和 Sun 等公司共同开发完成的。因为有 Sun 公司的加入,所以最新的 Servlet 和 JSP 规范得以在 Tomcat 中表现出来。Tomcat 技术比较先进,性能也比较稳,而且还是免费的。所以很多 Java 开发者都很喜欢用这个产品,部分软件开发公司也会使用该产品
5、,可以说它是目前很流行的 Web 应用服务器了。Tomcat 是免费开放源代码的一个服务器,属于轻量级的,在一些小型或者中型系统中应用比较广泛,是开放Java 网站的首选。对于一个初学者来说,Tomcat 可以说是非常适合开发 Javaweb 了。2.4 Spring 介绍Spring 是一个开源的控制反转和面向切面的容器框架,它的应用范围非常的广, 它的主要目的就是为了简化企业的开发。以前我们实例化对象是通过 new 来创建的,而使用了 Spring 之后就可以使用 IOC 控制反转由外部容器来负责创建对象,控制权就转移到外部容器。Spring 的出现,降低了组件之间的耦合度。Spring
6、还提供了很多其他的服务,例如事务的操作,持久化服务。2.5 SpringMVC 介绍SpringMVC 是 Spring 中的一个很小部分,可以说是 Spring WEB 模块的一个子模块, 它包括了处理器映射器,处理器适配器,视图解析器等。SpringMVC 实现了即用的 MVC 的核心概念。它分工明确,很容易扩展,并且拥有强大的数据验证,格式化和数据绑定。并且还支持目前非常流行的 RESTful 风格,和简单的文件上传,和基于注解的使用。2.6 Mybatis 介绍Mybatis 一开始是 Apache 公司的一个开源项目 iBatis,后来迁移到了 google code 就改了名称为
7、Mybatis,它是一个基于 java 的持久层的框架。Mybatis 实现了接口的绑定,使用很方便。对象映射的效率非常的高。并且采用了 OGNL 的表达式来消除其他的元素。Mybatis 简单易学,并且灵活,相较于Hibernate 更简单一些,但是它需要编写 SQL 语句,并且它的二级缓存机制不是很好。第三章系统可行性分析3.1 技术可行性分析系统采用当前流行的 B/S 结构,这种结构的最大优点就是软件的分发非常方便,不需要用户安装什么软件,只需要你的电脑里面有浏览器,就可以使用。本系统主要依托于 Spring 框架,采用JAVA、JSP、Jquery、MySQL 和 MyBatis 等技
8、术开发,前台主要使用的是BootStrap 技术,界面简单,美观。使用Mybatis 来与数据库进行连接,可以对数据库进行增删改查等操作。Spring 具有全面性和灵活性,还有他的功能性很强,再搭配数据库,非常的方便快捷。在 WEB 的开发项目中的技术可行性方面是完全可行的。3.2 操作可行性分析该系统可以运行在大多数的计算机中,由于是采用 B/S 架构开发,所以无需安装任何客户端,只需登录主页,就可以登录到网站首页。用户就可以进行登录,注册信息, 浏览商品,对商品进行购买,或者加入到购物车。由于使用了BootStrap 技术,网页设计非常清新,简洁,视觉效果比较好,操作也很简单,操作可行性很
9、强。3.3 经济可行性分析本系统是可以运行于现在市场上出现的各种个人电脑,系统成本主要集中在系统的开发上,而且维护成本比较低,并且现在更多的人更愿意选择在网上购买来节省时间, 所以网上购物的前途很客观。第四章系统需求分析正所谓万事开头难,如果不能开个好头,那么到项目的后期就会渐渐的暴露出一些致命的错误亦或者是意想不到的困难,所以要对项目进行细致的分析与筹划,才能降低失误。4.1 功能需求分析本系统开发是为了通过这个简单的商城,来了解 JavaWeb 工程师如何将知识运用起来,也可以为之后工作打下一个基础.4.2 性能需求分析性能需求是指系统一定要满足的定时约束或容量约束,通常包括速度、信息量的
10、速率、主存的容量、和安全性等方面的需求。对于系统来说,必须保证这个系统的稳定性。另外,系统的响应时间不能过长,应尽量减少用户访问时的等待时间。主存容量、磁盘容量应满足整个软件开发的需求等。4.3 可靠性分析开发出来的软件系统的稳定与否决定着软件开发的成败。因此提高系统的稳定性是每一个开发人员的必修课。系统可能运行一个月没问题,半年没问题,但不代表一年也没有问题,很有可能会出内存溢出,服务器的崩溃等异常错误。因此在编写代码时要十分注意内存的管理,避免内存的非法访问,该释放的资源要及时的释放。本系统在设计之初就将内存管理,事务管理,对象管理进行了合理的设计,尽量避免此类问题的产生。第五章概要设计5
11、.1 整体结构图系统共有六大模块,分别为:用户管理,分类显示,图书显示,购物车管理,订单管理, 后台管理。系统整体结构图与用例图,请参考下面两幅图。基于 SSM 的快乐商城设计与实现用分图购订台户类书物单管管管显车管理理理示管理理图 1 系统结构图图 2 系统用例图5.2 功能模块的分解系统的主要模块有:用户管理模块,图书分类显示模块,图书显示模块,购物车管理模块,订单管理模块,后台管理模块。5.2.1 用户管理模块当用户登录到首页时,就可以对商品进行在线预览,对于未注册用户,系统应该提供注册功能。对于已经进行注册过的用户,用户可以进行登录、退出、修改密码等操作;5.2.2 分类显示模块对于所
12、有的普通用户来说,都可以进行对商城内的书籍浏览,而图书需要进行分类显示,以方便用户的浏览与查询。5.2.3 图书显示模块对于具体图书的显示,对于用户,可以通过书名的来进行模糊搜索图书、查看该图书的详细内容和简介等;5.2.4 购物车管理模块用户可以在查看图书的过程中向购物车中添加图书,并且也可以修改购物车中图书的数量、也可以删除购物车中的图书,还可以查看我的购物车等;5.2.5 订单管理模块将商品添加到购物车之后,可以通过点击购买来生成订单,也可以查看我的订单, 删除订单,也可以查看订单的具体信息。5.2.6 后台管理模块后台管理功能,可以查看订单,查看图书信息,修改图书信息,添加用户和分配权
13、限。第六章数据库设计6.1 数据库设计综述信息系统的主要的目的是通过大量的数据获得所需要的信息,这就要求系统本身能够存储和管理大量的数据,而这一功能的实现必须借助大型数据库系统。整个系统共有 6 张数据表。所有的表中的字符集都是 utf-8,这样就不会在页面中出现乱码问题。由于系统采用 Mybatis 来完成对数据库的操作,而Mybatis 是使用对象来进行数据的管理和操作。下图为主要实体类之间的 E-R 关系图。图 3 主要实体类之间的E-R 关系图6.2 bs_category 表设计Bs_category(id,name)表是用来存储分类信息。字段 Id 为主键,name 为分类的名称。
14、具体字段设置参考表 1。表 1 bs_category列名id name数据类型NUMBER(7) VARCHAR2(20)允许空No no6.3 bs_item 表设计Bs_item(id,count,price,order_id,logo,book_id)用来存储订单明细表。具体字段设置参考表 2。表 2 bs_item列名数据类型允许空idNUMBER(7)nocountNUMBER(7)priceNUMBER(7,2)order_idNUMBER(7)logoNUMBER(7)book_idNUMBER(7)6.4 bs_user 表设计Bs_user(id,username,real
15、name,password,gender,phone,email,company,state,logo,img_path)。具体字段设置参考表 3。表3 bs_user列名id username realname password gender phone email company state logoimg_path数据类型NUMBER(7) VARCHAR2(20 BYTE) VARCHAR2(20 BYTE) VARCHAR2(20 BYTE) VARCHAR2(20 BYTE) VARCHAR2(20 BYTE) VARCHAR2(20 BYTE) VARCHAR2(20 BYTE)
16、 NUMBER(3) NUMBER(3)VARCHAR2(20 BYTE)允许空no6.5 bs_order 表设计Bs_order(id,orderNo,createdate,orderstatus,total,user_id,logo,address_i d),具体字段设置参考表 4。表 4 bs_order列名id orderNocreatedate orderstatus total user_id logoaddress_id数据类型NUMBER(7) VARCHAR2(20 BYTE) DATEVARCHAR2(20 BYTE) NUMBER(7,2) NUMBER(7) NUMB
17、ER(7)NUMBER(7)允许空no6.6 bs_book 表设计Bs_book(id,bookname,author,publish,publishdate,price,instrduce,imgurl,c ategory_id,logo,moremes)。具体字段设置参考下表。表 5 bs_book列名id bookname author publishpublishdate price instrduce imgurl category_id logomoremes数据类型NUMBER(7) VARCHAR2(255 BYTE) VARCHAR2(255 BYTE) VARCHAR2(
18、255 BYTE) DATENUMBER(7,2) VARCHAR2(255 BYTE) VARCHAR2(255 BYTE) VARCHAR2(255 BYTE) NUMBER(7)VARCHAR2(255 BYTE)允许空no6.7 bs_address 表设计Bs_address(id,province,city,area,detail,peceiver,tel,code,isdefault,use r_id,logo)具体字段设置参考下表。列名表 6 bs_address数据类型允许空idNUMBER(7)noprovinceVARCHAR2(255 BYTE)cityVARCHAR2
19、(255 BYTE)areaVARCHAR2(255 BYTE)detailVARCHAR2(255 BYTE)peceiverVARCHAR2(255 BYTE)telVARCHAR2(255 BYTE)codeVARCHAR2(255 BYTE)isdefaultNUMBER(10)user_idNUMBER(10)logoNUMBER(10)6.8 数据库表创建用户表创建DROP TABLE BS_USER; CREATE TABLE BS_USER(ID NUMBER(7) NOT NULL ,USERNAME VARCHAR2(20 BYTE) NOT NULL , REALNAME
20、 VARCHAR2(20 BYTE) NOT NULL , PASSWORD VARCHAR2(20 BYTE) NOT NULL , GENDER VARCHAR2(2 BYTE) NULL , PHONE VARCHAR2(255 BYTE) NULL , EMAIL VARCHAR2(255 BYTE) NULL , COMPANY VARCHAR2(255 BYTE) NULL , STATE NUMBER(2) NULL ,LOGO NUMBER(3) NULL ,IMG_PATH VARCHAR2(255 BYTE) NULL) LOGGINGNOCOMPRESS NOCACHE;
21、drop sequence bs_user_id;create sequence bs_user_id increment by 1 start with 1 ;图书分类表创建DROP TABLE BS_CATEGORY; CREATE TABLE BS_CATEGORY ( ID NUMBER(7) NOT NULL ,NAME VARCHAR2(20 BYTE) NOT NULL) LOGGINGNOCOMPRESS NOCACHE;drop sequence bs_category_id;create sequence bs_category_id increment by 1 star
22、t with 1 ;图书表创建DROP TABLE BS_BOOK; CREATE TABLE BS_BOOK ( ID NUMBER(7) NOT NULL ,BOOKNAME VARCHAR2(255 BYTE) NOT NULL , AUTHOR VARCHAR2(255 BYTE) NOT NULL , PUBLISH VARCHAR2(255 BYTE) NULL , PUBLISHDATE DATE NULL ,PRICE NUMBER(7,2) NULL , INSTRDUCE VARCHAR2(255 BYTE) NULL , IMGURL VARCHAR2(255 BYTE)
23、 NULL ,CATEGORY_ID VARCHAR2(255 BYTE) NULL , LOGO NUMBER(3) NULL ,MOREMES VARCHAR2(255 BYTE) NULL) LOGGINGNOCOMPRESS NOCACHE;create sequence bs_book_id increment by 1 start with 1 ;地址表创建DROP TABLE BS_ADDRESS; CREATE TABLE BS_ADDRESS ( ID NUMBER(7) NOT NULL ,PROVICE VARCHAR2(255 BYTE) NULL , CITY VAR
24、CHAR2(255 BYTE) NULL , AREA VARCHAR2(255 BYTE) NULL , DETAIL VARCHAR2(255 BYTE) NULL , PECEIVER VARCHAR2(255 BYTE) NULL , TEL VARCHAR2(255 BYTE) NULL , CODE VARCHAR2(255 BYTE) NULL , ISDEFAULT NUMBER(10) NULL , USER_ID NUMBER(7) NULL ,LOGO NUMBER(3) NULL) LOGGINGNOCOMPRESSNOCACHE;create sequence bs_
25、address_id increment by 1 start with 1 ;订单表创建DROP TABLE BS_ORDER; CREATE TABLE BS_ORDER ( ID NUMBER(7) NOT NULL ,ORDERNO VARCHAR2(255 BYTE) NULL , CREATEDATE DATE NULL ,ORDERSTATUS VARCHAR2(255 BYTE) NULL , TOTAL NUMBER(7,2) NULL ,USER_ID NUMBER(7) NULL , LOGO NUMBER(3) NULL , ADDRESS_ID NUMBER(7) N
26、ULL) LOGGINGNOCOMPRESS NOCACHE;create sequence bs_order_id increment by 1 start with 1 ;订单明细表创建DROP TABLE BS_ITEM; CREATE TABLE BS_ITEM ( ID NUMBER(7) NOT NULL , COUNT NUMBER(7) NULL , PRICE NUMBER(7,2) NULL , ORDER_ID NUMBER(7) NULL , LOGO NUMBER(3) NULL ,BOOK_ID NUMBER(7) NULL) LOGGINGNOCOMPRESS N
27、OCACHE;create sequence bs_item_id increment by 1 start with 1 ;第七章 详细设计7.1 系统结构J2EE 项目一般使用 3 层结构, 即显示层, 业务逻辑层和持久层。利用Spring,SpringMVC 和 Mybatis,我们可以快速的实现业务逻辑层和持久层。此分层可以保证分工明确,代码结构清晰可见。视图层调用 Service 层,而 Service 层调用 Dao 层, Dao 层再对数据库进行一系列操作,这也是常见的分层结构。如下图所示。表示层1. 基于 web 的 jsp , servlet , struts ,webwor
28、k,spring web mvc 等。业务逻辑层Pojo(service,manager),session EJB,spring数据访问层JDBC,Mybatis,Hibernate,JDO,Entity Bean图 4 常见的分层结构及使用的技术7.2 系统所使用的框架和技术列表表 7 使用的框架与技术编号1.工具Spring版本4.1.4说明2.SpringMVC4.1.43.Mybatis3.4.5实现持久化操作4.BootStrap前端5.Maven7.3 配置开发工具7.3.1 对 Oracle 的配置对于 Oracle 而言并没有太多东西去配置,只要注意在创建数据库时注意编码问题即
29、可。创建数据库的 sql 语句如下:create database cols default character set utf8。7.3.2 对 Eclipse 的配置1. 设置工程的默认编码为 UTF-8。2. 配置 JSP 的默认编码为 utf-8。3. 配置 JavaScript 的默认编码为 utf-8。7.4 添加框架环境使用 maven 来对 jar 包的版本进行管理,添加 junit, Spring, SpringMVC, Mybatis, log4j, ojdbc6 等依赖。7.5 配置Mybatis修改 mybatis-config.xml 中的数据库连接信息。并在 myb
30、atis-config.xml 中做如下配置:C0祖 gu.F鲁七 i on也 tt i ng na 啦 jdbcType和rij也 ” v吐 殴 ,战LL,b,/Stting” typ. Al i” “ ”!I kagl! na1t11!.i,C立 比 妀 心九亡i 切“ I 吹 yp e凸l i agOO t yp吐 landl er s勾 沁 ndl er h日ndl 沪 叩 ,叩严 che. ibot is , t ype和 Uil!Typ哗 nd!.er 哼 J av叮 yp沪, CO贝加 oh. ent 切 叩 e r 勹 5e成 er ”t y 巾 ndl1r h1 ndl 旮尸
31、“ 守 g ,叩尸 ch奢让吐 让 ,亡y” . EPI叩 “ ”“ HoIIdL杆 j WIWP 飞如 沁 oR鲁nt i 妙4 0心r . 0心 价RS rot廿s / : t yp. Hand l . r-“ Jc on千i gu 尸at ion图 5.mybatis 配置文件7.6 项目中的目录结构与包结构7.6.1 目录结构如下图, Q V ClV 社 co m .b o o k 社 co nt ro lle 田 c o n v e rt e r e nt ify 田 ex c e p 1ii o n 田 m ap p e r 由 ,se 内 i ce:,. 袅 co m过 re s
32、 o ur 孚 缸 o n fig)吵 s p r ing webapp:,. 丘 cs s) 令 d is1i) te- i m a g e s, 今 js) 忘 W EB-IN FD bs.jgp图 6.目录结构7.6.2 包结构包 名 com.book.converter com.book.entity表 8 系统包结构说明转换器实体层com.book.exception com.book.mapper com.book.service com.book.service.impl com.book.controller异常类Dao 层Service 接口Service 的实现类控制层7.
33、7 前台普通用户部分该系统的前台部分是提供给用户浏览、选购商品,一个好的网站的前台部分必须简洁,易操作。因此,前台的设计主要把握 3 点:简明扼要、条理清晰、层次分明。7.7.1 首页设计前台部分采用 bootstrap 框架,外观简单,大方。首页包括登录,注册,商品展示部分。图 7.前端首页展示上半部分主要有登录,注册和搜索图书等按钮,中间部分是轮播图,下半部分是图书分类的展示。核心代码如下:精选图书推荐图书特价图书7.7.2 用户模块用户模块主要实现用户注册、用户登录、修改当前用户密码、以及退出等功能。用户部分都是用了 Ajax 异步请求,进行用户的查询。(1) 用户注册图 8.用户注册p
34、ublic String regUser(User user) user.setImg_path(company.jpg); userService.register(user); return redirect:listAll;前台将注册信息提交给后台,后台调用 service 的 register 方法来进行注册。(2) 用户登录图 9:用户登录通过前台将用户名和密码传给后台,后台进行验证来查看数据库中是否存在该用户。public String userLogin(User user, HttpSession session, String cookie,HttpServletRespon
35、se response)Cookie userCookie = null; Cookie pwdCookie = null;if(null != cookie & cookie.equals(f)userCookie = new Cookie(userCookie, user.getUserName(); pwdCookie = new Cookie(pwdCookie, user.getPassword();elseuserCookie = new Cookie(userCookie, ); pwdCookie = new Cookie(pwdCookie, );userCookie.set
36、MaxAge(60*60*24*30); userCookie.setPath(/); pwdCookie.setMaxAge(60*60*24*30); pwdCookie.setPath(/);response.addCookie(userCookie);response.addCookie(pwdCookie);User user1 = userService.login(user.getUserName(); if(null!=user1)if(user1.getPassword().equals(user.getPassword() session.setAttribute(logi
37、nUser,user1);return redirect:userLoginView;elsereturn redirect:listAll;elsereturn redirect:listAll;(3) 修改当前用户密码图 10:用户信息修改用户将修改的信息提交之后,后台进行处理。publicStringupdateUserSubmit(Useruser,MultipartFile multipartFile,HttpSession session)String newFileName = null; if(multipartFile.getOriginalFilename() != nul
38、l &multipartFile.getOriginalFilename().length() 0 )String fileName = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf(.); System.out.println(fileName);newFileName = UUID.randomUUID() + fileName;File newFileName);try file=newFile(src/main/webapp/images/hea
39、d/+multipartFile.transferTo(file); catch (IOException e) e.printStackTrace();user.setImg_path(newFileName);elseuser.setImg_path(null);session.setAttribute(user_head_img,newFileName); userService.updateUser(user);return redirect:listAll;(4) 退出登录图 11.退出登录用户直接点击退出登录,后台直接将用户的 session 移除,并直接跳转到首页。7.7.3 图
40、书模块(1)图书列表图 12.图书列表当进入商城首页时,会查询图书列表。public String getAllBookList() return book/index;(2) 搜索图书图 13.图书搜索模糊查询,只要输入书的某一个字,数据就会传到后台,后台就会链接数据库进行查询。public String findByLikeName(RequestParam(defaultValue = 12) Integer pageSize,pageNow,PageBeanRequestParam(defaultValue=1)IntegerString likeName,Model model)bo
41、okPageBean=bookService.selectBySearchName(pageNow,pageSize,likeName); model.addAttribute(pageBean,bookPageBean);return book/page/pageData3;(3)图书详情图 14.图书详情当点击某一个书的详情链接之后,就会将该书的 id 传到后台,后台对该书进行查找,并将信息返回给前台。public String getBookDetails(Integer id,Model model) Book book = bookService.selectById(id); model.addAttribute(book, book);return book/details;7.7.4 购物车(1) 添加购物车图 15 购物车页面点击商品详情之后,可以选择数量,然后将商品加入购物车。publicStringaddBookToCart(HttpServletRequestrequest, RequestParam(value = bookId) Integ
限制150内