JavaWeb - 小米商城网 : 项目启动

1.案例引述

商品英文类别

英文类别 介绍 典型代表
B2B Business To Business , 商家对商家 B2B典型代表有阿里巴巴 , 中国制造网 , 慧聪等 , 主要从事批发业务
B2C Business To Customer , 商家对顾客销售 B2C电信代表有当当网 , 京东商城 , 中国购 , 凡客诚品 , 稀货街等
C2C Customer To Customer , 客户对客户 C2C典型代表有淘宝 , 鸟差 , 易趣 , 拍拍 , 百度有啊等
O2O Online To Offline , 线上线下相结合 O2O典型代表有象屿商城

商城常见模块

后台常见功能模块
商品管理 包括后台商品库存管理、上货、出货、编辑管理和商品分类管理、商品品牌管理等
订单管理 在线订单程序,使消费者能够顺利的通过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 后台模块 主要实现商品的增删改查

网站流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TVZC6a82-1652178523600)(网站流程图.png)]

3.数据库表设计说明

用户模块涉及的表

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

所以 , 用户模块设计两张用户表和地址表

用户表 tb_user

存储用户信息包含会员和管理员

字段 类型 主键 约束 备注
id int 自增 主键
username varchar(20) not null 用户昵称
password varchar(64) not null 密码 使用md5加密
email varchar(50) not null 邮箱
gender varchar(50) 性别
flag int 默认值0 状态标记: 0未激活 1激活 2无效
role int 角色: 0管理员 1会员
code varchar(100) 激活码
CREATE TABLE `tb_user` (`id` int NOT NULL AUTO_INCREMENT,`username` varchar(20) NOT NULL,`password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`email` varchar(50) NOT NULL,`gender` varchar(50) NOT NULL,`flag` int DEFAULT NULL,`role` int DEFAULT NULL,`code` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3;

业务分析

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

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

收货地址表 tb_address

储存用户的收货地址

字段 类型 主键 约束 备注
id int 自增 主键
detail varchar(200) not null 详细地址
name varchar(20) not null 收件人姓名
phone varchar(11) not null 手机号
uid int 外键 用户表id
level int 地址顺序 1是最高
CREATE TABLE `tb_address` (`id` int NOT NULL AUTO_INCREMENT,`detail` varchar(200) NOT NULL,`name` varchar(20) DEFAULT NULL,`phone` varchar(20) DEFAULT NULL,`uid` int NOT NULL,`level` int 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=utf8mb3;

业务分析:

1.一个用户可以有多个收件地址, 详细地址不能重复

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

商品模块涉及的表

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

对商品信息进行管理

商品类别表 tb_goods_type

用于管理商品类别

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

商品表 tb_goods

对商城商品管理的数据库

字段 类型 主键 约束 备注
id int 自增 主键
name varchar(100) not null 商品名
pubdate date 上架时间
picture varchar(255) not null 商品图片
price decimal(8,2) 价格
star int 评分
intro 商品详情
typeid int 外键 商品类型id
gunm int 默认为100 商品数量[库存]
gstate int 默认为0 商品状态: 0上架 1下架
CREATE TABLE `tb_goods` (`id` int 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 NOT NULL DEFAULT '0',`intro` text,`typeid` int NOT NULL,`gunm` int DEFAULT NULL,`gstate` int 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=utf8mb3;

业务分析

1.商品只能上架 没有下架功能 商品数量[ 库存 ] 这个 设计中没有

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

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

… …

购物车模块涉及的表

购物车模块有购物车表

购物车表 tb_cart

字段 类型 主键 约束 备注
id int 自增 主键
pid int 外键 商品id
num int 购买数量 [要减少库存数]
money decimal(8,2) 订单金额
CREATE TABLE `tb_cart` (`id` int NOT NULL,`pid` int NOT NULL DEFAULT '0',`Num` int DEFAULT NULL,`money` decimal(8,2) 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=utf8mb3;

订单模块涉及的表

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

订单表 tb_order

字段 类型 主键 约束 备注
id
uid int 外键 用户id
money decimal(8,2) 订单总金额
status int 订单状态: 0未支付 1支付失败 2支付成功 3发货 4到货 5评价
time datetime 订单时间
aid int 外键 收货地址id
CREATE TABLE `tb_order` (`id` varchar(100) NOT NULL,`uid` int DEFAULT NULL,`money` decimal(8,2) DEFAULT NULL,`status` int DEFAULT NULL,`time` datetime DEFAULT NULL,`aid` int 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=utf8mb3;

订单详情表 tb_orderdetail

字段 类型 主键 约束 备注
id int 自增 主键
Oid varchar(100) 外键 订单编号
pid int 外键 商品序号
num int 数量
money decimal(8,2) 金额
CREATE TABLE `tb_orderdetail` (`id` int NOT NULL AUTO_INCREMENT,`Oid` varchar(100) DEFAULT NULL,`pid` int DEFAULT NULL,`num` int 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=utf8mb3;

4.web项目搭建

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

4.1 Web 层

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

4.2 Service 层

JavaMail:Java 邮件工具

4.3 Dao 层

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

5.代码文件结构

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30NivE17-1652178523602)(5.png)]

5.1 domain

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

用户收货地址

购物车

商品

商品类别

订单

订单详情

用户对象

5.2 dao

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

5.3 service

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

5.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类  用来给其他的控制器继承** @avthor HuangJun* @date 2022/5/10 15:07*/public class BaseServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求参数(标识符)String methodStr = req.getParameter(Constants.TAG);//如果method当中没有获取到标识符 就跳转到首页(标识符异常处理)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/user.do/action=forward:login.doString 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=redirect:http://www.baidu.comString path = str.substring(str.indexOf(Constants.INDEX) + 1);resp.sendRedirect(path);} else {//既不是转发也不是重定向resp.getWriter().print(str);}}} catch (Exception e) {e.printStackTrace();req.getSession().setAttribute("Msg","程序异常, 请稍后再试");resp.sendRedirect("/error.html");}}public String index(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {return Constants.FORWARD + "/index.html";}
}

UserServlet

package com.mi.shoping.web.servlet;import com.mi.shoping.util.Constants;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @avthor HuangJun* @date 2022/5/10 15:41*/
@WebServlet("/user.do")
public class UserServlet extends BaseServlet {/*** 用户登录** @param req* @param resp* @return* @throws ServletException* @throws IOException*/public String login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//http://localhost:8080/user.do?action=loginreturn "TODO 这是用户登录功能";}
}

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

输入地址 http://localhost:8080/user.do?action=login 输出内容则表示成功

JavaWeb - 小米商城网 - 项目启动相关推荐

  1. JavaWeb 项目启动时,后台开启一个线程的方法

    原文链接:http://blog.csdn.net/it_wangxiangpan/article/details/7168286 JavaWeb 服务启动时,在后台启动加载一个线程. 目前,我所掌握 ...

  2. JavaWeb项目启动时,tomcat会启动两次的原因(之一)和解决方案

    JavaWeb项目启动时,tomcat会启动两次的原因(之一)和解决方案 参考文章: (1)JavaWeb项目启动时,tomcat会启动两次的原因(之一)和解决方案 (2)https://www.cn ...

  3. idea创建web项目运行报404错误_IDEA JavaWeb项目启动运行后出现404错误的解决方法...

    404这个错误真的是一言难尽!不过大多是配置文件出错,认真修改还是可以的 1.web.xml配置错误: 默认首页没有写的,在web.xml添加一个就行(前提是你有jsp页面,名字不要写错): 比如这个 ...

  4. JavaWeb - 仿小米商城网(2) 用户注册

    JavaWeb - 仿小米商城网(2): 用户注册 1.业务描述 注册业务旨在收集和管理用户的个人信息,是未来提供个性化服务的基础.相应的前端页面如下方静态H5页面图所示: 网页中提供多个输入框, 并 ...

  5. JavaWeb - 仿小米商城网(3) 登录与退出

    JavaWeb - 仿小米商城网(3) :登录与退出 1 业务描述 接上篇仿小米商城网(2):用户注册,本篇博客将分析和实现用户登录与退出.登录是后台获取当前访客身份的方式,也是提供个性化服务的基础. ...

  6. JavaWeb - 小米商城 :订单支付[沙箱支付]

    JavaWeb - 小米商城 :订单支付[沙箱支付] 1.功能描述 接上篇 JavaWeb - 小米商城:提交订单 订单创建后进入支付界面,整合支付宝沙箱支付.如 以下H5页面所示: 参考的博客:ht ...

  7. 智汇医工 创享未来:国家标准《健康医疗信息安全指南》验证项目启动会成功举办...

    为贯彻落实国家大数据战略,推进健康医疗大数据工作的开展,数据科学研究院于2019年01月19日联合项目申请方--北京清华长庚医院.清华大学软件学院.临床医学院--召开了国家标准<健康医疗信息安全 ...

  8. infor wms 项目启动_全一,企业物流定制专家——企业客户项目管理流程解析

    全一快递自2014年开始尝试业务转型,即由原来单一的快递类服务向"以企业客户需求为导向,为客户提供多元化的产品+服务体验"."致力于提供一站式专业物流解决方案与服务的综合 ...

  9. java项目启动时登录,Java项目启动时报错解决方法

    当前位置:我的异常网» Java Web开发 » Java项目启动时报错解决方法 Java项目启动时报错解决方法 www.myexceptions.net  网友分享于:2013-08-07  浏览: ...

  10. Django打造大型企业官网-项目部署

    Django打造大型企业官网-项目部署 一.准备工作 1.在开发机上的准备工作 1)确认项目没有bug. 2)打开终端,进入虚拟环境,再 cd 到项目根目录下,执行命令:pip freeze > ...

最新文章

  1. mysql init file_mysql中参数--init-file的作用是什么呢?
  2. 底板芯片组与内存映射(Motherboard Chipsets and the Memory Map) 【转】
  3. python ipaddr_python之IP地址或IP段处理模块-ipaddr
  4. ORA-12638: 身份证明检索失败
  5. 学习knex过程中好的参考资料整理
  6. Electron的学习笔记
  7. 人,作为社会的基础单元
  8. 过滤代码中的html标签
  9. 华为的IPsec ×××主模式(MAIN mode)
  10. 数据挖掘十大算法之Apriori算法
  11. CH341A BIOS编程器 预安装成功 但无安装成功
  12. 51超声波测距简易代码
  13. 音频文件压缩大小如何操作?分享一个音频压缩的小技巧
  14. 系统故障等级和故障报告规定
  15. SqlServer 数据库服务器运用
  16. 激活ltsb2016_激活windows10 LTSB 2016
  17. 近期必读的6篇 NeurIPS 2019 的零样本学习(Zero-Shot Learning)论文
  18. 代码生成工具jdbc+freemarker+swing
  19. 戴尔R720系列服务器CPU升级,Dell 服务器R720的CPU列表
  20. Spring Cloud 微服务开放平台接口

热门文章

  1. php strtolower 大写,PHP strtolower()用法及代码示例
  2. 数据库防火墙:数据库防火墙商业化的前提条件
  3. c5 LR is at 对于空指针的定位
  4. Liber 1. 《活着》:人生如逆旅,我亦是行人
  5. 阿里轻量应用服务器搭建ftp服务器
  6. 计算机金钱符号怎么打,电脑键盘上怎么打钱的符号
  7. 可复制的领导力读书笔记-2
  8. block unicast机制
  9. 自动化测试的思考及其工具的设计
  10. java求4位会员卡号之和中奖,日常作业2018.12.25