首页 文章 精选 留言 我的

精选列表

搜索[环境层隔离],共10000篇文章
优秀的个人博客,低调大师

Java高并发秒杀Api-web 层

章节目录 前端交互设计 Restful Spring MVC理论 整合配置MVC框架 bootstrap+jquery 福利彩蛋 前端交互设计 前端交互设计 详情页流程逻辑 Restful接口 什么是Restful Restful 是接口设计规范 一种优雅的URI表达方式 资源的状态和状态转移 获取的是资源的状态,删除的时候,其实是更改资源的状态 put、post、delete Restful示例 image.png image.png 不同的请求方法代表着对资源的不同操作类型。操作类型应与资源的接下来发生的状态状态转移对应起来 GET 请求是幂等性的 URL设计 url设计 秒杀Api设计 Spring MVC理论 理论部分 围绕handler开发 image.png Spring mvc 的运行流程 image.png 解释: 用户请求->前端控制器->寻找对应处理请求的handler,默认为DefaultAnnotationHandlerMapping->DefaultAnnotationHandlerAdapter->寻找处理请求的Controller->请求生成ModelAndView至中央控制器->中央控制器将数据转发给InternalResourceViewResolver去解析->解析完成的数据及页面结构,组合后,被生成资源,返回给用户。 HTTP请求映射的原理 image.png 默认使用DefaultAnnotationHandlerMapping->handler方法 注解映射技巧 @RequestMapping 注解 (1) 支持标准标准的URL (2) Ant风格URL (3) 带{xxx}占位符的URL 注解映射技巧 请求方法细节处理 (1) 请求参数绑定 (2) 请求方式限制 (3) 请求转发与重定向 (4) 数据模型赋值 (5) 返回json数据 (6) cookie的访问 请求参数绑定、重定向与转发、model数据绑定 返回json数据 cookie 数据 整合配置Spring MVC配置文件 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true"> <!-- 修改servlet版本为3.1 --> <!-- 配置DispatcherServlet--> <servlet> <servlet-name>seckill-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置SpringMVC需要加载的配置文件 Spring-dao.xml, spring-service.xml, spring-web.xml MyBatis -> Spring -> SpringMVC --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-*.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>seckill-dispatcher</servlet-name> <!-- 默认匹配所有的请求--> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> Spring MVC 配置 spring-web.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--配置Spring MVC--> <!--1:开启Spring MVC注解模式--> <!--简化配置 (1):自动注册DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter url->handler 映射 (2):默认提供一系列功能、数据绑定、数字与日期format @NumberFormat @DateTimeFormat xml json 默认读写支持 --> <mvc:annotation-driven/> <!--servlet-mapping 映射路径 /--> <!--静态资源配置,默认servlet配置--> <!-- 1:加入对静态资源的处理:js、png 2:允许使用"/"作为映射 --> <mvc:default-servlet-handler/> <!--配置jsp 显示 view Resolver--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!--扫描web相关的bean--> <context:component-scan base-package="org.seckill.web"/> </beans> **SecKillController ** package org.seckill.web; import org.seckill.domain.SecKill; import org.seckill.dto.Exposer; import org.seckill.dto.SecKillResult; import org.seckill.service.SecKillService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller @RequestMapping("/seckill") //url:/模块/资源/{id}/细分 public class SecKillController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private SecKillService secKillService; /** * 获取秒杀商品list * * @param model * @return */ @RequestMapping(value = "/list", method = RequestMethod.GET) public String list(Model model) { //1.获取列表页面 List<SecKill> secKillList = secKillService.getSecKillList(); model.addAttribute("list", secKillList); //2.返回页面并携带model 数据list.jsp + model = ModelAndView return "list"; } /** * 接收参数、参数验证、业务逻辑调用并处理 * 获取秒杀商品详情 * * @param model * @param secKillId * @return */ @RequestMapping(value = "/{secKillId}/detial", method = RequestMethod.GET) public String detial(Model model, @PathVariable("secKillId") Long secKillId) { if (secKillId == null) {//请求重定向到list页面 return "redirect:/seckill/list"; } SecKill secKill = secKillService.getSecKillById(secKillId); if (secKill == null) { return "forward:/seckill/list"; } model.addAttribute("seckill", secKill); return "detial"; } /** * ajax接口-返回类型 json * 获取秒杀曝露地址 * * @param secKillId */ @RequestMapping(value = "/{secKillId}/exposer", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}//告诉浏览器返回数据类型是json ) @ResponseBody public SecKillResult<Exposer> /*TODO*/ exposer(@PathVariable("secKillId") Long secKillId) { SecKillResult<Exposer> result; try { Exposer exposer = secKillService.exportSecKillUrl(secKillId);//返回秒杀地址 result = new SecKillResult<Exposer>(true, exposer); } catch (Exception e) { logger.error(e.getMessage()); result = new SecKillResult<Exposer>(false, e.getMessage()); } return result; } } 福利彩蛋 职位:腾讯OMG 广告后台高级开发工程师; Base:深圳; 场景:海量数据,To B,To C,场景极具挑战性。 基础要求: 熟悉常用数据结构与算法; 熟悉常用网络协议,熟悉网络编程; 熟悉操作系统,有线上排查问题经验; 熟悉MySQL,oracle; 熟悉JAVA,GoLang,c++其中一种语言均可; 可内推,欢迎各位优秀开发道友私信[微笑] 期待关注我的开发小哥哥,小姐姐们私信我,机会很好,平台对标抖音,广告生态平台,类似Facebook 广告平台,希望你们用简历砸我~ 联系方式 微信 13609184526

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册