JavaWeb网上购物系统的设计与实现

GitHub源码

1 课题简介

1.1 背景及研究现状

在互联网高速发展的时代背景下,网络正以一种前所未有的冲击力在影响着人类的活动,包括人类的生产和日常生活。网络的诞生和发展,颠覆了传统的信息传播方式,冲破了存在于传统交流方式中时间和空间的种种壁垒,极大地改变了人类从物质到精神、从形式到内容、从生产到生活的各种活动,并且给人类带来了新的机遇和挑战。网络购物作为电子商务的一种形式正以其高效、低成本的优势,逐步成为新兴的经营模式和理念,人们已经不再满足用途信息的浏览和发布,而是渴望着能够充分享受网络所带来的更加多的便利。网络购物正适应了当今社会快节奏地生活,使顾客足不出户便可以方便快捷轻松地选购自己喜欢的商品。

本次网上购物系统基于课程设计以专业综合设计I的设计成果,对其进行Web服务器端功能的扩展与开发,将其设计成一个具有服务器端交互功能的完整的Web应用系统,并完成系统的测试、服务器端的部署与发布。

1.2 设计内容与设计思路

网上购物系统主要是对后台管理和前台操作。后台管理是管理员对本网站的维护,通过商品资料(商品添加、商品修改),等功能达到对网站的管理。前台操作是用户登录到本网站,可以进行用户注册,通过网站的热门商品推荐或商品分类查找功能实现商品搜索,找到自己想要买的商品,装入购物车,提交定单进行购买。

网上购物平台的特点是客户和电子商品信息量很大,管理员需要整理的信息很多,为让管理员轻松、方便、快捷的管理,该平台采用符合购买电子商品基本的原则,满足广大客户的日益增长的数量,并达到操作过程中的直观、方便、实用、安全等要求。

1.3 设计目的及意义

网上购物系统,是在网络上建立一个虚拟的购物商场,使消费者的购物过程变得轻松、快捷、方便,很适合现代人快节奏的生活;同时又有效的控制“商场”运营的成本,开辟了一个新的销售渠道。

网上购物相较于实体店铺有着其独特的优势,首先相较于实体店铺网上店铺所需要的成本很小很多,网上购物不需要考虑门店等等的费用其次网上购物系统不存在店铺打样的问题延长了经营的时间无需专人看店节约成本的同时还能使得效益更大化。

本系统利用现代化的电子及网络技术,为消费者和企业搭建一个良好的互动平台。让用户享受快捷的购物方式,为企业提供不同于传统销售的崭新的销售模式。 该购物系统是一个中小型的电子商务系统,可以为各类用户提供方便的在线购物环境。用户可以在系统中实现注册、登录、修改个人信息、分类查询商品信息、购物、管理购物车、支付等功能。管理员可以通过后台管理模块实现商品的增删改查、种类的增删改查等,从而实现对于该购物系统的管理。

2 系统分析与设计

2.1 可行性分析

可行性研究是为了弄清楚系统开发的项目是不是可以实现和值得进行研究的过程,实际上是一次大大简化系统分析和系统设计的过程,所以,进行可执行性的分析是非常必要的,也是很重要的,可行性研究阶段通过对系统目标进行市场调研和技术分析,提出了初步的可行性方案并进行了论证。这里主要从技术可行性、经济可行性以及操作可行性三方面进行分析。

2.1.1 经济可行性

该系统硬件只需要一台PC机,而且配置要求不高。软件方面用到的MySQL是免费开源的,Eclipse也是免费使用的,所以开发成本并不高。而该系统若投入运行之后不仅减少了人力、物力而且可以推动电影行业的发展,所带来的收益是巨大的,因此在经济上也是可行的。

2.1.2 技术可行性

技术可行性要考虑到现有的技术手段和能力能不能完成系统的开发,以免开发到一半出现现有技术无法解决的问题。本系统主要采用的是JAVAWeb和JSP技术。JAVA语言和JSP都是很成熟的技术,也是世界范围内应用最广泛的技术,所以用它们作为后台和前台的语言是没有任何问题的。而且集成开发工具Eclipse可以解决很多方面的问题,创造了良好的开发环境。由于JSP功能强大,而MySQL灵活易维护在开发方面具有方便快捷、使用灵活的特点,以及目前的广泛实际应用,因此使用JAVAWed、MySQL是开发轻平台的最佳组合从而说明本系统在技术方面可行。

硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。

2.2 需求分析

2.2.1 系统设计目标

此网络购物平台系统旨在为用户提供一个简易的具备一些基本功能的购物系统,通过这个系统用户可以轻松的获得自己想要的商品。存在两种类型用户,普通用户和管理员用户。普通用户在这个系统中注册过后进行登陆此时可以在平台中进行自由的选购自己想要的商品,将选购好的商品加入购物车,如果需要修改可以在购物车中更改所需的商品数量,当选择完成过后可以确认购买,也可以让所选物品一直处在购物车中,等待下次登陆时依然有效。管理员用户可以对商品进行管理,包括商品上架,商品下架,商品查询,商品修改等。

2.2.2 系统功能需求分析

(1)用户管理:注册会员、登录、管理员用户校验、激活、退出;

(2)商品显示:按分类查询商品、通过首页推荐查询商品、展示热门商品、展示最新商品、提交商品到购物车中等;

(3)购物车管理:向购物车中添加商品、修改购物车中商品数量、删除购物车中商品、我的购物车;

(4)订单管理:通过购物车中商品生成订单、查看我的订单、查看某个订单的详细、订单支付、确认收货。

(5)管理员:订单查询、商品和类别的增删改查。

2.2.3 系统性能需求分析

用户注册部分需要实时检验用户信息是否合格,否则用户提交后才检验,若不合格需重新填写,用户很快会厌倦,因此Ajax是不错的选择。

商品部份应该给用户提供推荐,比如最新商品和最热商品,给用户提供访问便利。

此外,分类部分不常改,且使用频繁,但每次若从数据库中读取会影响效率,因此使用redis缓存数据是个不错的选择,因为大大加快了访问效率。

订单部分由于支付功能需要第三方平台,所以可不必实现。

管理员部分需要对订单具有全权访问权限。

2.3 系统总体设计

2.3.1 系统总体结构设计

本项目采取MVC设计模式,分为model,view,controler三层。本项目包含dao,domain,service,web,utils五打包。

其中web包中包含各种servlet类和前端jsp进行交互,及view层。

Service为业务逻辑层,控制信息的权限以及信息在数据库与前端的交互,及controler层。Dao中主要负责与数据库进行交互,通过各种sql获取或添加信息到数据库,及model层。

Domain为基本类,共三大层创建对象进行层与层间的信息交互,作为信息载体的集合而存在。

Utils包中包含各种工具,例如数据库中的date类型需要string进行转换,或者id的生成,这些工具均包含于utils包中。基本模式如下图:

img

图2-1 系统总体结构设计图

B/S系统架构,简单点就是用户通过访问浏览器输入域名后,转入对应的前端html或jsp,然后通过http或https协议将信息报文传送给服务端,服务端进行相应之后做出一系列对数据或页面的响应。以下是B/S系统架构图。

img

图2-2 B/S系统框架图

2.3.2 系统功能模块设计

(1)用户注册功能:发送邮件、激活用户、表单的校验、用户的登录功能、自动登录、用户的注销功能

(2)商品模块:首页热门商品和最新商品功能、商品分类、商品的列表(分页)、商品详细信息、浏览记录功能

(3)购物车模块:将商品加入购物车、展示购物车功能

(4)订单模块(多表和事务):提交订单、展示订单、在线支付

(5)后台的分类的模块:分类信息的增删改查

(6)后台的商品模块:商品的信息的增删改查(文件上传)

(7)后台的订单的模块:所有的订单的信息展示

2.3.3 主要业务流程

用户的注册过程:

是首先进入主界面,点击注册按钮,跳转到注册页面,填写注册信息,ajax判断信息是否合格,然后跳转到注册servlet层,把信息传递给service层,service层通过dao层获取数据库信息,反馈是否成功给servlet层,最终按是否插入成功而跳转到注册成功或失败界面。之后介绍的流程大致如此,及MVC三层模型的传输过程。

img

2-3 程序包结构图

主界面显示:

