仿小米商城网: 项目启动

本文档介绍了仿小米商城项目的启动,包括项目背景、主要功能、数据库设计和项目架构。项目采用JavaWeb技术,三层架构设计,前端使用HTML,后端使用Servlet、Filter和DAO。开发环境涉及Java、MySQL、Druid和Fastjson等,同时讨论了用户、商品、购物车和订单等模块的数据库表设计。

JavaWeb - 仿小米商城 (1) : 项目启动

1.案例引述

网上商城介绍

网上商城类似于现实生活中的商店,利用电子商务的各种手段,达成买到卖的物品的过程的虚拟商店. 从而减少中时间环节,消除运输成本和代理中间的差价,造就对普通消费和加大市场带来巨大的发展空间,尽可能的还消费者的利益.

商城类别

英文类别介绍典型代表
B2BBusiness To Business商家对商家阿里巴巴
B2CBusiness To Customer商家爱对顾客销售京东商城
C2CCustomer To Customer 客户对客户百度有啊
O2OOnline TO Online线上线下相结合象屿商城

商城常见模块

后台常见功能模块
。商品管理:包括后台商品库存管理、上货、出货、编辑管理和商品分类管理、商品品牌管理等。。订单管理:在线订单程序,使消费者能够顺利的通过WEB在线的方式,直接生成购买订单。
。商品促销:一般的购物系统多有商品促销功能,通过商品促销功能,能够迅速的促进商城的消费积极性。
。支付方式:即通过网上钱包、电子支付卡。进行网上资金流转换的业务流程;国内主流支付方式包括:支付宝、财富通、网银在线等。还有部分网上商城支持货到付款,如京东商城、第九大道、鹏程万里贸易商城。
。配送方式:购物系统集成的物流配送方式,从而方便消费者对物流方式进行在线选择。如:EMS、顺丰等等。。会员模块:在购物系统中,集成会员注册是吸引会员进行二次购买和提升转换率的方式。
前端界面功能模块
.模板风格自定义:即通过系统内置的模板引擎,可以方便的通过后台可视化编辑,设计出符合自身需求的风格界面。
。商品多图展示:随着电子商务的发展商品图片成为吸引消资首的弟一妥系,多图展小即据从EI/cy,m消费者的购物欲望。
。自定义广告模块:内置在系统中的广告模块,网站管理员能够顺利的通过操作就可以在前端界面中添加各种广告图片。
。商品展示:通过前端界面,以标准的或者其他个性化的方式向用户展示商品各类信息,完成购物系统内信息流的传递。
。购物车:用户可对想要购买的商品进行网上订购,在购物过程中,随时增删商品。

2. 小米商城项目介绍

开发环境
分类名称语种
操作系统开发在Windows10, 上线在Linux CentOs7.0简体中文
数据库平台MySQL5.7+
应用服务器Tomcat8+
Java开发工具idea2020+
框架JavaEE5+
项目名称小米商城 mi_shop
主要功能
序号模块主要功能
1商品显示模块分页显示所有商品查看单个商品详细信息搜索商品
2用户模块新用户注册用户登录退出
3购物车模块加入商品到购物车修改所购商品数量
4订单模块提交订单并显示订单信息用户确认后生成订单用户查看历史订单
5支付莫夸完成在线支付功能
6收获地址管理收获地址
7后台模块主要实现商品的增删改查

在这里插入图片描述

数据库表设计说明

用户模块涉及的表

用户模块主要涉及到用户登录和注册功能以及地址选择功能

所以用户涉及模块涉及两张用户表和

**用户表:tb_user **

存储用户信息标红会员和管理员

字段类型主键约束备注
idint()自增主键
usernamevarchar(20)not null用户昵称
passwordvarchar(32)not null密码使用md5加密
emailvarchar(50)not null邮箱
gendervarchar(50)性别
flagint默认值0状态标识:0未激活,1激活,2无效
roleint角色:0管理员 , 1 会员
codevarchar(100)激活码
`tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(32) NOT NULL,
  `email` varchar(50) NOT NULL,
  `gender` varchar(50) NOT NULL,
  `flag` int(11) DEFAULT NULL,
  `role` int(11) DEFAULT NULL,
  `code` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

业务分析:

1.注册后的用户必须激活后才能登录

2.注册后生成一个激活连接给用户进行激活操作

收货地址表:tb_address

存储用户的收获地址

字段类型主键约束备注
idint()自增主键
detailvarchar(200)not null详细地址
namevarchar(20)not null收件人姓名
phonevarchar(11)not null手机号
uidint外键用户表id
levelint地址顺序1是最高
`tb_address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `detail` varchar(200) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `uid` int(11) NOT NULL,
  `level` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_address_id` (`uid`),
  CONSTRAINT `fk_address_id` FOREIGN KEY (`uid`) REFERENCES `tb_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

