JAVA高并发秒杀系统构建之——Web层

JAVA高并发秒杀系统构建之——Web层

前言:本文章是《JAVA高并发秒杀系统构建之——Service层》下一篇,主要讲解系统Web层中数据交互设计,url设计等。


首先先介绍一下Restful

这里写图片描述

这里写图片描述


接下来说一下url设计

右下图可知,遵循Restful设计思想的url,其所表达的内容是清晰明确的。
这里写图片描述


接着,是本秒杀系统的url设计,遵循Restful接口设计思想
这里写图片描述

接下来说说SpringMvc注解映射技巧,具体有哪些都在下图。

这里写图片描述


下面是SpringMvc的一些处理技巧

这里写图片描述
这里做一下解释:
1、method=RequestMethod.GET,这里给出了客户端请求的方式为get。
2、@PathVariable(“seckillId”),这里是获得url中的占位符参数。
3、Model 装载最终要返回个用户的数据
4、redirect表示重定向
5、forward表示转发
6、return 返回对应的jsp页面,这里是detail.jsp


下面是SpringMvc中利用Cookie的方法

这里写图片描述
这里说明一下,如果不加required=false的话,当cookie中没有killPhone,则会抛出异常,如果加了,就不会抛出异常了。


下面我们使用SpringMvc实现Restful接口

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

exposer方法,是接口暴露方法,客户端通过ajax请求该方法,方法的返回值为SeckillResult。如果抛出了异常,则重新 生成result,封装接口暴露失败信息,作为ajax的返回值。这里@ResponseBody的作用是告诉ajax,此方法的返回值为json格式,同时,为了进一步保证数据格式和编码方式,利用produces参数指定数据格式和编码方式。

对于exposer方法的返回值SeckillResult类,该类的主要作用是作为ajax的返回值,如下图,其中success值表示是否请求成功;error是错误信息;data值是Exposer(暴露接口类),里面封装了传递到客户端的md5加密值等参数。
这里写图片描述

time方法返回时间


下面是核心方法execute的讲解
首先看看execute方法的头部,跟exposer方法相同,都是将SeckillResult作为ajax的返回值,格式为json,编码方式为utf-8
这里写图片描述

下面是该方法的参数,md5是之前通过exposer方法传递给客户端的信息,现在由客户端再传过来,目的是检验前后md5加密信息是否一致,防止用户篡改url。killPhone藏在cookie里面,由注解@CookieValue获得,为了方便处理killPhone为null的情况,因此加上required=false属性。
这里写图片描述

接着是方法体,这里对Service层抛出的异常做处理,封装不同的SeckillResult,告诉客户端的用户不同的错误信息。
这里写图片描述

Web层的分析设计与编码就到这里,下一篇的话主要是写高并发的一些优化。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
慕课网Java高并发秒杀(课程) 很好的spring,springMVC,mybatis,bootstrap,jQuery,mysql,Restful学习案例 SQL脚本 CREATE DATABASE seckill; USE seckill; -- todo:mysql Ver 5.7.12for Linux(x86_64)中一个表只能有一个TIMESTAMP CREATE TABLE seckill( `seckill_id` BIGINT NOT NUll AUTO_INCREMENT COMMENT '商品库存ID', `name` VARCHAR(120) NOT NULL COMMENT '商品名称', `number` int NOT NULL COMMENT '库存数量', `start_time` TIMESTAMP NOT NULL COMMENT '秒杀开始时间', `end_time` DATETIME NOT NULL COMMENT '秒杀结束时间', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (seckill_id), key idx_start_time(start_time), key idx_end_time(end_time), key idx_create_time(create_time) )ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT='秒杀库存表'; -- 初始化数据 INSERT into seckill(name,number,start_time,end_time) VALUES ('3000元秒杀iphone6',100,'2016-01-01 00:00:00','2016-12-31 00:00:00'), ('2000元秒杀ipad',100,'2016-01-01 00:00:00','2016-05-01 00:00:00'), ('6000元秒杀mac book pro',100,'2016-07-01 00:00:00','2016-12-31 00:00:00'), ('7000元秒杀iMac',100,'2016-05-01 00:00:00','2016-12-31 00:00:00') -- 秒杀成功明细表 -- 用户登录认证相关信息(简化为手机号) CREATE TABLE success_killed( `seckill_id` BIGINT NOT NULL COMMENT '秒杀商品ID', `user_phone` BIGINT NOT NULL COMMENT '用户手机号', `state` TINYINT NOT NULL DEFAULT -1 COMMENT '状态标识:-1:无效 0:成功 1:已付款 2:已发货', `create_time` TIMESTAMP NOT NULL COMMENT '创建时间', PRIMARY KEY(seckill_id,user_phone),/*联合主键*/ KEY idx_create_time(create_time) )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='秒杀成功明细表' SHOW CREATE TABLE seckill\G;#显示表的创建信息 Mybatis两个问题?①sql写在哪里?②怎么实现DAO接口?第一个问题:注解或者XML选择XML.第二个问题:Mapper自动实现DAO接口或者API编程方式实现DAO接口.选择Mapper.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值