首先index.jsp加载head.jsp,然后获取最热商品信息与最新商品信息,并显示在主界面,最后加载footer.jsp。

Head.jsp界面显示:

首先加载首页,然后访问redis数据库判断是否有种类信息,有则读取,无则访问MySQL数据库,读取数据后放到redis中。

用户注册分析:

img

图2-4 用户注册详情

商品设计:

img

图2-5 商品详情

通过浏览器访问商城,就相当于超市访问商品,因此我们需要购物车来装载商品以便对所需物品增删改查。img

图2-6 购物车设计

订单业务设计:

img

图2-7 订单业务设计

管理员管理流程:

img

图2-8 管理员管理

2.4 系统数据库设计

2.4.1 数据库概念模型设计

img

图2-9 E-R图

2.4.2数据库逻辑结构设计

表2-1 category表结构

Column Name Date Type Width 空值情况
Cid varChar 50 主关键字
Cname varChar 20 默认为空

表2-2 orderitem表结构

Column Name Date Type Width 空值情况
itemid varChar 50 主关键字
count int 11 可为空
subtotal double 0 可为空
pid varchar 50 可为空
oid varchar 50 可为空

表2-3 order表

Column Name Date Type Width 空值情况
oid varChar 50 主关键字
ordertime datetime 0 可为空
total double 0 可为空
state int 11 可为空
address varchar 30 可为空
name varchar 20 可为空
telephone varchar 20 可为空
uid varchar 50 可为空

表2-4 product表

Column Name Date Type Width 空值情况
pid varChar 50 主关键字
pname Varchar 20 可为空
Market_price double 0 可为空
Shop_price double 0 可为空
pimage varchar 30 可为空
pdate date 20 可为空
Is_hot int 20 可为空
pdesc varchar 255 可为空
pflag int 11 可为空
cid varchar 50 可为空

表2-5 user表

Column Name Date Type Width 空值情况
uid varChar 50 主关键字
username Varchar 20 可为空
password Varchar 20 可为空
name varchar 20 可为空
email varchar 30 可为空
telephone varchar 20 可为空
birthday date 0 可为空
sex varchar 10 可为空
state int 11 可为空
code varchar 50 可为空

2.4.3 数据库关系设计

img

图2-10 数据库关系图

3 系统详细设计

3.1 系统开发及运行环境

3.1.1 软件环境

运行环境:Windows操作系统下eclipse

开发语言:JavaWeb

数据库:MySQL,redis

3.1.2 硬件环境

阿里云服务器。

3.2 系统采用的关键技术

3.2.1页面显示逻辑与业务逻辑相分离

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

3.2.2数据库连接与访问

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。

3.2.3 Ajax异步校验

通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。

3.3 系统框架的实现

本项目采取MVC设计模式,分为model,view,controler三层。本项目包含dao,domain,service,web,utils五大包。

其中web包中包含各种servlet类和前端jsp进行交互,及view层。

Service为业务逻辑层,控制信息的权限以及信息在数据库与前端的交互,及controler层。Dao中主要负责与数据库进行交互,通过各种sql获取或添加信息到数据库,及model层。

Domain为基本类,共三大层创建对象进行层与层间的信息交互,作为信息载体的集合而存在。

Utils包中包含各种工具,例如数据库中的date类型需要string进行转换,或者id的生成,这些工具均包含于utils包中。

3.3.1 主要的类与接口

表3-1 JSP清单

Jsp 说明
admin/home.jsp 管理员界面
index.jsp 主界面
head.jsp 头界面
footer.jsp 尾界面
Product_list.jsp 商品栏界面
Product_info.jsp 单项商品信息界面
order_list.jsp 订单栏界面
order_info.jsp 订单项界面
cart.jsp 购物车界面
login.jsp 登陆界面
register.jsp 注册界面

表3-2 MVC模式清单

Servlet Service Dao Utils Domain
AutoLoginFilter AdminService AdminDao BeanFactory Cart
ActiveServlet ProductService ProductDao CommonsUtils CartItem
AdminServlet UserService UserDao DataSourceUtils Category
BaseServlet AdminServiceImpl JedisPoolUtils Order
CallbackServlet MailUtils OrderItem
PrdocutServlet MD5Utils PageBean
RegisterServlet PaymentUtil Product
UserServlet User