业务分析:

1.用户可以有多个收件地址,详细地址不能相同

2.地址排序,通过level的设置排序,而且用户可以设置这个数值

商品模块涉及的表

商品模块 可以对商品的类别进行管理

对商品信息进行管理

商品类别表tb_goods_type

用于管理上商品类别

字段类型主键约束备注
idint自增主键
namevarchar(50)not null类型名称
levelintnot null类型级别123
Parentintnot null上一级的序号,默认是0
CREATE TABLE `tb_goods_type` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `level` int(11) DEFAULT NULL,
  `Parent` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

商品表tb_goods

对商城商品管理的数据表

字段类型主键约束备注
idint自增主键
namevarchar(100)not null商品名
pubdatedate上架时间
picturevarchar(255)not null商品图片
pricedecimal(8,2)价格
starint评分
introtext商品详情
typeidint外键商品类型
gnumint默认100商品数量(库存)
gstartint默认0商品状态:0上架,1下架
CREATE TABLE `tb_goods` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `pubdate` date DEFAULT NULL,
  `picture` varchar(255) NOT NULL,
  `price` decimal(8,2) NOT NULL,
  `star` tinyint(4) NOT NULL DEFAULT '0',
  `intro` text,
  `typeid` int(11) NOT NULL,
  `gnum` int(11) DEFAULT NULL,
  `gstart` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_typeid` (`typeid`),
  CONSTRAINT `fk_typeid` FOREIGN KEY (`typeid`) REFERENCES `tb_goods_type` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

业务分析:

1.商品的上架 只能上架不能下架 商品数量(库存) 这个设计没有

2.评分 , 可以通过评分进行排序

3.通过商品名称或类型进行搜索

购物车模块涉及表

**购物车表tb_cart **

字段类型主键约束备注
idint外键用户序号
pidint外键商品序号
Numint购买数量(要减少商品库存数)
moneyint金额
CREATE TABLE `tb_cart` (
  `id` int(11) NOT NULL,
  `pid` int(11) NOT NULL DEFAULT '0',
  `Num` int(11) DEFAULT NULL,
  `money` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`,`pid`),
  KEY `fk_cart_pid` (`pid`),
  CONSTRAINT `fk_cart_id` FOREIGN KEY (`id`) REFERENCES `tb_user` (`id`),
  CONSTRAINT `fk_cart_pid` FOREIGN KEY (`pid`) REFERENCES `tb_goods` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

订单模块涉及表

订单模块涉及的表有订单表和订单详情表

**订单表tb_order **

