你的位置:首页 > Java教程

[Java教程]网上书城+源码


  经过一段时间的Java Web基础知识的学习,为了将整个知识点串联起来,自己写了一个简单的网上书城小项目。整个项目架构比较简单,适合像我这种Java Web初学者来学习参考,项目名称web_bookstore,是基于servlet/jsp和html/css/js实现的。

  整个工程代码已push到Git,详见地址:web_bookstore。

整体架构

  该网上书城项目分为前台和后台两大部分,前台部分包括会员注册、会员登录、购买书籍、添加购物车、结算等功能,后台部分包括查看会员、查看商品、添加商品等功能。有些功能模块还未添加,后续需要的话可以再添加上去。整体架构框图如下所示:

代码流程梳理

  通过看整体架构框图可知,整个项目各个模块之间关系还是挺清晰的,下面先来一张web_bookstore工程整体图:

src源码包说明:

  • admin包:主要是一些管理员有关的Servlet控制逻辑
  • dao包:数据表类和数据表操作类
  • demo包:自己写的一些测试用例
  • service包:会员相关的一些Servlet控制逻辑
  • util包:一些脚手架程序
  • web.filter:一些拦截器,比如控制网页编码等

WebContent文件说明:

  • admin:管理员相关jsp页面
  • client:会员相关jsp页面
  • css:全局css文件
  • img/picture:存放一些图片
  • js:一些js程序
  • util:存放一些页头什么的

  工程整体大致就是这些,下面分模块大致梳理一下流程。

数据表

  一般项目首先会设计数据表,那咱们就先说说数据表创建^_^。整个项目使用了5个数据表,分别是用户表、商品表、订单表、订单项表(订单中单个商品项信息)、消息表。具体的表结构和创建表SQL语句见源码中的db.sql文件。下面是整个个数据库的图示:

会员注册

  会员需要先注册后才能使用网上书城添加购物车和结算等功能,注意:会员注册后需要管理员激活该会员后才能登录。注册界面如下所示:

会员登录

  会员注册成功后,就可以直接登陆到网上书城了,登录界面如下所示。注意,如果是管理员登录的话,会跳转到后台管理员主页;如果是普通会员的话就会跳到会员主页。

  会员成功登陆后,服务端会生成对应的Cookie,并写入请求响应中,Cookie格式为user=user_id形式,user_id为用户注册后生成的一个对应id。

  接着就会跳转到商品主页上去,商品主页页面如下所示,目前商品表中只有2件商品:(

购物车流程

  在商品下面点击加入购物车后就会将该商品添加到购物车中。

  注意:购物车是以Session形式保存在服务端的,因为网上书城是多用户登录的,如何保证多个用户的Session不冲突呢,也就是购物车是如何实现的呢?一个用户的购物车在服务端对应一个Session,该Session对应的属性名字为cart+user_id,user_id也就是用户登录成功写入到Cookie的那个user值,因为cart+user_id是和用户一一对应的,所以这样就保证了所有用户的Session不会冲突,对应的源码在AddCarServlet逻辑中,如下所示:

// 先判断用户是否登录Cookie cookie = ServletUtils.getCookie(request, "user");if (cookie == null) {  response.getWriter().println("抱歉,你当前还未登录,2秒后调到登录页面");  response.addHeader("refresh", "2;url=" + request.getContextPath() + "/client/login.jsp");  return;}// 获取购物车对象HttpSession session = request.getSession();Map<Product, Integer> cart = (Map<Product, Integer>) session.getAttribute("cart" + cookie.getValue());if (cart == null) {  cart = new HashMap<Product, Integer>();}

商品结算流程

  在购物车页面点击现在结账后,就会跳转到提交订单页面中了。

  填写收货地址、收货人、电话等信息后,点击提交订单,就到了计算页面了,然后输入支付宝账号和密码后,商品购买流程就结束了。

 

管理员流程

  在管理员页面如果填写的是管理员账号的话,就直接到管理员管理页面了,整图页面如下所示:

  目前管理员功能有限,只有添加商品、查看所有商品、查看所有用户等功能,后续可以添加上去,这里对照着源码大致就明白了,就不具体说明了。

  到此,整体项目流程已经梳理完毕,具体请点击web_bookstore查看源码。

参考连接

  1、https://github.com/luoxn28

  2、Java Web之会话技术

  3、Java Web之Servlet技术