3.3.2 系统主要配置文件

c3p0-config.xml负责数据库连接配置。

redis.properties负责redis端口属性配置。

Bean.xml配置AdminServiceImpl的清单。

Web.xml配置jsp清单。

3.4 具体功能模块的实现

3.4.1前台分类信息展示

在head.jsp中有以下js代码:

img

图3-1 主页head栏

通过Ajax方式,首先访问CategoryServlet中的findCategory()方法,查询并以json格式返回Category的List集合db.cname即是最终导航栏显示的分类信息。

点击某一个分类后,会访问ProductServlet中的findPage()方法,传递当前页数:1和分类ID:cid。

3.4.2分类商品的分页展示

img

图3-2 分类商品首页图

Dao层查询每页显示的数据(select * from product where cid = ? limit ?,?),Service层调用Dao后再进行条数页数的设置并封装进javabean,返回给servlet。

Servlet中的findPage()方法:

首先获取分类的ID:String cid = request.getParameter(“cid”);

然后获取当前页数:

int pageNumber =Integer.parseInt(request.getParameter(“pageNumber”));

之后设定每页显示的条数,带着参数调用service。将返回的PageBean对象和分类ID存储,供jsp页面使用。

Service层的findPage()方法:

List list = pd.findPage(cid,pageNumber,pageSize);

封装的每页显示数据,按总条数和总页数进行封装。然后pageBean按每页显示的数据封装数据。

Servlet将pagebean存到request域中后,在jsp页面通过jstl遍历展示商品信息:

img

图3-3 产品分类显示

img

图3-4 产品分类jsp代码

3.4.3单个商品详情

在商品列表页面有:

<ahref=”${pageContext.request.contextPath}/product?method=productList&cid=${cid }¤tPage=${currentPage}”>

这是定义在每个商品图片上的超链接,点击后访问ProductServlet中的findBypid()方法,查询单个商品的详情。

img

图3-5 产品单件商品信息页面

3.4.4最新和热门商品展示

首先,每个商品有一个是否热门属性和一个上架时间属性。加载主页面时,会从数据库中读取is_hot为1的所有商品作为热门商品,并加载时间最近的商品作为最新商品。href为${pageContext.request.contextPath}/product?method=productInfo&pid=${hotPro.pid}。项目运行后直接访问ProductServlet中的findByNew()方法,查询最新最热商品信息,然后跳转到/jsp/index.jsp页面进行展示。

img

图3-6 热门商品展示

img

图3-7 最新商品展示

4 系统测试

4.1 系统测试方法

测试方法采用了边界值,场景分析,等价类,用jmeter进行接测和压测。

4.2 系统测试用例

表4-1 系统测试

测试功能 测试用例序号 测试样例
按类别查询商品首页 1 直接查询
分页展示分类商品 2 按种类添加删除商品信息
单个商品信息校验 3 修改部分商品信息
最热与最新商品展示 4 修改最热属性以及日期

4.3 系统测试结果

表4-2 测试结果

测试用例序号 测试结果
1 成功
2 成功
3 成功
4 成功

5 总结

5.1 系统工作总结

​ 我们这次首先应用到了MVC框架一开始使用的时候还有点生疏,但是在熟悉了以后,MVC框架的优点现了出来,它把前后台分开进行处理,我们在写后台逻辑的时候不需要考虑前端网页的布局,在写前端网页的时候也不需要在页面中插入后端的业务逻辑,这样让整个开发的过程变得十分明确,包括在查看源码的时候也不会眼花缭乱,当代码发生错误时,调试起来也能够快速的发现错误点,这是相较于之前没有框架使用的时候所没有的优越之处。同时,我们这次还用了C3P0的数据库池连接,它的优势之处就是比原本单纯的JDBC连接更加快捷,速度更快了。

5.2 存在的不足及改进

本系统由于涉及到支付功能,而支付又涉及到现金交易,因此该部分一直没有实现,经查阅资料了解到第三方支付平台的存在,但目前由于第三方支付平台账号问题目前支付功能具体还没有实现。之后会陆续对该部分进行改进。


纸短情长啊文章结束了但我们的故事还在继续
坚持原创技术分享,您的支持将鼓励我继续创作!