字段类型主键约束备注
idvarchar(100)序号
uidint外键用户序号
moneydecimal(8,2)订单总金额
statusvarchr(11)订单状态:0未支付,1支付失败,2支付成功,3发货,4到货,5评价
timedatetime订单时间
aidint外键收货地址序号
CREATE TABLE `tb_order` (
  `id` varchar(100) NOT NULL,
  `uid` int(11) DEFAULT NULL,
  `money` decimal(8,2) DEFAULT NULL,
  `status` varchar(10) DEFAULT NULL,
  `time` datetime DEFAULT NULL,
  `aid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_order_uid` (`uid`),
  KEY `fk_order_aid` (`aid`),
  CONSTRAINT `fk_order_aid` FOREIGN KEY (`aid`) REFERENCES `tb_address` (`id`),
  CONSTRAINT `fk_order_uid` FOREIGN KEY (`uid`) REFERENCES `tb_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

订单详情表tb_orderdetail

字段类型主键约束备注
idint自增
pidint外键商品序号
Oidvarchar(100)外键订单编号
numint数量
Moneydecimal(8,2)金额
CREATE TABLE `tb_orderdetail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Oid` varchar(100) DEFAULT NULL,
  `pid` int(11) DEFAULT NULL,
  `num` int(11) DEFAULT NULL,
  `Money` decimal(8,2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_order_pid` (`pid`),
  KEY `fk_order_id` (`Oid`),
  CONSTRAINT `fk_order_id` FOREIGN KEY (`Oid`) REFERENCES `tb_order` (`id`),
  CONSTRAINT `fk_order_pid` FOREIGN KEY (`pid`) REFERENCES `tb_goods` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4.项目搭建

项目在开发过程中采用经典的三层架构(Web - Service - Dao),且前后端分离。因此,一些实时的前端渲染不再使用 JSP 实现,而通过 AJAX 实现。各层技术选型归纳如下

4.1Web 层

Servlet:前端控制程序
HTML:前端页面(前后端分离架构,不适用JSP)
Filter:过滤器
BeanUtils:数据封装
fastson:json 序列化工具,前后端数据通用传输格式

4.2Service 层

JavaMail:Java 邮件工具

4.3 Dao 层

mysql:关系数据库
druid:数据库连接池
dbutils:数据库简易的工具框架

5 代码文件结构

代码文件结构如下图,以下对 java 文件夹下的不同目录中的代码功能做简要介绍

在这里插入图片描述

5.1domain

com.mi.shoping.domain中定义具体的 Bean 封装类,这些类中的私有 fields 与数据库中对应表的字段一一对应。

用户类:

在这里插入图片描述

收获地址类:

在这里插入图片描述

购物车类:

在这里插入图片描述

商品类:

在这里插入图片描述

商品分类

在这里插入图片描述

订单类

在这里插入图片描述

订单详情类

在这里插入图片描述

3.2 dao

com.mi.shoping.dao和 com.mi.shoping.mpl 对应项目架构中的 Dao 层,dao 中定义的数据库操作接口,dao.impl 中定义具体的实现类。

在这里插入图片描述
在这里插入图片描述

3.3 service

com.mi.shoping.service 和 com.mi.shoping.service.impl 对应项目架构中的 Service 层。service 中定义业务逻辑接口,service.impl 中定义具体的业务逻辑实现类,根据不同的业务需求调用不同的 dao 实现类对象对数据库做 CRUD。

在这里插入图片描述

3.4 web

com.mi.shoping.web.servlet 和 com.mi.shoping.web.filter 对应项目架构中的 Web 层。根据不同的 Web 应用定义相应的 Servlet 代码。项目中依据不同的执行实体分别定义了对应的 Servlet 类。后续开发还将抽取 Servlet 中的通用功能,并单独封装为一个抽象类 BaseServlet,并作为其它 Servlet 的父类。使得代码结构更加整洁,便于维护和扩展。

BaseServlet类

package com.mi.shoping.web.servlet;

import com.mi.shoping.util.Constants;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;

/**
 * 基础的Servlet 用来给其他的控制器继承的
 */
public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求参数中的标识
        String methodStr = req.getParameter(Constants.TAG);
        //如果方法中moth当中没有获取到标识 跳转到首页
        if (methodStr==null && methodStr.equals("")){
            methodStr = Constants.INDEX;
        }
        Class clazz = this.getClass();
        try {
            Method method = clazz.getMethod(methodStr, HttpServletRequest.class, HttpServletResponse.class);
            //执行对应的方法
            Object result = method.invoke(this, req, resp);
            //集中处理返回的响应
            if (result!=null){
                String str = (String) result;
                //转发
                if (str.startsWith(Constants.FORWARD)){
                    //http://localhost:8080/forward:login.do
                    String path = str.substring(str.indexOf(Constants.FLAG)+1);
                    req.getRequestDispatcher(path).forward(req,resp);
                }else if (str.startsWith(Constants.REDIRECT)){
                    //重定向操作
                    //http://localhost:8080/user.do?action=rediect:http://www.baidu.com
                    String path = str.substring(str.indexOf(Constants.INDEX)+1);
                    resp.sendRedirect(path);
                }else {
                    //既不是转发也不是重定向
                    resp.getWriter().println(str);
                }
            }else {
                //TODO
            }
        } catch (Exception e) {
            e.printStackTrace();
            req.getSession().setAttribute("Msg","程序异常请稍后再试");
            //重定向到错误页面
            resp.sendRedirect("/erro.html");
        }
    }
    public String index(HttpServletRequest request,HttpServletResponse response){
        return Constants.FORWARD+"/index.html";
    }
}

UserServlet类

package com.mi.shoping.web.servlet;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(value = "/user.do")
public class UserServlet extends BaseServlet{
    /**
     * 用户登录
     * @param request
     * @param response
     * @return
     */
    public String login(HttpServletRequest request, HttpServletResponse response){
        //http://localhost:8080/user.do?action=login

        return "TODO这是用户登录功能";
    }
}

启动Tomcat查看运行效果,如果默认弹出首页则表示控制器成功

输入地址//http://localhost:8080/user.do?action=login能看到输出返回TODO这是用户登录功能字符串,表示成功

`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值