系统功能需求

    1.后台管理子系统
    后台管理子系统要求管理员登录成功后,才能对商品进行管理,包括添加商品、查询商品、修改商品以及删除商品。除商品管理外,管理员还需要对商品类型、注册用户以及用户的订单等进行管理。
    2.电子商务子系统
    1)非注册用户
    非注册用户或未登录用户具有的功能如下:浏览首页、查看商品详情以及搜索商品的功能。
    2)用户
    成功登录的用户除具有未登录用户具有的功能外,还具有购买商品、查看购物车、收藏商品、查看订单、查看收藏以及查看用户个人信息的功能。
系统模块划分

 

 

 

 

数据库设计

 

 

系统管理
添加相关依赖

    新建一个基于Thymeleaf的Spring Boot Web应用eBusiness,在eBusiness应用中开发本系统。除了STS快速创建基于Thymeleaf的Spring Boot Web应用自带的spring-boot-starter-thymeleaf和spring-boot-starter-web依赖外,还需要向eBusiness应用的pom.xml文件中添加上传文件依赖commons-fileupload、MyBatis与Spring整合依赖mybatis-spring-boot-starter以及MySQL连接器依赖。
HTML页面及静态资源管理

    系统由后台管理和电子商务两个子系统组成,为了方便管理,两个子系统的HTML页面分开存放。在src/main/resources/templates/admin目录下存放与后台管理子系统相关的HTML页面;在src/main/resources/templates/user目录下存放与电子商务子系统相关的HTML页面;在src/main/resources/static目录下存放与整个系统相关的BootStrap及jQuery。
1.后台管理子系统

管理员在浏览器的地址栏中输入http://localhost:8080/eBusiness/admin/toLogin访问登录页面,登录成功后,进入后台查询商品页面(selectGoods.html)

2.电子商务子系统

注册用户或游客在浏览器的地址栏中输入http://localhost:8080/eBusiness可以访问电子商务子系统的首页(index.html)
配置文件

server.servlet.context-path=/eBusiness
#数据库地址
spring.datasource.url=jdbc:mysql://localhost:3306/shop?characterEncoding=utf8
#数据库用户名
spring.datasource.username=root
#数据库密码
spring.datasource.password=root
#数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#设置包别名(在Mapper映射文件中直接使用实体类名)
mybatis.type-aliases-package=com.ch.ebusiness.entity
#告诉系统在哪里去找mapper.xml文件(映射文件)
mybatis.mapperLocations=classpath:mappers/*.xml
#在控制台输出SQL语句日志
logging.level.com.ch.ebusiness.repository=debug
#关闭Thymeleaf模板引擎缓存(使页面热部署),默认是开启的
spring.thymeleaf.cache=false
#上传文件时,默认单个上传文件大小是1MB,max-file-size设置单个上传文件大小
spring.servlet.multipart.max-file-size=50MB
#默认总文件大小是10MB,max-request-size设置总上传文件大小
spring.servlet.multipart.max-request-size=500MB
组件设计

管理员登录权限验证

    从系统分析得知,管理员成功登录后,才能管理商品、商品类型、用户、订单等功能模块。因此,本系统需要对这些功能模块的操作进行管理员登录权限控制。在com.ch.ebusiness.controller.admin包中创建AdminBaseController控制器类,该类中有一个@ModelAttribute注解的方法isLogin。isLogin方法的功能是判断管理员是否已成功登录。需要进行管理员登录权限控制的控制器类继承AdminBaseController类即可,因为带有@ModelAttribute注解的方法首先被控制器执行。
前台用户登录权限验证

    从系统分析得知,用户成功登录后,才能购买商品、收藏商品、查看购物车、我的订单以及个人信息。与管理员登录权限验证同理,在com.ch.ebusiness.controller.before包中创建BeforeBaseController控制器类,该类中有一个@ModelAttribute注解的方法isLogin。isLogin方法的功能是判断前台用户是否已成功登录。需要进行前台用户登录权限控制的控制器类继承BeforeBaseController类即可。
验证码

1.创建产生验证码的控制器类
    在com.ch.ebusiness.controller.before包中,创建产生验证码的控制器类ValidateCodeController

2.使用验证码
    在需要验证码的HTML页面中,调用产生验证码的控制器显示验证码,示例代码片段如下:
<td>
    <input type="text" class="form-control"
        placeholder="请输入验证码" th:field="*{code}"/>
</td>
<td>
    <img th:src="@{/validateCode}" id="mycode">
</td>
<td>
    <a href="javascript:refreshCode()">看不清换一张</a>
</td>
统一异常处理

    系统对未登录异常、数据库操作异常以及程序未知异常进行了统一异常处理。

1.创建未登录自定义异常
创建未登录自定义异常NoLoginException。
2.创建统一异常处理类
使用注解@ControllerAdvice和@ExceptionHandler创建统一异常处理类GlobalExceptionHandleController。使用注解@ControllerAdvice的类是一个增强的Controller类,在增强的控制器类中使用@ExceptionHandler注解的方法对所有控制器类进行统一处理异常。
@ControllerAdvice
public class GlobalExceptionHandleController {
    @ExceptionHandler(value=Exception.class)
    public String exceptionHandler(Exception e, Model model) {
        String message = "";
        //数据库异常
        if (e instanceof SQLException) {
            message = "数据库异常";
        } else if (e instanceof NoLoginException) {
            message = "未登录异常";
        } else {//未知异常
            message =  "未知异常";
        }
        model.addAttribute("mymessage",message);
        return "myError";
    }
}
工具类

  本系统使用的工具类有两个:MD5Util和MyUtil。

后台管理子系统的实现

管理员登录
类型管理
添加商品
查询商品
修改商品
删除商品
查询订单
用户管理
安全退出
前台电子商务子系统的实现

导航栏及首页搜索
推荐商品及最新商品
用户注册
用户登录
商品详情
收藏商品
购物车
下单
个人信息
我的收藏
我的订单