一. 网上商城
1.1 商城类别
1.2 商城常见模块
- 后台常见功能模块
- 商品管理
- 包括后台商品库存管理, 上货, 出货, 编辑管理和商品分类管理, 商品品牌管理等
- 订单管理
- 在线订单程序, 使消费者能够顺利的通过WEB在线的方式, 直接生成购买订单
- 商品促销
- 一般的购物系统多有商品促销功能, 通过商品促销功能, 能够迅速的促进商城的消费积极性
- 支付方式
- 即通过网上钱包, 电子支付卡, 进行网上资金流转换的业务流程, 国内主流支付方式包括: 微信, 支付宝, 网银等, 还有部分网上商城支持货到付款
- 配送方式
- 购物系统集成的物流配送方式, 从而方便消费者对物流方式进行在线选择, 如顺丰, EMS, 中通, 圆通, 韵达等
- 会员模块
- 在购物系统中, 集成会员注册是吸引会员进行二次购买和提升转换率的方式
- 前端界面功能模块
- 模板风格自定义
- 即通过系统内置的模板引擎, 可以方便的通过后台可视化编辑, 设计出符合自身需求的风格界面
- 商品多图显示
- 随着电子商务的发展, 商品图片成为吸引消费者的第一要素, 多图展示即提供前台多张图片的展示, 从而提升消费者的购物欲望
- 自定义广告模块
- 内置在系统中的广告模块, 网站管理员能够顺利的通过操作就可以在前端页面中添加各种广告图片
- 购物车
- 用户可以把想要购买的商品添加进购物车, 随时增删商品
二. 软件开发流程[重点]
- 软件开发流程即软件设计思路和方法的一般过程, 包括对软件先进行需求分析, 设计软件的功能和实现的算法和方法, 软件的总体结构设计和模块设计, 编码和调试, 程序联调和测试以及编写, 提交程序等一系列操作以满足客户的需求并且解决客户的问题, 如果有更高需求, 还需要对软件进行维护, 升级处理, 报废处理.
2.1 周期和阶段
从管理的角度, 即从业务和经济的角度来看, 软件的生命周期包括四个主要阶段
2.2 开发流程
- 需求分析
- 概要设计
- 详细设计
- 编码
- 测试
- 软件交付
- 验收
- 维护
三. MyShop项目介绍
3.1 开发环境
- 操作系统
- 数据库平台
- 应用服务器
- Java开发工具
- 框架
- 项目名称
3.2 主要功能
- 用户模块
- 商品显示模块
- 分页显示所有商品, 查看单个商品详细信息, 搜索商品
- 购物车模块
- 地址模块
- 订单模块
- 提交订单前先预览订单, 用户确认后生成正式订单, 用户查看历史订单
- 支付模块
- 后台模块
- 主要实现商品的增删改查
四. 数据库设计[重点]
- 数据库设计是指根据用户的需求, 在某一具体的数据库管理系统上, 设计数据库的结构和建立数据库的过程
4.1 PowerDesigner
- PowerDesigner是能进行数据库设计的强大的软件, 是一款开发人员常用的数据库建模工具, 使用它可以分别从概念数据模型(Conceptual Data Model)和物理数据模型(Physical Data Model)两个层次对数据库进行设计
4.1.1 概念数据模型CDM
- 概念数据模型描述的是独立于数据库管理系统(DBMS)的实体定义和实体关系定义
- 在CDM中用来标识实体的是属性(Attribute)
4.1.2 物理数据模型PDM
- 物理数据模型是在概念数据模型的基础山针对目标数据库管理系统的具体化
- PDM的对象: 表(Table) 表中的列(Table Column), 主外键(Primary, Foreign Key), 参照(Reference), 索引(Index), 视图(View)等
- 在PDM中用来表示实体属性的是列(Column)
4.1.3 CDM和PDM对比
- CDM概念数据模型: 描述要存储的实体, 属性, 实体关系
- PDM物理数据模型: 对概念数据库模型进行升级, 将实体转化为具有数据库特性的模型
- 总结: 类似抽象类和实现的关系
4.1.4 数据库设计步骤
4.2 用户模块涉及表
4.2.1 用户表
| create table user |
| ( |
| u_id int not null auto_increment comment '用户实体的主键属性', |
| u_name varchar(20) not null comment '用户账号', |
| u_password varchar(64) not null comment '用户密码', |
| u_email varchar(50) not null comment '用户邮箱', |
| u_sex varchar(4) comment '用户性别', |
| u_status int comment '用户的激活状态0未激活1激活', |
| u_code varchar(64) comment '邮件激活码', |
| u_role int comment '用户0管理员1', |
| primary key (u_id) |
| ) |
| charset = UTF8; |
4.2.2 地址表
| create table address |
| ( |
| a_id int not null auto_increment comment '地址实体', |
| u_id int comment '用户实体的主键属性', |
| a_name varchar(30) comment '地址的收件人', |
| a_phone varchar(14) comment '收件人电话', |
| a_detail varchar(200) comment '收货人详细地址', |
| a_state int comment '0不是默认地址,1是默认地址', |
| primary key (a_id) |
| ) |
| charset = UTF8; |
4.3 商品模块涉及表
4.3.1 商品类别表
| create table type |
| ( |
| t_id int not null auto_increment comment '类别的主键id', |
| t_name varchar(20) comment '类别的名称', |
| t_info varchar(200) comment '类别的描述', |
| primary key (t_id) |
| ) |
| charset = UTF8; |
4.3.2 商品表
| create table product |
| ( |
| p_id int not null auto_increment comment '商品的唯一主键', |
| t_id int comment '类别的主键id', |
| p_name varchar(50) comment '商品名称', |
| p_time date comment '商品上市时间', |
| p_image varchar(100) comment '商品图片路径', |
| p_price decimal(12) comment '商品价格', |
| p_state int comment '商品热门指数', |
| p_info varchar(200) comment '商品描述', |
| primary key (p_id) |
| ) |
| charset = UTF8; |
4.4 购物车模块涉及表
4.4.1 购物车表
| create table cart |
| ( |
| c_id int not null auto_increment comment '购物车的唯一标识', |
| p_id int comment '商品的唯一主键', |
| u_id int comment '用户实体的主键属性', |
| c_count decimal(12) comment '购物车小计', |
| c_num int comment '购物车商品数量', |
| primary key (c_id) |
| ) |
| charset = UTF8; |
4.5 订单模块涉及表
4.5.1 订单表
| create table orders |
| ( |
| o_id varchar(64) not null comment '订单编号是字符串类型,但也是唯一标识', |
| a_id int comment '地址实体', |
| u_id int comment '用户实体的主键属性', |
| o_count decimal(12) comment '订单总金额', |
| o_time datetime comment '订单的详细时间', |
| o_state int comment '订单状态 0未付款,1付款未发货,,2发货未收货,,3收货待评价,4订单完成,5退货状态', |
| o_detail varchar(200) comment '订单收货地址', |
| primary key (o_id) |
| ) |
| charset = UTF8; |
4.5.2 订单详情表
| create table item |
| ( |
| i_id int not null auto_increment comment '订单项的唯一标识', |
| o_id varchar(64) comment '订单编号是字符串类型,但也是唯一标识', |
| p_id int comment '商品的唯一主键', |
| i_num int comment '订单项数量', |
| i_count decimal(12) comment '订单项小计', |
| primary key (i_id) |
| ) |
| charset = UTF8; |
4.6 后台管理模块
4.7 约束
| alter table address add constraint FK_u_a_fk foreign key (u_id) |
| references user (u_id) on delete restrict on update restrict; |
| |
| alter table cart add constraint FK_p_c_fk foreign key (p_id) |
| references product (p_id) on delete restrict on update restrict; |
| |
| alter table cart add constraint FK_u_c_fk foreign key (u_id) |
| references user (u_id) on delete restrict on update restrict; |
| |
| alter table item add constraint FK_o_i_fk foreign key (o_id) |
| references orders (o_id) on delete restrict on update restrict; |
| |
| alter table item add constraint FK_p_i_fk foreign key (p_id) |
| references product (p_id) on delete restrict on update restrict; |
| |
| alter table orders add constraint FK_a_o_fk foreign key (a_id) |
| references address (a_id) on delete restrict on update restrict; |
| |
| alter table orders add constraint FK_u_o_fk foreign key (u_id) |
| references user (u_id) on delete restrict on update restrict; |
| |
| alter table product add constraint FK_t_p_fk foreign key (t_id) |
| references type (t_id) on delete restrict on update restrict; |
4.8 导入.sql文件
导入外部sql文件到mysql数据库中的某张表中
- 方法一:
- Windows+R打开控制台输入: mysql -uroot -p 数据库名 < .sql文件路径,Enter后输入密码等待一会儿即可
- 方法二:
- Windows+R打开控制台输入: mysql -uroot -p, Enter后输入密码进入数据库
- use 数据库名;
- source后面输入外部sql文件路径,Enter
五. 项目搭建和准备工作
- 创建项目
- 导入工具类
- 导入jar包
- 导入配置文件
- 导入页面
5.1 创建BaseServlet[重点]
- 作用: 简化和优化Servlet的创建和数量
- 实现思路: 使一个Servlet对应多个方法! 每个方法都实现一个业务逻辑!
- 在一个Servlet中声明多个处理业务逻辑的方法
- 在每次访问Servlet时在路径上添加一个标识, 用于判断要调用具体哪一个处理业务逻辑的方法
- 当每次请求到doget/dopost/service方法的时候, 判断参数的标识, 调用对应的业务逻辑方法即可
- BaseServlet的实现
- 实现基本的Servlet
- 优化方法调用
- 利用标识符的字符串和方法名相同
- 利用反射技术, 调用对应的执行方法
- 避免了大量判断
- 当有新的方法出现时, 也不需要额外的添加判断方法
- 优化多Servlet实现
- 实现思路:
- 创建一个BaseServlet类, 然后去继承HttpServlet,
- BaseServlet中写service方法
- service方法中: 1. 获取标识符 2. 反射调用业务逻辑
- 每个功能模块对应的Controller只需继承BaseServlet即可
- HttpServlet-->BaseServlet-->模块的Controller
- 优化返回值问题
- 每个方法都要进行响应
- 响应的方式固定: 转发, 重定向, 返回字符串, 返回字节流
- 如果在每个方法中写转发重定向和返回字符串的语法比较繁琐
- 我们可以统一在BaseServlet中进行处理
- 操作
- 步骤一: 将方法的返回值改成字符串
- 步骤二: 根据约定的内容, 添加特殊的标识
- 转发 forward: 路径
- 重定向 redirect: 路径
- 步骤三: BaseServlet集中处理
- 执行方法-->获取返回值-->进行非空判断
- 截取标识, 根据标识进行转发, 重定向 或 写回字符串
- 好处: 简化方法的响应和操作
- 注意: 返回字节,我们只要将方法的返回值改为void,然后使用response对象手动操作即可
5.1.1 BaseServlet
| package com.dz.controller; |
| |
| import com.dz.utils.Constants; |
| |
| import javax.servlet.ServletException; |
| import javax.servlet.annotation.WebServlet; |
| import javax.servlet.http.HttpServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import java.io.IOException; |
| import java.lang.reflect.Method; |
| |
| |
| |
| |
| |
| |
| |
| @WebServlet(name = "BaseServlet") |
| public class BaseServlet extends HttpServlet { |
| protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
| |
| String methodStr = req.getParameter(Constants.TAG); |
| |
| |
| if (methodStr == null || methodStr.equals("")) { |
| methodStr = Constants.INDEX; |
| } |
| |
| |
| |
| Class<? extends BaseServlet> aClass = this.getClass(); |
| try { |
| |
| |
| |
| |
| |
| Method method = aClass.getMethod(methodStr, HttpServletRequest.class, HttpServletResponse.class); |
| |
| |
| |
| |
| |
| |
| Object result = method.invoke(this, req, resp); |
| |
| if (result != null) { |
| |
| String str = (String) result; |
| String path = str.substring(str.indexOf(Constants.FLAG) + 1); |
| if (str.startsWith(Constants.FORWARD)) { |
| |
| req.getRequestDispatcher(path).forward(req,resp); |
| }else if (str.startsWith(Constants.REDIRECT)) { |
| |
| |
| String newPath = resp.encodeRedirectURL(path); |
| resp.sendRedirect(newPath); |
| }else { |
| |
| resp.getWriter().println(str); |
| } |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| req.getSession().setAttribute("masg","程序异常, 请稍后再试!"); |
| resp.sendRedirect("/message.jsp"); |
| } |
| } |
| |
| |
| |
| |
| |
| public String index(HttpServletRequest req, HttpServletResponse resp) throws IOException { |
| |
| return Constants.FORWARD + "/index.jsp"; |
| } |
| |
| } |
| |
| |
六. 项目代码
6.1 Controller
6.1.1 用户模块
| package com.dz.controller; |
| |
| import com.dz.entity.User; |
| import com.dz.service.UserService; |
| import com.dz.service.impl.UserServiceImpl; |
| import com.dz.utils.Base64Utils; |
| import com.dz.utils.Constants; |
| import com.dz.utils.MD5Utils; |
| import com.dz.utils.RandomUtils; |
| import org.apache.commons.beanutils.BeanUtils; |
| |
| import javax.servlet.annotation.WebServlet; |
| import javax.servlet.http.Cookie; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.servlet.http.HttpSession; |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.Map; |
| |
| |
| |
| |
| |
| @WebServlet("/user") |
| public class UserController extends BaseServlet { |
| |
| |
| |
| |
| public String check(HttpServletRequest request, HttpServletResponse response) { |
| String result = Constants.HAS_USER; |
| |
| String username = request.getParameter("username"); |
| |
| if (username != null) { |
| |
| UserServiceImpl userService = new UserServiceImpl(); |
| boolean b = userService.checkedUser(username); |
| |
| |
| if (b) { |
| |
| return Constants.HAS_USER; |
| }else { |
| |
| return Constants.NOT_HAS_USER; |
| } |
| } |
| return result; |
| } |
| |
| |
| |
| |
| public String register(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| Map<String,String[]> parameterMap = request.getParameterMap(); |
| User user = new User(); |
| try { |
| |
| |
| BeanUtils.populate(user,parameterMap); |
| } catch (IllegalAccessException | InvocationTargetException e) { |
| e.printStackTrace(); |
| } |
| |
| |
| |
| |
| user.setUstatus(Constants.USER_NOT_ACTIVE); |
| user.setUrole(Constants.ROLE_CUSTOMER); |
| user.setCode(RandomUtils.createActive()); |
| |
| user.setUpassword(MD5Utils.md5(user.getUpassword())); |
| |
| |
| UserService userService = new UserServiceImpl(); |
| int row = userService.registerUser(user); |
| if (row != 1) { |
| request.setAttribute("registerMsg","注册失败!"); |
| return Constants.FORWARD + "/register.jsp"; |
| }else { |
| HttpSession session = request.getSession(); |
| session.setAttribute("user",user); |
| session.setAttribute("registerMsg","您已注册成功,可以登陆啦!"); |
| return Constants.REDIRECT + "/registerSuccess.jsp"; |
| } |
| } |
| |
| |
| |
| |
| public String active(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| |
| String c = request.getParameter("c"); |
| |
| String code = Base64Utils.decode(c); |
| |
| UserService userService = new UserServiceImpl(); |
| int row = userService.activeUser(code); |
| |
| |
| if (row == Constants.ACTIVE_FAIL) { |
| request.setAttribute("msg","激活失败!请重新操作!"); |
| }else if (row == Constants.ACTIVE_SUCCESS) { |
| request.setAttribute("msg","恭喜您激活成功!可以登陆啦!"); |
| }else { |
| request.setAttribute("msg","您已经激活过了哦!不用再次激活!"); |
| } |
| return Constants.FORWARD + "/message.jsp"; |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public String login(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| String username = request.getParameter("username"); |
| String password = request.getParameter("password"); |
| String code = request.getParameter("code"); |
| String auto = request.getParameter("auto"); |
| |
| |
| HttpSession session = request.getSession(); |
| String codes = (String) session.getAttribute("codes"); |
| |
| if (code == null || !code.equalsIgnoreCase(codes)) { |
| request.setAttribute("msg","验证码输入错误!"); |
| return Constants.FORWARD + "/login.jsp"; |
| } |
| |
| UserService userService = new UserServiceImpl(); |
| User user = userService.login(username, password); |
| |
| |
| |
| |
| if (user == null) { |
| request.setAttribute("msg","登陆失败!"); |
| return Constants.FORWARD + "/login.jsp"; |
| } |
| if (user.getUstatus().equals(Constants.USER_NOT_ACTIVE)) { |
| request.setAttribute("msg","账号未激活!!"); |
| return Constants.FORWARD + "/login.jsp"; |
| } |
| session.setAttribute("loginUser",user); |
| |
| |
| if (auto == null) { |
| |
| |
| Cookie cookie = new Cookie(Constants.AUTO_NAME,""); |
| cookie.setPath("/"); |
| cookie.setMaxAge(0); |
| response.addCookie(cookie); |
| }else { |
| |
| String content = username + Constants.FLAG + password; |
| content = Base64Utils.encode(content); |
| Cookie cookie = new Cookie(Constants.AUTO_NAME,content); |
| cookie.setPath("/"); |
| cookie.setMaxAge(14*24*60*60); |
| response.addCookie(cookie); |
| } |
| |
| return Constants.REDIRECT + "/index.jsp"; |
| |
| } |
| |
| |
| |
| |
| |
| |
| public String logout(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| HttpSession session = request.getSession(); |
| session.removeAttribute("loginUser"); |
| |
| |
| Cookie cookie = new Cookie(Constants.AUTO_NAME,""); |
| |
| cookie.setPath("/"); |
| cookie.setMaxAge(0); |
| response.addCookie(cookie); |
| |
| |
| request.setAttribute("msg","注销成功!"); |
| |
| return Constants.FORWARD + "/login.jsp"; |
| } |
| } |
| |
| |
6.2.1 地址模块
| package com.dz.controller; |
| |
| import com.dz.entity.Address; |
| import com.dz.entity.User; |
| import com.dz.service.AddressService; |
| import com.dz.service.impl.AddressServiceImpl; |
| import com.dz.utils.Constants; |
| import org.apache.commons.beanutils.BeanUtils; |
| |
| import javax.servlet.annotation.WebServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.servlet.http.HttpSession; |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.List; |
| import java.util.Map; |
| |
| |
| |
| |
| |
| @WebServlet("/address") |
| public class AddressController extends BaseServlet{ |
| private AddressService addressService = new AddressServiceImpl(); |
| |
| public String getAddress(HttpServletRequest request, HttpServletResponse response) { |
| |
| HttpSession session = request.getSession(); |
| User user = (User) session.getAttribute("loginUser"); |
| if (user == null) { |
| session.setAttribute("msg","请先登陆哦!"); |
| return Constants.REDIRECT + "/login.jsp"; |
| } |
| int uid = user.getUid(); |
| List<Address> addressList = addressService.findAddressByUid(uid); |
| |
| request.setAttribute("addressList",addressList); |
| |
| |
| return Constants.FORWARD + "/self_info.jsp"; |
| } |
| public String add(HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException, IllegalAccessException { |
| |
| |
| Map<String, String[]> map = request.getParameterMap(); |
| Address address = new Address(); |
| BeanUtils.populate(address, map); |
| |
| int row = addressService.addAddress(address); |
| |
| if (row != 1) { |
| return Constants.FORWARD + "/index.jsp"; |
| } |
| return Constants.FORWARD + "/address?method=getAddress"; |
| } |
| |
| public String delete(HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException, IllegalAccessException { |
| |
| |
| String aid = request.getParameter("aid"); |
| |
| int row = addressService.deleteAddress(aid); |
| |
| if (row != 1) { |
| return Constants.FORWARD + "/index.jsp"; |
| } |
| return Constants.FORWARD + "/address?method=getAddress"; |
| } |
| |
| public String setDefault(HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException, IllegalAccessException { |
| |
| HttpSession session = request.getSession(); |
| User user = (User) session.getAttribute("loginUser"); |
| if (user == null) { |
| session.setAttribute("msg","请先登陆哦!"); |
| return Constants.REDIRECT + "/login.jsp"; |
| } |
| int uid = user.getUid(); |
| |
| String aid = request.getParameter("aid"); |
| |
| int row = addressService.defaultAddr(aid, uid); |
| |
| if (row != Constants.DEFAULT_ADDRESS) { |
| return Constants.FORWARD + "/index.jsp"; |
| } |
| return Constants.FORWARD + "/address?method=getAddress"; |
| } |
| |
| public String update(HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException, IllegalAccessException { |
| |
| |
| Map<String, String[]> map = request.getParameterMap(); |
| Address address = new Address(); |
| BeanUtils.populate(address, map); |
| |
| int row = addressService.updateAddress(address); |
| |
| if (row != 1) { |
| return Constants.FORWARD + "/index.jsp"; |
| } |
| return Constants.FORWARD + "/address?method=getAddress"; |
| } |
| |
| } |
| |
| |
6.3.1 商品类别模块
| package com.dz.controller; |
| |
| import com.dz.entity.Type; |
| import com.dz.service.TypeService; |
| import com.dz.service.impl.TypeServiceImpl; |
| import com.google.gson.Gson; |
| |
| import javax.servlet.annotation.WebServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import java.util.List; |
| |
| |
| |
| |
| |
| @WebServlet("/type") |
| public class TypeController extends BaseServlet{ |
| |
| public String findAll(HttpServletRequest request, HttpServletResponse response) { |
| |
| TypeService typeService = new TypeServiceImpl(); |
| List<Type> typeList = typeService.findAll(); |
| |
| Gson gson = new Gson(); |
| |
| return gson.toJson(typeList); |
| } |
| } |
6.4.1 商品模块
| package com.dz.controller; |
| |
| import com.dz.entity.PageBean; |
| import com.dz.entity.Product; |
| import com.dz.service.ProductService; |
| import com.dz.service.impl.ProductServiceImpl; |
| import com.dz.utils.Constants; |
| |
| import javax.servlet.annotation.WebServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| |
| |
| |
| |
| |
| @WebServlet("/product") |
| public class ProductController extends BaseServlet{ |
| |
| public String show(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| String tid = request.getParameter("tid"); |
| |
| int pageSize = 8; |
| |
| String currentPage = request.getParameter("currentPage"); |
| int page = 1; |
| if (currentPage != null) { |
| page = Integer.parseInt(currentPage); |
| } |
| |
| |
| ProductService productService = new ProductServiceImpl(); |
| PageBean<Product> pageBean = productService.findPage(tid, page, pageSize); |
| |
| |
| request.setAttribute("pageBean",pageBean); |
| |
| return Constants.FORWARD + "/goodsList.jsp"; |
| } |
| |
| public String detail(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| String pid = request.getParameter("pid"); |
| |
| |
| ProductService productService = new ProductServiceImpl(); |
| Product product = productService.findProductByPid(pid); |
| |
| request.setAttribute("product",product); |
| |
| return Constants.FORWARD + "/goodsDetail.jsp"; |
| } |
| |
| |
| } |
| |
6.5.1 购物车模块
| package com.dz.controller; |
| |
| import com.dz.entity.Cart; |
| import com.dz.entity.User; |
| import com.dz.service.CartService; |
| import com.dz.service.impl.CartServiceImpl; |
| import com.dz.utils.Constants; |
| |
| import javax.servlet.annotation.WebServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.servlet.http.HttpSession; |
| import java.util.List; |
| |
| |
| |
| |
| |
| @WebServlet("/cart") |
| public class CartController extends BaseServlet { |
| private CartService cartService = new CartServiceImpl(); |
| |
| |
| public String addCart(HttpServletRequest request, HttpServletResponse response) { |
| |
| HttpSession session = request.getSession(); |
| User user = (User) session.getAttribute("loginUser"); |
| if (user == null) { |
| session.setAttribute("msg","添加购物车前请先登陆哦!"); |
| return Constants.REDIRECT + "/login.jsp"; |
| } |
| |
| |
| int uid = user.getUid(); |
| String pid = request.getParameter("pid"); |
| int row = cartService.addCart(uid, pid); |
| if (row != 1) { |
| |
| return Constants.REDIRECT + "/login.jsp"; |
| } |
| return Constants.FORWARD + "/cartSuccess.jsp"; |
| } |
| |
| |
| public String show(HttpServletRequest request, HttpServletResponse response) { |
| |
| HttpSession session = request.getSession(); |
| User user = (User) session.getAttribute("loginUser"); |
| if (user == null) { |
| session.setAttribute("msg","添加购物车前请先登陆哦!"); |
| return Constants.REDIRECT + "/login.jsp"; |
| } |
| |
| int uid = user.getUid(); |
| |
| List<Cart> cartList = cartService.findAll(uid); |
| request.setAttribute("cartList",cartList); |
| |
| return Constants.FORWARD + "/cart.jsp"; |
| } |
| |
| |
| public String delete(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| String cid = request.getParameter("cid"); |
| |
| int row = cartService.deleteCart(cid); |
| if (row != 1) { |
| return Constants.FORWARD + "/index.jsp"; |
| } |
| |
| return Constants.FORWARD + "/cart?method=show"; |
| } |
| |
| |
| public String update(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| String cid = request.getParameter("cid"); |
| String cnum = request.getParameter("cnum"); |
| String pprice = request.getParameter("pprice"); |
| |
| int row = cartService.updateCart(cid, cnum, pprice); |
| if (row != 1) { |
| return Constants.FORWARD + "/index.jsp"; |
| } |
| |
| return Constants.FORWARD + "/cart?method=show"; |
| } |
| |
| public String clear(HttpServletRequest request, HttpServletResponse response) { |
| |
| String uid = request.getParameter("uid"); |
| |
| int row = cartService.clearCart(uid); |
| |
| return Constants.FORWARD + "/cart?method=show"; |
| } |
| } |
| |
6.6.1 订单模块
| package com.dz.controller; |
| |
| import com.dz.entity.Address; |
| import com.dz.entity.Cart; |
| import com.dz.entity.Orders; |
| import com.dz.entity.User; |
| import com.dz.service.AddressService; |
| import com.dz.service.CartService; |
| import com.dz.service.OrderService; |
| import com.dz.service.impl.AddressServiceImpl; |
| import com.dz.service.impl.CartServiceImpl; |
| import com.dz.service.impl.OrderServiceImpl; |
| import com.dz.utils.Constants; |
| |
| import javax.servlet.annotation.WebServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.servlet.http.HttpSession; |
| import java.util.List; |
| |
| |
| |
| |
| |
| @WebServlet("/order") |
| public class OrderController extends BaseServlet { |
| private OrderService orderService = new OrderServiceImpl(); |
| private AddressService addressService = new AddressServiceImpl(); |
| private CartService cartService = new CartServiceImpl(); |
| |
| |
| public String preview(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| String uid = request.getParameter("uid"); |
| |
| |
| List<Address> addressList = addressService.findAddressByUid(Integer.parseInt(uid)); |
| |
| List<Cart> cartList = cartService.findAll(Integer.parseInt(uid)); |
| |
| |
| request.setAttribute("addressList",addressList); |
| request.setAttribute("cartList",cartList); |
| |
| |
| return Constants.FORWARD + "order.jsp"; |
| } |
| |
| |
| public String create(HttpServletRequest request, HttpServletResponse response) { |
| |
| |
| String uid = request.getParameter("uid"); |
| String sum = request.getParameter("sum"); |
| String aid = request.getParameter("aid"); |
| |
| |
| orderService.createOrder(uid, sum, aid); |
| |
| return Constants.FORWARD + "order?method=show"; |
| } |
| |
| public String show(HttpServletRequest request, HttpServletResponse response) { |
| HttpSession session = request.getSession(); |
| User user = (User) session.getAttribute("loginUser"); |
| if (user == null) { |
| session.setAttribute("msg","请先登陆哦!"); |
| return Constants.REDIRECT + "/login.jsp"; |
| } |
| int uid = user.getUid(); |
| |
| List<Orders> orderList = orderService.showOrders(uid); |
| request.setAttribute("orderList",orderList); |
| |
| return Constants.FORWARD + "/orderList.jsp"; |
| } |
| |
| public String detail(HttpServletRequest request, HttpServletResponse response) { |
| String oid = request.getParameter("oid"); |
| |
| Orders orderDetails = orderService.showDetails(oid); |
| request.setAttribute("orderDetails",orderDetails); |
| |
| return Constants.FORWARD + "/orderDetail.jsp"; |
| } |
| } |
| |
6.7.1 验证码
| package com.dz.controller; |
| |
| import cn.dsna.util.images.ValidateCode; |
| |
| import javax.servlet.ServletOutputStream; |
| import javax.servlet.annotation.WebServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import java.io.IOException; |
| |
| |
| |
| |
| |
| @WebServlet("/code") |
| public class CodeController extends BaseServlet{ |
| |
| public void createCode(HttpServletRequest request, HttpServletResponse response) throws IOException { |
| |
| |
| ValidateCode validateCode = new ValidateCode(100,35,4,20); |
| |
| String codes = validateCode.getCode(); |
| request.getSession().setAttribute("codes",codes); |
| |
| ServletOutputStream outputStream = response.getOutputStream(); |
| validateCode.write(outputStream); |
| |
| } |
| } |
6.2 Service
6.2.1 UserServiceImpl
| package com.dz.service.impl; |
| |
| import com.dz.dao.UserDao; |
| import com.dz.dao.impl.UserDaoImpl; |
| import com.dz.entity.User; |
| import com.dz.service.UserService; |
| import com.dz.utils.Constants; |
| import com.dz.utils.DbUtils; |
| import com.dz.utils.EmailUtils; |
| import com.dz.utils.MD5Utils; |
| |
| |
| |
| |
| |
| public class UserServiceImpl implements UserService { |
| |
| |
| private UserDao userDao = new UserDaoImpl(); |
| |
| @Override |
| public boolean checkedUser(String username) { |
| User user = null; |
| |
| try { |
| DbUtils.begin(); |
| user = userDao.selectUserByUN(username); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| |
| |
| return user != null; |
| } |
| |
| @Override |
| public int registerUser(User user) { |
| int row = 0; |
| try { |
| DbUtils.begin(); |
| |
| row = userDao.insertUser(user); |
| |
| EmailUtils.sendEmail(user); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| |
| @Override |
| public int activeUser(String code) { |
| int row = Constants.ACTIVE_FAIL; |
| try { |
| DbUtils.begin(); |
| |
| User user = userDao.selectUserByCode(code); |
| if (user != null) { |
| |
| if (user.getUstatus().equals(Constants.USER_ACTIVE)) { |
| row = Constants.ACTIVE_ALREADY; |
| }else { |
| |
| row = userDao.updateStatusByUid(user.getUid()); |
| } |
| } |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| |
| @Override |
| public User login(String username, String password) { |
| User user = null; |
| try { |
| DbUtils.begin(); |
| |
| String md5password = MD5Utils.md5(password); |
| |
| User temp = userDao.selectUserByUN(username); |
| if (temp != null) { |
| if (temp.getUpassword().equals(md5password)) { |
| user = temp; |
| } |
| } |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return user; |
| } |
| } |
| |
6.2.2 AddressServiceImpl
| package com.dz.service.impl; |
| |
| import com.dz.dao.AddressDao; |
| import com.dz.dao.impl.AddressDaoImpl; |
| import com.dz.entity.Address; |
| import com.dz.service.AddressService; |
| import com.dz.utils.Constants; |
| import com.dz.utils.DbUtils; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| |
| |
| |
| |
| public class AddressServiceImpl implements AddressService { |
| private AddressDao addressDao = new AddressDaoImpl(); |
| |
| @Override |
| public List<Address> findAddressByUid(int uid) { |
| List<Address> addressList = new ArrayList<>(); |
| try { |
| DbUtils.begin(); |
| addressList = addressDao.selectAddressByUid(uid); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| |
| return addressList; |
| } |
| |
| @Override |
| public int addAddress(Address address) { |
| int row = 0; |
| try { |
| DbUtils.begin(); |
| row = addressDao.insertAddress(address); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| |
| @Override |
| public int deleteAddress(String aid) { |
| int row = 0; |
| try { |
| DbUtils.begin(); |
| row = addressDao.delAddress(aid); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| |
| @Override |
| public int defaultAddr(String aid, int uid) { |
| int row = Constants.COMMON_ADDRESS; |
| try { |
| DbUtils.begin(); |
| |
| int row1 = addressDao.setDefaultByAid(aid); |
| |
| int row2 = addressDao.setCommonByAid(aid, uid); |
| if (row1 == Constants.DEFAULT_ADDRESS && row2 == Constants.DEFAULT_ADDRESS) { |
| row = Constants.DEFAULT_ADDRESS; |
| } |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| |
| @Override |
| public int updateAddress(Address address) { |
| int row = 0; |
| try { |
| DbUtils.begin(); |
| row = addressDao.uptAddressByAid(address); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| } |
| |
6.2.3 TypeServiceImpl
| package com.dz.service.impl; |
| |
| import com.dz.dao.TypeDao; |
| import com.dz.dao.impl.TypeDaoImpl; |
| import com.dz.entity.Type; |
| import com.dz.service.TypeService; |
| import com.dz.utils.DbUtils; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| |
| |
| |
| |
| public class TypeServiceImpl implements TypeService { |
| private TypeDao typeDao = new TypeDaoImpl(); |
| |
| @Override |
| public List<Type> findAll() { |
| List<Type> typeList = new ArrayList<>(); |
| try { |
| DbUtils.begin(); |
| List<Type> temp = typeDao.selectAll(); |
| if (temp != null) { |
| typeList = temp; |
| } |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return typeList; |
| } |
| } |
6.2.4 ProductServiceImpl
| package com.dz.service.impl; |
| |
| import com.dz.dao.ProductDao; |
| import com.dz.dao.impl.ProductDaoImpl; |
| import com.dz.entity.PageBean; |
| import com.dz.entity.Product; |
| import com.dz.service.ProductService; |
| import com.dz.utils.DbUtils; |
| |
| import java.util.List; |
| |
| |
| |
| |
| |
| public class ProductServiceImpl implements ProductService { |
| private ProductDao productDao = new ProductDaoImpl(); |
| |
| @Override |
| public PageBean<Product> findPage(String tid, int page, int pageSize) { |
| PageBean<Product> pageBean = null; |
| try { |
| DbUtils.begin(); |
| long counts = productDao.selectCountByTid(tid); |
| List<Product> list = productDao.selectProductByPage(page, pageSize, tid); |
| pageBean = new PageBean<Product>(list, page, pageSize,counts); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return pageBean; |
| } |
| |
| @Override |
| public Product findProductByPid(String pid) { |
| Product product = null; |
| try { |
| DbUtils.begin(); |
| product = productDao.selectProductByPid(pid); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return product; |
| } |
| } |
| |
6.2.5 CartServiceImpl
| package com.dz.service.impl; |
| |
| import com.dz.dao.CartDao; |
| import com.dz.dao.ProductDao; |
| import com.dz.dao.impl.CartDaoImpl; |
| import com.dz.dao.impl.ProductDaoImpl; |
| import com.dz.entity.Cart; |
| import com.dz.entity.Product; |
| import com.dz.service.CartService; |
| import com.dz.utils.DbUtils; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| |
| |
| |
| |
| public class CartServiceImpl implements CartService { |
| private CartDao cartDao = new CartDaoImpl(); |
| |
| @Override |
| public int addCart(int uid, String pid) { |
| |
| int row = 0; |
| try { |
| DbUtils.begin(); |
| |
| Cart cart = cartDao.hasThisProduct(uid, pid); |
| if (cart != null) { |
| |
| cart.setCnum(cart.getCnum() + 1); |
| row = cartDao.updateCart(cart); |
| }else { |
| |
| |
| ProductDao productDao = new ProductDaoImpl(); |
| Product product = productDao.selectProductByPid(pid); |
| |
| cart = new Cart(); |
| cart.setPid(Integer.parseInt(pid)); |
| cart.setUid(uid); |
| cart.setProduct(product); |
| cart.setCnum(1); |
| |
| row = cartDao.insertCart(cart); |
| } |
| DbUtils.commit(); |
| } catch (NumberFormatException e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| |
| @Override |
| public List<Cart> findAll(int uid) { |
| List<Cart> cartList = new ArrayList<>(); |
| |
| try { |
| DbUtils.begin(); |
| cartList = cartDao.selectCartByUid(uid); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return cartList; |
| } |
| |
| @Override |
| public int deleteCart(String cid) { |
| int row = 0; |
| try { |
| DbUtils.begin(); |
| row = cartDao.deleteCartByCid(cid); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| |
| @Override |
| public int updateCart(String cid, String cnum, String pprice) { |
| int row = 0; |
| try { |
| DbUtils.begin(); |
| row = cartDao.updateCartByCid(cid, cnum, pprice); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| |
| @Override |
| public int clearCart(String uid) { |
| int row = 0; |
| try { |
| DbUtils.begin(); |
| row = cartDao.clearCartByUid(uid); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| return row; |
| } |
| } |
| |
6.2.6 OrderServiceImpl
| package com.dz.service.impl; |
| |
| import com.dz.dao.AddressDao; |
| import com.dz.dao.CartDao; |
| import com.dz.dao.OrderDao; |
| import com.dz.dao.impl.OrderDaoImpl; |
| import com.dz.dao.impl.AddressDaoImpl; |
| import com.dz.dao.impl.CartDaoImpl; |
| import com.dz.entity.Address; |
| import com.dz.entity.Cart; |
| import com.dz.entity.Item; |
| import com.dz.entity.Orders; |
| import com.dz.service.OrderService; |
| import com.dz.utils.DbUtils; |
| import com.dz.utils.RandomUtils; |
| |
| import java.math.BigDecimal; |
| import java.util.ArrayList; |
| import java.util.Date; |
| import java.util.List; |
| |
| |
| |
| |
| |
| public class OrderServiceImpl implements OrderService { |
| private OrderDao orderDao = new OrderDaoImpl(); |
| |
| @Override |
| public void createOrder(String uid, String sum, String aid) { |
| try { |
| DbUtils.begin(); |
| |
| Orders orders = new Orders(); |
| String orderId = RandomUtils.createOrderId(); |
| AddressDao addressDao = new AddressDaoImpl(); |
| Address address = addressDao.selectAddressByAid(aid); |
| |
| BigDecimal sumBig = new BigDecimal(sum); |
| orders.setOid(orderId); |
| orders.setAid(Integer.parseInt(aid)); |
| orders.setUid(Integer.parseInt(uid)); |
| orders.setOtime(new Date()); |
| orders.setOcount(sumBig); |
| orders.setOstate(0); |
| orders.setOdetail(address.getAdetail()); |
| |
| |
| orderDao.insetOrders(orders); |
| |
| CartDao cartDao = new CartDaoImpl(); |
| |
| List<Cart> cartList = cartDao.selectCartByUid(Integer.parseInt(uid)); |
| |
| List<Item> itemList = new ArrayList<>(); |
| for (Cart cart : cartList) { |
| Item item = new Item(); |
| |
| item.setOid(orderId); |
| item.setPid(cart.getPid()); |
| item.setInum(cart.getCnum()); |
| item.setIcount(cart.getCcount()); |
| |
| itemList.add(item); |
| } |
| |
| orderDao.insertItems(itemList); |
| |
| cartDao.clearCartByUid(uid); |
| DbUtils.commit(); |
| } catch (NumberFormatException e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| } |
| |
| @Override |
| public List<Orders> showOrders(int uid) { |
| List<Orders> orderList = new ArrayList<>(); |
| try { |
| DbUtils.begin(); |
| orderList = orderDao.selectOrderByUid(uid); |
| DbUtils.commit(); |
| } catch (Exception e) { |
| DbUtils.rollback(); |
| e.printStackTrace(); |
| } |
| |
| return orderList; |
| } |
| |
| @Override |
| public Orders showDetails(String oid) { |
| |
| |
| Orders orders = orderDao.selectOrdersByOid(oid); |
| |
| |
| List<Item> itemList = orderDao.selectItemsByOid(oid); |
| |
| orders.setItems(itemList); |
| |
| return orders; |
| } |
| } |
| |
6.3 Dao
6.3.1 UserDaoImpl
| package com.dz.dao.impl; |
| |
| import com.dz.dao.UserDao; |
| import com.dz.entity.User; |
| import com.dz.utils.Constants; |
| import com.dz.utils.DbUtils; |
| import org.apache.commons.dbutils.QueryRunner; |
| import org.apache.commons.dbutils.handlers.BeanHandler; |
| |
| import java.sql.SQLException; |
| |
| |
| |
| |
| |
| public class UserDaoImpl implements UserDao { |
| |
| private QueryRunner queryRunner = new QueryRunner(); |
| |
| @Override |
| public User selectUserByUN(String username) { |
| User user = null; |
| |
| String sql = "select u_id as uid, u_name as username, u_password as upassword" + |
| ", u_email as email, u_sex as usex, u_status as ustatus, u_code as code" + |
| ", u_role as urole from user where u_name = ?"; |
| try { |
| |
| user = queryRunner.query(DbUtils.getConnection(),sql, new BeanHandler<User>(User.class), username); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return user; |
| } |
| |
| @Override |
| public int insertUser(User user) { |
| int row = 0; |
| |
| String sql = "insert into user(u_name, u_password, u_email, u_sex, u_status, u_code, u_role) values(?,?,?,?,?,?,?)"; |
| |
| try { |
| |
| row = queryRunner.update(DbUtils.getConnection(), sql, user.getUsername(), user.getUpassword(), |
| user.getEmail(), user.getUsex(), user.getUstatus(), user.getCode(), user.getUrole()); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| @Override |
| public User selectUserByCode(String code) { |
| User user = null; |
| |
| String sql = "select u_id as uid, u_name as username, u_password as upassword" + |
| ", u_email as email, u_sex as usex, u_status as ustatus, u_code as code" + |
| ", u_role as urole from user where u_code = ?"; |
| try { |
| |
| user = queryRunner.query(DbUtils.getConnection(),sql, new BeanHandler<User>(User.class), code); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return user; |
| } |
| |
| @Override |
| public int updateStatusByUid(int uid) { |
| int row = 0; |
| |
| String sql = "update user set u_status = ? where u_id = ?"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, Constants.USER_ACTIVE, uid); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| } |
| |
6.3.2 AddressDaoImpl
| package com.dz.dao.impl; |
| |
| import com.dz.dao.AddressDao; |
| import com.dz.entity.Address; |
| import com.dz.utils.Constants; |
| import com.dz.utils.DbUtils; |
| import org.apache.commons.dbutils.QueryRunner; |
| import org.apache.commons.dbutils.handlers.BeanHandler; |
| import org.apache.commons.dbutils.handlers.BeanListHandler; |
| |
| import java.sql.SQLException; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| |
| |
| |
| |
| public class AddressDaoImpl implements AddressDao { |
| private QueryRunner queryRunner = new QueryRunner(); |
| |
| @Override |
| public List<Address> selectAddressByUid(int uid) { |
| List<Address> addressList = new ArrayList<>(); |
| String sql = "select a_id as aid, u_id as uid, a_name as aname, a_phone as aphone," + |
| " a_detail as adetail,a_state as astate from address where u_id = ? order by astate desc "; |
| try { |
| addressList = queryRunner.query(DbUtils.getConnection(), sql, new BeanListHandler<Address>(Address.class), uid); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return addressList; |
| } |
| |
| @Override |
| public int insertAddress(Address address) { |
| int row = 0; |
| String sql = "insert into address(u_id,a_name,a_phone,a_detail,a_state) values(?,?,?,?,?)"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, address.getUid(), address.getAname(), address.getAphone(), address.getAdetail(), address.getAstate()); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| @Override |
| public int delAddress(String aid) { |
| int row = 0; |
| String sql = "delete from address where a_id = ?"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, aid); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| @Override |
| public int setDefaultByAid(String aid) { |
| |
| int row = 0; |
| String sql = "update address set a_state = ? where a_id = ?"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, Constants.DEFAULT_ADDRESS, aid); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| @Override |
| public int setCommonByAid(String aid, int uid) { |
| int row = 0; |
| String sql = "update address set a_state = ? where a_id != ? and u_id = ?"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, Constants.COMMON_ADDRESS, aid, uid); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| @Override |
| public int uptAddressByAid(Address address) { |
| int row = 0; |
| String sql = "update address set a_name = ?, a_phone = ?, a_detail = ?, a_state = ? where a_id = ?"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, address.getAname(), address.getAphone(), address.getAdetail(), address.getAstate(), address.getAid()); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| @Override |
| public Address selectAddressByAid(String aid) { |
| Address address = null; |
| String sql = "select a_detail as adetail from address where a_id = ? "; |
| |
| try { |
| address = queryRunner.query(DbUtils.getConnection(), sql, new BeanHandler<Address>(Address.class), aid); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| return address; |
| } |
| } |
| |
6.3.3 TypeDaoImpl
| package com.dz.dao.impl; |
| |
| import com.dz.dao.TypeDao; |
| import com.dz.entity.Type; |
| import com.dz.utils.DbUtils; |
| import org.apache.commons.dbutils.QueryRunner; |
| import org.apache.commons.dbutils.handlers.BeanListHandler; |
| |
| import java.sql.SQLException; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| |
| |
| |
| |
| public class TypeDaoImpl implements TypeDao { |
| private QueryRunner queryRunner = new QueryRunner(); |
| @Override |
| public List<Type> selectAll() { |
| List<Type> typeList = new ArrayList<>(); |
| String sql = "select t_id as tid, t_name as tname, t_info as tinfo from type limit 5"; |
| try { |
| typeList = queryRunner.query(DbUtils.getConnection(), sql, new BeanListHandler<Type>(Type.class)); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return typeList; |
| } |
| } |
6.3.4 ProductDaoImpl
| package com.dz.dao.impl; |
| |
| import com.dz.dao.ProductDao; |
| import com.dz.entity.Product; |
| import com.dz.utils.DbUtils; |
| import org.apache.commons.dbutils.QueryRunner; |
| import org.apache.commons.dbutils.handlers.BeanHandler; |
| import org.apache.commons.dbutils.handlers.BeanListHandler; |
| import org.apache.commons.dbutils.handlers.ScalarHandler; |
| |
| import java.sql.SQLException; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| |
| |
| |
| |
| public class ProductDaoImpl implements ProductDao { |
| |
| private QueryRunner queryRunner = new QueryRunner(); |
| |
| @Override |
| public long selectCountByTid(String tid) { |
| long counts = 0; |
| String sql = "select count(*) from product where t_id = ?"; |
| try { |
| Object result = queryRunner.query(DbUtils.getConnection(), sql, new ScalarHandler(), tid); |
| counts = (long) result; |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return counts; |
| } |
| |
| @Override |
| public List<Product> selectProductByPage(int page, int pageSize, String tid) { |
| List<Product> productList = new ArrayList<>(); |
| String sql = "select p_id as pid, t_id as tid, p_name as pname, p_time as ptime" + |
| ", p_image as pimage, p_price as pprice, p_state as pstate, p_info as pinfo" + |
| " from product where t_id = ? limit ?,?"; |
| try { |
| productList = queryRunner.query(DbUtils.getConnection(), sql, new BeanListHandler<Product>(Product.class), tid, (page-1)*pageSize, pageSize); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return productList; |
| } |
| |
| @Override |
| public Product selectProductByPid(String pid) { |
| Product product = null; |
| String sql = "select p_id as pid, t_id as tid, p_name as pname, p_time as ptime" + |
| ", p_image as pimage, p_price as pprice, p_state as pstate, p_info as pinfo" + |
| " from product where p_id = ?"; |
| try { |
| product = queryRunner.query(DbUtils.getConnection(), sql, new BeanHandler<Product>(Product.class), pid); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return product; |
| } |
| } |
| |
6.3.5 CartDaoImpl
| package com.dz.dao.impl; |
| |
| import com.dz.dao.CartDao; |
| import com.dz.entity.Cart; |
| import com.dz.entity.Product; |
| import com.dz.utils.DbUtils; |
| import org.apache.commons.beanutils.BeanUtils; |
| import org.apache.commons.dbutils.QueryRunner; |
| import org.apache.commons.dbutils.handlers.MapHandler; |
| import org.apache.commons.dbutils.handlers.MapListHandler; |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.math.BigDecimal; |
| import java.sql.SQLException; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| |
| |
| |
| |
| public class CartDaoImpl implements CartDao { |
| private QueryRunner queryRunner = new QueryRunner(); |
| |
| |
| @Override |
| public Cart hasThisProduct(int uid, String pid) { |
| Cart cart = null; |
| |
| String sql = "select product.p_id as pid, t_id as tid, p_name as pname, p_time as ptime, " + |
| "p_image as pimage, p_price as pprice, p_state as pstate, p_info as pinfo, " + |
| "c_id as cid, cart.p_id as pid, u_id as uid, c_count as ccount, c_num as cnum " + |
| "from product inner join cart on product.p_id = cart.p_id where cart.u_id = ? and cart.p_id = ?"; |
| try { |
| |
| Map<String, Object> map = queryRunner.query(DbUtils.getConnection(), sql, new MapHandler(), uid, pid); |
| if (map != null) { |
| cart = new Cart(); |
| Product product = new Product(); |
| |
| |
| BeanUtils.populate(cart,map); |
| BeanUtils.populate(product,map); |
| cart.setProduct(product); |
| } |
| } catch (SQLException | IllegalAccessException | InvocationTargetException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return cart; |
| } |
| |
| |
| @Override |
| public int updateCart(Cart cart) { |
| int row = 0; |
| String sql = "update cart set c_num = ?,c_count = ? where c_id = ?"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, cart.getCnum(), cart.getCcount(), cart.getCid()); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| |
| @Override |
| public int insertCart(Cart cart) { |
| int row = 0; |
| String sql = "insert into cart(p_id,u_id,c_count,c_num) values(?,?,?,?)"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, cart.getPid(), cart.getUid(), cart.getCcount(), cart.getCnum()); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| |
| @Override |
| public List<Cart> selectCartByUid(int uid) { |
| List<Cart> cartList = new ArrayList<>(); |
| |
| String sql = "select product.p_id as pid, t_id as tid, p_name as pname, p_time as ptime, " + |
| "p_image as pimage, p_price as pprice, p_state as pstate, p_info as pinfo, " + |
| "c_id as cid, cart.p_id as pid, u_id as uid, c_count as ccount, c_num as cnum " + |
| "from product inner join cart on product.p_id = cart.p_id where cart.u_id = ?"; |
| try { |
| List<Map<String, Object>> mapList = queryRunner.query(DbUtils.getConnection(), sql, new MapListHandler(), uid); |
| if (mapList != null) { |
| for (Map<String, Object> map : mapList) { |
| |
| Cart cart = new Cart(); |
| Product product = new Product(); |
| |
| BeanUtils.populate(cart, map); |
| BeanUtils.populate(product, map); |
| |
| cart.setProduct(product); |
| cartList.add(cart); |
| } |
| } |
| } catch (SQLException | IllegalAccessException | InvocationTargetException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return cartList; |
| } |
| |
| |
| @Override |
| public int deleteCartByCid(String cid) { |
| int row = 0; |
| String sql = "delete from cart where c_id = ?"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, cid); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| |
| @Override |
| public int updateCartByCid(String cid, String cnum, String pprice) { |
| BigDecimal cnumBig = new BigDecimal(cnum); |
| BigDecimal ppriceBig = new BigDecimal(pprice); |
| BigDecimal ccount = cnumBig.multiply(ppriceBig); |
| int row = 0; |
| String sql = "update cart set c_num = ?, c_count = ? where c_id = ?"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, cnum, ccount, cid ); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| |
| @Override |
| public int clearCartByUid(String uid) { |
| int row = 0; |
| String sql = "delete from cart where u_id = ?"; |
| try { |
| row = queryRunner.update(DbUtils.getConnection(), sql, uid); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return row; |
| } |
| |
| } |
| |
6.3.6 OrderDaoImpl
| package com.dz.dao.impl; |
| |
| import com.dz.dao.OrderDao; |
| import com.dz.entity.Address; |
| import com.dz.entity.Item; |
| import com.dz.entity.Orders; |
| import com.dz.entity.Product; |
| import com.dz.utils.DbUtils; |
| import org.apache.commons.beanutils.BeanUtils; |
| import org.apache.commons.dbutils.QueryRunner; |
| import org.apache.commons.dbutils.handlers.MapHandler; |
| import org.apache.commons.dbutils.handlers.MapListHandler; |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.sql.SQLException; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| |
| |
| |
| |
| public class OrderDaoImpl implements OrderDao { |
| private QueryRunner queryRunner = new QueryRunner(); |
| |
| @Override |
| public void insetOrders(Orders orders) { |
| String sql = "insert into orders(o_id,a_id,u_id,o_count,o_time,o_state,o_detail) values(?,?,?,?,?,?,?)"; |
| try { |
| queryRunner.update(DbUtils.getConnection(), sql, orders.getOid(), orders.getAid(), orders.getUid(), |
| orders.getOcount(), orders.getOtime(), orders.getOstate(), orders.getOdetail()); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| } |
| |
| @Override |
| public void insertItems(List<Item> itemList) { |
| Object [][] params = new Object[itemList.size()][]; |
| String sql = "insert into item(o_id,p_id,i_num,i_count) values(?,?,?,?)"; |
| |
| for (int i = 0; i < itemList.size(); i++) { |
| Item item = itemList.get(i); |
| params[i] = new Object[]{item.getOid(), item.getPid(), item.getInum(), item.getIcount()}; |
| } |
| try { |
| queryRunner.batch(DbUtils.getConnection(), sql, params); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| } |
| |
| @Override |
| public List<Orders> selectOrderByUid(int uid) { |
| |
| List<Orders> orderList = new ArrayList<>(); |
| String sql = "select o_id as oid, o.a_id as aid, o.u_id as uid, o_count as ocount, o_time as otime," + |
| "o_state as ostate, o_detail as odetail, a.a_id as aid, a.u_id as uid, a_name as aname, " + |
| "a_phone as aphone, a_detail as adetail, a_state as astate from orders o inner join " + |
| "address a on o.a_id = a.a_id where o.u_id = ?"; |
| try { |
| List<Map<String, Object>> mapList = queryRunner.query(DbUtils.getConnection(), sql, new MapListHandler(), uid); |
| if (mapList != null) { |
| for (Map<String, Object> map : mapList) { |
| Orders orders = new Orders(); |
| Address address = new Address(); |
| |
| BeanUtils.populate(orders, map); |
| BeanUtils.populate(address, map); |
| |
| orders.setAddress(address); |
| orderList.add(orders); |
| } |
| } |
| } catch (SQLException | IllegalAccessException | InvocationTargetException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return orderList; |
| } |
| |
| @Override |
| public Orders selectOrdersByOid(String oid) { |
| Orders order = null; |
| String sql = "select o_id as oid, o.a_id as aid, o.u_id as uid, o_count as ocount, o_time as otime," + |
| "o_state as ostate, o_detail as odetail, a.a_id as aid, a.u_id as uid, a_name as aname, " + |
| "a_phone as aphone, a_detail as adetail, a_state as astate from orders o inner join " + |
| "address a on o.a_id = a.a_id where o_id = ?"; |
| try { |
| Map<String, Object> map = queryRunner.query(DbUtils.getConnection(), sql, new MapHandler(), oid); |
| if (map != null) { |
| order = new Orders(); |
| Address address = new Address(); |
| |
| BeanUtils.populate(order, map); |
| BeanUtils.populate(address, map); |
| |
| order.setAddress(address); |
| } |
| } catch (SQLException | IllegalAccessException | InvocationTargetException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return order; |
| } |
| |
| @Override |
| public List<Item> selectItemsByOid(String oid) { |
| List<Item> itemList = new ArrayList<>(); |
| String sql = "select p.p_id as pid, t_id as tid, p_name as pname, p_time as ptime" + |
| ", p_image as pimage, p_price as pprice, p_state as pstate, p_info as pinfo," + |
| "i_id as iid, o_id as oid, i.p_id as pid, i_num as inum, i_count as icount " + |
| "from product p inner join item i on p.p_id = i.p_id where o_id = ?"; |
| |
| try { |
| List<Map<String, Object>> mapList = queryRunner.query(DbUtils.getConnection(), sql, new MapListHandler(), oid); |
| if (mapList != null) { |
| for (Map<String, Object> map : mapList) { |
| Item item = new Item(); |
| Product product = new Product(); |
| |
| BeanUtils.populate(item, map); |
| BeanUtils.populate(product, map); |
| |
| item.setProduct(product); |
| itemList.add(item); |
| } |
| } |
| } catch (SQLException | IllegalAccessException | InvocationTargetException throwables) { |
| throwables.printStackTrace(); |
| } |
| |
| return itemList; |
| } |
| } |
| |
6.4 Filter
6.4.1 AutoFilter
| package com.dz.filter; |
| |
| import com.dz.entity.User; |
| import com.dz.service.impl.UserServiceImpl; |
| import com.dz.utils.Base64Utils; |
| import com.dz.utils.Constants; |
| |
| import javax.servlet.*; |
| import javax.servlet.annotation.WebFilter; |
| import javax.servlet.http.Cookie; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.servlet.http.HttpSession; |
| import java.io.IOException; |
| |
| |
| |
| |
| |
| @WebFilter("/login.jsp") |
| public class AutoFilter implements Filter { |
| @Override |
| public void init(FilterConfig filterConfig) throws ServletException { |
| |
| } |
| |
| @Override |
| public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { |
| |
| HttpServletRequest request = (HttpServletRequest)servletRequest; |
| HttpServletResponse response = (HttpServletResponse)servletResponse; |
| |
| Cookie[] cookies =request.getCookies(); |
| |
| if (cookies != null) { |
| |
| String content = null; |
| |
| for (Cookie cookie : cookies) { |
| |
| if (cookie.getName().equals(Constants.AUTO_NAME)) { |
| content = cookie.getValue(); |
| } |
| } |
| |
| if (content != null) { |
| |
| |
| content = Base64Utils.decode(content); |
| |
| String[] split = content.split(Constants.FLAG); |
| String username = split[0]; |
| String password = split[1]; |
| |
| |
| UserServiceImpl userService = new UserServiceImpl(); |
| User user = userService.login(username, password); |
| if (user != null) { |
| |
| HttpSession session = request.getSession(); |
| session.setAttribute("loginUser",user); |
| response.sendRedirect(request.getContextPath() + "/index.jsp"); |
| }else { |
| filterChain.doFilter(servletRequest,servletResponse); |
| } |
| |
| }else { |
| |
| filterChain.doFilter(servletRequest,servletResponse); |
| } |
| }else { |
| |
| filterChain.doFilter(servletRequest,servletResponse); |
| } |
| } |
| |
| @Override |
| public void destroy() { |
| |
| } |
| } |
| |
6.4.2 EncodingFilter
| package com.dz.filter; |
| |
| import javax.servlet.*; |
| import javax.servlet.annotation.WebFilter; |
| import java.io.IOException; |
| |
| |
| |
| |
| |
| @WebFilter(filterName = "EncodingFilter",value = "/*") |
| public class EncodingFilter implements Filter { |
| public void destroy() { |
| } |
| |
| public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { |
| req.setCharacterEncoding("UTF-8"); |
| resp.setContentType("text/html;charset=UTF-8"); |
| |
| chain.doFilter(req, resp); |
| } |
| |
| public void init(FilterConfig config) throws ServletException { |
| |
| } |
| |
| } |
6.5 Utils
6.5.1 Constants
| package com.dz.utils; |
| |
| |
| |
| |
| |
| public class Constants { |
| |
| |
| |
| |
| |
| public static final String TAG = "method"; |
| |
| public static final String FORWARD = "forward:"; |
| |
| public static final String REDIRECT = "redirect:"; |
| |
| public static final String FLAG = ":"; |
| |
| public static final String INDEX = "index"; |
| |
| |
| |
| |
| |
| public static final String HAS_USER = "1"; |
| |
| public static final String NOT_HAS_USER = "0"; |
| |
| public static final String USER_ACTIVE = "1"; |
| |
| public static final String USER_NOT_ACTIVE = "0"; |
| |
| public static final int ROLE_ADMIN = 1; |
| |
| public static final int ROLE_CUSTOMER = 0; |
| |
| |
| |
| |
| |
| public static final int ACTIVE_SUCCESS = 1; |
| |
| public static final int ACTIVE_FAIL = 0; |
| |
| public static final int ACTIVE_ALREADY = 2; |
| |
| |
| |
| |
| |
| public static final String AUTO_NAME = "autoUser"; |
| |
| |
| |
| |
| |
| public static final int DEFAULT_ADDRESS = 1; |
| |
| public static final int COMMON_ADDRESS = 0; |
| |
| } |
| |
6.5.2 DbUtils
| package com.dz.utils; |
| |
| import com.alibaba.druid.pool.DruidDataSource; |
| import com.alibaba.druid.pool.DruidDataSourceFactory; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.sql.Connection; |
| import java.sql.ResultSet; |
| import java.sql.SQLException; |
| import java.sql.Statement; |
| import java.util.Properties; |
| |
| |
| |
| |
| |
| public class DbUtils { |
| private static DruidDataSource ds; |
| private static final ThreadLocal<Connection> THREAD_LOCAL = new ThreadLocal<>(); |
| |
| static { |
| Properties properties = new Properties(); |
| InputStream inputStream = DbUtils.class.getResourceAsStream("/database.properties"); |
| try { |
| properties.load(inputStream); |
| ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| public static Connection getConnection(){ |
| Connection conn = THREAD_LOCAL.get(); |
| try { |
| if (conn == null) { |
| conn = ds.getConnection(); |
| THREAD_LOCAL.set(conn); |
| } |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| return conn; |
| } |
| |
| public static void begin() { |
| Connection conn = null; |
| try { |
| conn = getConnection(); |
| conn.setAutoCommit(false); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| } |
| |
| public static void commit() { |
| Connection conn = null; |
| try { |
| conn = getConnection(); |
| conn.commit(); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } finally { |
| closeAll(conn,null,null); |
| } |
| } |
| |
| public static void rollback() { |
| Connection conn = null; |
| try { |
| conn = getConnection(); |
| conn.rollback(); |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } finally { |
| closeAll(conn,null,null); |
| } |
| } |
| |
| public static void closeAll(Connection conn, Statement statement, ResultSet resultSet) { |
| try { |
| if (resultSet != null) { |
| resultSet.close(); |
| } |
| if (statement != null) { |
| statement.close(); |
| } |
| if (conn != null) { |
| conn.close(); |
| THREAD_LOCAL.remove(); |
| } |
| } catch (SQLException throwables) { |
| throwables.printStackTrace(); |
| } |
| } |
| |
| } |
| |
| |
6.5.3 RandomUtils
| package com.dz.utils; |
| |
| import java.text.SimpleDateFormat; |
| import java.util.Calendar; |
| import java.util.Random; |
| |
| |
| public class RandomUtils { |
| |
| public static String createActive(){ |
| |
| return getTime()+Integer.toHexString(new Random().nextInt(900)+100); |
| } |
| public static String getTime(){ |
| return new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime()); |
| } |
| |
| public static String createOrderId(){ |
| return getTime(); |
| } |
| } |
6.5.4 Base64Utils
| package com.dz.utils; |
| |
| import java.util.Base64; |
| |
| |
| |
| public class Base64Utils { |
| |
| public static String encode(String msg){ |
| return Base64.getEncoder().encodeToString(msg.getBytes()); |
| } |
| |
| public static String decode(String msg){ |
| return new String(Base64.getDecoder().decode(msg)); |
| } |
| } |
6.5.5 EmailUtils
| package com.dz.utils; |
| |
| import com.dz.entity.User; |
| |
| import javax.mail.MessagingException; |
| import javax.mail.Session; |
| import javax.mail.Transport; |
| import javax.mail.internet.InternetAddress; |
| import javax.mail.internet.MimeMessage; |
| import java.io.UnsupportedEncodingException; |
| import java.net.Inet4Address; |
| import java.net.UnknownHostException; |
| import java.util.Date; |
| import java.util.Properties; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public class EmailUtils { |
| public static void sendEmail(User user){ |
| |
| String myAccount = "dzjava137@163.com"; |
| |
| String myPass = "IDKINWUVBANSGGVJ"; |
| |
| String SMTPHost = "smtp.163.com"; |
| |
| Properties prop = new Properties(); |
| prop.setProperty("mail.transport.protocol", "smtp"); |
| prop.setProperty("mail.smtp.host", SMTPHost); |
| prop.setProperty("mail.smtp.auth", "true"); |
| |
| Session session = Session.getDefaultInstance(prop); |
| |
| |
| |
| |
| |
| MimeMessage message = createMsg(session,myAccount,user); |
| |
| try { |
| Transport tran = session.getTransport(); |
| |
| tran.connect(myAccount, myPass); |
| |
| |
| |
| tran.sendMessage(message, message.getAllRecipients()); |
| |
| tran.close(); |
| } catch (MessagingException e) { |
| |
| e.printStackTrace(); |
| } |
| |
| } |
| |
| private static MimeMessage createMsg(Session session, String myAccount, User user) { |
| |
| MimeMessage message = new MimeMessage(session); |
| |
| try { |
| |
| message.setFrom(new InternetAddress(myAccount, "小米", "utf-8")); |
| |
| |
| |
| |
| |
| |
| message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(user.getEmail(), user.getUsername(), "utf-8")); |
| |
| message.setSubject("MyShop商城账号激活邮件","utf-8"); |
| String ip = Inet4Address.getLocalHost().getHostAddress(); |
| String url = "http://"+ip+":8080/user?method=active&c="+ Base64Utils.encode(user.getCode()); |
| |
| message.setContent(user.getUsername()+",你好<br>欢迎注册myshop商城! 请点击链接进行激活:<a href='"+url+"'>点击此处</a>","text/html;charset=utf-8"); |
| |
| message.setSentDate(new Date()); |
| |
| message.saveChanges(); |
| } catch (UnsupportedEncodingException | MessagingException | UnknownHostException e) { |
| |
| e.printStackTrace(); |
| } |
| return message; |
| } |
| } |
| |
6.5.6 MD5Utils
| package com.dz.utils; |
| |
| import java.math.BigInteger; |
| import java.security.MessageDigest; |
| import java.security.NoSuchAlgorithmException; |
| |
| |
| public class MD5Utils { |
| public static String md5(String password){ |
| |
| try { |
| MessageDigest md = MessageDigest.getInstance("MD5"); |
| |
| md.update(password.getBytes()); |
| |
| |
| return new BigInteger(1, md.digest()).toString(16); |
| } catch (NoSuchAlgorithmException e) { |
| |
| e.printStackTrace(); |
| } |
| return null; |
| } |
| } |
6.5.7 PaymentUtil
| package com.dz.utils; |
| |
| import java.io.UnsupportedEncodingException; |
| import java.security.MessageDigest; |
| import java.security.NoSuchAlgorithmException; |
| import java.util.Arrays; |
| |
| public class PaymentUtil { |
| |
| private static String encodingCharset = "UTF-8"; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public static String buildHmac(String p0_Cmd,String p1_MerId, |
| String p2_Order, String p3_Amt, String p4_Cur,String p5_Pid, String p6_Pcat, |
| String p7_Pdesc,String p8_Url, String p9_SAF,String pa_MP,String pd_FrpId, |
| String pr_NeedResponse,String keyValue) { |
| StringBuilder sValue = new StringBuilder(); |
| |
| sValue.append(p0_Cmd); |
| |
| sValue.append(p1_MerId); |
| |
| sValue.append(p2_Order); |
| |
| sValue.append(p3_Amt); |
| |
| sValue.append(p4_Cur); |
| |
| sValue.append(p5_Pid); |
| |
| sValue.append(p6_Pcat); |
| |
| sValue.append(p7_Pdesc); |
| |
| sValue.append(p8_Url); |
| |
| sValue.append(p9_SAF); |
| |
| sValue.append(pa_MP); |
| |
| sValue.append(pd_FrpId); |
| |
| sValue.append(pr_NeedResponse); |
| |
| return PaymentUtil.hmacSign(sValue.toString(), keyValue); |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public static boolean verifyCallback(String hmac, String p1_MerId, |
| String r0_Cmd, String r1_Code, String r2_TrxId, String r3_Amt, |
| String r4_Cur, String r5_Pid, String r6_Order, String r7_Uid, |
| String r8_MP, String r9_BType, String keyValue) { |
| StringBuilder sValue = new StringBuilder(); |
| |
| sValue.append(p1_MerId); |
| |
| sValue.append(r0_Cmd); |
| |
| sValue.append(r1_Code); |
| |
| sValue.append(r2_TrxId); |
| |
| sValue.append(r3_Amt); |
| |
| sValue.append(r4_Cur); |
| |
| sValue.append(r5_Pid); |
| |
| sValue.append(r6_Order); |
| |
| sValue.append(r7_Uid); |
| |
| sValue.append(r8_MP); |
| |
| sValue.append(r9_BType); |
| String sNewString = PaymentUtil.hmacSign(sValue.toString(), keyValue); |
| return sNewString.equals(hmac); |
| } |
| |
| |
| |
| |
| |
| |
| public static String hmacSign(String aValue, String aKey) { |
| byte k_ipad[] = new byte[64]; |
| byte k_opad[] = new byte[64]; |
| byte keyb[]; |
| byte value[]; |
| try { |
| keyb = aKey.getBytes(encodingCharset); |
| value = aValue.getBytes(encodingCharset); |
| } catch (UnsupportedEncodingException e) { |
| keyb = aKey.getBytes(); |
| value = aValue.getBytes(); |
| } |
| |
| Arrays.fill(k_ipad, keyb.length, 64, (byte) 54); |
| Arrays.fill(k_opad, keyb.length, 64, (byte) 92); |
| for (int i = 0; i < keyb.length; i++) { |
| k_ipad[i] = (byte) (keyb[i] ^ 0x36); |
| k_opad[i] = (byte) (keyb[i] ^ 0x5c); |
| } |
| |
| MessageDigest md = null; |
| try { |
| md = MessageDigest.getInstance("MD5"); |
| } catch (NoSuchAlgorithmException e) { |
| |
| return null; |
| } |
| md.update(k_ipad); |
| md.update(value); |
| byte dg[] = md.digest(); |
| md.reset(); |
| md.update(k_opad); |
| md.update(dg, 0, 16); |
| dg = md.digest(); |
| return toHex(dg); |
| } |
| |
| public static String toHex(byte input[]) { |
| if (input == null) |
| return null; |
| StringBuffer output = new StringBuffer(input.length * 2); |
| for (int i = 0; i < input.length; i++) { |
| int current = input[i] & 0xff; |
| if (current < 16) |
| output.append("0"); |
| output.append(Integer.toString(current, 16)); |
| } |
| |
| return output.toString(); |
| } |
| |
| |
| |
| |
| |
| |
| |
| public static String getHmac(String[] args, String key) { |
| if (args == null || args.length == 0) { |
| return (null); |
| } |
| StringBuffer str = new StringBuffer(); |
| for (int i = 0; i < args.length; i++) { |
| str.append(args[i]); |
| } |
| return (hmacSign(str.toString(), key)); |
| } |
| |
| |
| |
| |
| |
| public static String digest(String aValue) { |
| aValue = aValue.trim(); |
| byte value[]; |
| try { |
| value = aValue.getBytes(encodingCharset); |
| } catch (UnsupportedEncodingException e) { |
| value = aValue.getBytes(); |
| } |
| MessageDigest md = null; |
| try { |
| md = MessageDigest.getInstance("SHA"); |
| } catch (NoSuchAlgorithmException e) { |
| e.printStackTrace(); |
| return null; |
| } |
| return toHex(md.digest(value)); |
| |
| } |
| |
| |
| |
| |
| } |
| |
6.5.8 StrUtils
| package com.dz.utils; |
| |
| public class StrUtils { |
| public static boolean empty(String msg){ |
| return msg!=null && msg.length()>0; |
| } |
| public static boolean empty(String...msg){ |
| boolean res = true; |
| for(String s:msg){ |
| res = (s!=null && s.length()>0); |
| if(!res){ |
| break; |
| } |
| } |
| return res; |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步