为了账号安全,请及时绑定邮箱和手机立即绑定
  • 投影片~~~~~~







    查看全部
  • 投影片~~~~~~~~~



    查看全部
  • 投影片~~~~~~~


    查看全部
  • @RestController
    @RequestMapping("/seckill")
    public class SecKillController {
        Logger logger = LoggerFactory.getLogger(getClass());
    
        @Autowired
        SecKillService secKillService;
    
        @RequestMapping(name = "/list",method = RequestMethod.GET)
        public String list(Model model){
            List<SecKill> list = secKillService.getSecKillList();
            model.addAttribute("list",list);
            return "list";
        }
    
        @RequestMapping(value = "/{seckillId}/detail",method = RequestMethod.GET)
        public String detail(@PathVariable("seckillId") Long seckillId,Model model){
            if(seckillId == null){
                return "redirect:/seckill/list";
            }
            SecKill secKill = secKillService.getById(seckillId);
            if(secKill==null){
                return "redirect:/seckill/list";
            }
            model.addAttribute("secKill",secKill);
            return "detail";
        }
    
        @RequestMapping(value = "/{seckillId}/exposer"
                ,method = RequestMethod.POST
                ,produces = {"application/json;charset=UTF-8"})
        @ResponseBody
        public SecKillResult<Exposer> exposer(Long seckillId){
            SecKillResult<Exposer> result;
            try {
                Exposer exposer = secKillService.exportSecKillUrl(seckillId);
                result = new SecKillResult<Exposer>(true,exposer);
            }catch (Exception e){
                logger.error(e.getMessage(),e);
                result = new SecKillResult<Exposer>(false,e.getMessage());
            }
            return result;
        }
    
        @RequestMapping(value = "/{seckillId}/{md5}/execution"
                ,method = RequestMethod.POST
                ,produces = {"application/json;charset=UTF-8"})
        @ResponseBody
        public SecKillResult<SecKillExecution> execute(@PathVariable("seckillId") Long seckillId
                ,@PathVariable("md5") String md5
                ,@CookieValue(value = "killPhone",required = false) Long phone){
            if(null==phone){
                return  new SecKillResult<SecKillExecution>(false,"未注册");
            }
            //SecKillResult<SecKillExecution> result;
            try{
                SecKillExecution secKillExecution = secKillService.executesSecKill(seckillId,phone,md5);
                return new SecKillResult<SecKillExecution>(true,secKillExecution);
            }catch(SecKillCloseException e){
                SecKillExecution secKillExecution = new SecKillExecution(seckillId, SecKillStatEnum.END);
                return new SecKillResult<SecKillExecution>(false,secKillExecution);
            }catch (RepeatKillException e){
                SecKillExecution secKillExecution = new SecKillExecution(seckillId, SecKillStatEnum.REPEAT_KILL);
                return new SecKillResult<SecKillExecution>(false,secKillExecution);
            }
            catch (Exception e){
                logger.error(e.getMessage(),e);
                SecKillExecution secKillExecution = new SecKillExecution(seckillId, SecKillStatEnum.INNER_ERROR);
                return new SecKillResult<SecKillExecution>(false,secKillExecution);
            }
        }
    
        @RequestMapping(value = "/time/now",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"})
        @ResponseBody
        public SecKillResult<Long> time(){
            Date now = new Date();
            return new SecKillResult<>(true,now.getTime());
        }
    }
    查看全部
  • <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns=" 
           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. 配置MVC注解模式-->
           <!--简化配置:        
           (1)自动注册DefaultAnnotationHandlerMapping, AnnotationMethodHandlerAdapter        
           (2)提供一系列功能:数据绑定, 数字和日期的format @NumberFormat,@DateTimeFormat,
              xml,json默认读写支持-->    
           <mvc:annotation-driven/>    
           <!--servlet-mapping映射路径 "/"-->
           <!--2. 静态资源默认servlet默认配置        
               1).加入对静态资源的处理: js, git ,jpg        
               2).允许使用"/"作为整体映射-->    
           <mvc:default-servlet-handler />    
           <!--3. 配置jsp显示ViewResolver-->    
           <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                   <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>        
                   <property name="prefix" value="/WEN-INF/jsp"/>        
                   <property name="suffix" value=".jsp"/>
           </bean>    
           <!--扫描Web相关的bean-->    
           <context:component-scan base-package="org.seckill.controller"/>
      </beans>
    查看全部
  • ## 细节处理



    ## 注解映射技巧




    ## HTTP请求地址映射原理 



    mvc.xml
    1. DispatcherServlet

    2. DefaultAnnotation HandlerMapping

    3. DefaultAnnotation HandlerAdapter

    4. SeckillController

    5. ModelAndView /seckill/list

    6. InternalResource ViewResolver

    7. Model->list.jsp

    8. user

    查看全部
  • ## Handler开发


    ## SpringMVC运行流程

    查看全部
  • ## 秒杀API的URL设计


    查看全部
  • ## 详情页流程逻辑

    查看全部
  • 1.前端交互设计  由产品、前端、后端设计完成

    2.URL设计

    3.SpringMVC使用技巧

    4.SpringMVC运行流程

    5.Bootstrap和JS使用

    查看全部
    0 采集 收起 来源:web层课程总结

    2021-10-29

  • CDN的插件src

    查看全部
  • SpringMVC运行流程

    1. 用户发送请求,映射到DispatcherServlet(中央控制器Servlet)

    2. 默认用到DefaultAnnotationHandlerMapping,用于映射URL,URL对应到具体的Handler

    3. 使用默认的DefaultAnnotationHandlerAdapter,用于做Handler适配,最终会衔接到自己做的蓝色部分④Controller,如果其中用到intercept(拦截器)的话也会把拦截器绑定到流程当中

    4. DefaultAnnotationHandlerAdapter产出⑤ModelAndView,同时交互到DispatcherServlet中

    5. DispatcherServlet发现应用的是InternalResourceViewResolver(默认的jsp的view)

    6. DispatcherServlet把⑦Model和list.jsp相结合,反馈给用户

    实际开发的是蓝色部分Controller,其他部分用注解形式完成


    HTTP请求地址映射原理


    注解映射技巧


    请求方法细节处理

    1. 请求参数绑定

    2. 请求方式限制

    3. 请求转发和重定向

    4. 数据模型赋值

    5. 返回json数据

    6. cookie访问

    例子:

    http://img1.sycdn.imooc.com//6167fe71000132a205540306.jpg

    1. PathVariable:占位符匹配,通过该注解绑定参数,对应到value中的占位符,当用户传入URL时,会获取URL中的seckillId部分传入detail方法中

    2. method:该请求只允许GET方法访问

    3. model:承载返回给用户的数据;model.addAttribute传入seckill(通过key-value方式映射),在页面中可以通过seckill拿到model中的数据

    4. redirect/forward:通过该字符串,控制请求的是重定向/转发

    5. 最后return“detali”字符串,根据配置默认返回的是对应的jsp页面,即detail.jsp,把model的数据传递给detail.jsp做相应的数据替换,最终输出该jsp的html内容

    返回json数据:

    1. produces:返回http请求的header

    2. ResponseBody:返回json数据,SeckillResult result会把最终数据封装成json返回给浏览器

    Cookie访问:

    CookieValue:required=false,不强制传入cookie,当cookie中没有对应的killPhone时不做拦截,也进入到方法中,后续会报异常

    查看全部
  • SpringMVC运行流程

    1. 用户发送请求,映射到DispatcherServlet(中央控制器Servlet)

    2. 默认用到DefaultAnnotationHandlerMapping,用于映射URL,URL对应到具体的Handler

    3. 使用默认的DefaultAnnotationHandlerAdapter,用于做Handler适配,最终会衔接到自己做的蓝色部分④Controller,如果其中用到intercept(拦截器)的话也会把拦截器绑定到流程当中

    4. DefaultAnnotationHandlerAdapter产出⑤ModelAndView,同时交互到DispatcherServlet中

    5. DispatcherServlet发现应用的是InternalResourceViewResolver(默认的jsp的view)

    6. DispatcherServlet把⑦Model和list.jsp相结合,反馈给用户

    实际开发的是蓝色部分Controller,其他部分用注解形式完成


    HTTP请求地址映射原理


    注解映射技巧


    请求方法细节处理

    1. 请求参数绑定

    2. 请求方式限制

    3. 请求转发和重定向

    4. 数据模型赋值

    5. 返回json数据

    6. cookie访问

    例子:

    http://img1.sycdn.imooc.com//6167fe71000132a205540306.jpg

    1. PathVariable:占位符匹配,通过该注解绑定参数,对应到value中的占位符,当用户传入URL时,会获取URL中的seckillId部分传入detail方法中

    2. method:该请求只允许GET方法访问

    3. model:承载返回给用户的数据;model.addAttribute传入seckill(通过key-value方式映射),在页面中可以通过seckill拿到model中的数据

    4. redirect/forward:通过该字符串,控制请求的是重定向/转发

    5. 最后return“detali”字符串,根据配置默认返回的是对应的jsp页面,即detail.jsp,把model的数据传递给detail.jsp做相应的数据替换,最终输出该jsp的html内容

    返回json数据:

    1. produces:返回http请求的header

    2. ResponseBody:返回json数据,SeckillResult result会把最终数据封装成json返回给浏览器

    Cookie访问:

    CookieValue:required=false,不强制传入cookie,当cookie中没有对应的killPhone时不做拦截,也进入到方法中,后续会报异常

    查看全部
  • SpringMVC运行流程

    1. 用户发送请求,映射到DispatcherServlet(中央控制器Servlet)

    2. 默认用到DefaultAnnotationHandlerMapping,用于映射URL,URL对应到具体的Handler

    3. 使用默认的DefaultAnnotationHandlerAdapter,用于做Handler适配,最终会衔接到自己做的蓝色部分④Controller,如果其中用到intercept(拦截器)的话也会把拦截器绑定到流程当中

    4. DefaultAnnotationHandlerAdapter产出⑤ModelAndView,同时交互到DispatcherServlet中

    5. DispatcherServlet发现应用的是InternalResourceViewResolver(默认的jsp的view)

    6. DispatcherServlet把⑦Model和list.jsp相结合,反馈给用户

    实际开发的是蓝色部分Controller,其他部分用注解形式完成

    查看全部
  • SpringMVC运行流程

    1. 用户发送请求,映射到DispatcherServlet(中央控制器Servlet)

    2. 默认用到DefaultAnnotationHandlerMapping,用于映射URL,URL对应到具体的Handler

    3. 使用默认的DefaultAnnotationHandlerAdapter,用于做Handler适配,最终会衔接到自己做的蓝色部分④Controller

    4. DefaultAnnotationHandlerAdapter产出⑤ModelAndView,同时交互到DispatcherServlet中

    5. DispatcherServlet发现应用的是InternalResourceViewResolver(默认的jsp的view)

    6. DispatcherServlet把⑦Model和list.jsp相结合,反馈给用户

    实际开发的是蓝色部分Controller,其他部分用注解形式完成

    查看全部
  • SpringMVC运行流程

    1. 用户发送请求,映射到DispatcherServlet(中央控制器Servlet)

    2. 默认用到DefaultAnnotationHandlerMapping,用于映射URL,URL对应到具体的Handler

    3. 使用默认的DefaultAnnotationHandlerAdapter,用于做Handler适配,最终会衔接到自己做的蓝色部分④Controller

    4. DefaultAnnotationHandlerAdapter产出⑤ModelAndView,同时交互到DispatcherServlet中

    5. DispatcherServlet发现应用的是InternalResourceViewResolver(默认的jsp的view)

    6. DispatcherServlet把⑦Model和list.jsp相结合,反馈给用户

    实际开发的是蓝色部分Controller,其他部分用注解形式完成

    查看全部
  • SpringMVC运行流程

    1. 用户发送请求,映射到DispatcherServlet(中央控制器Servlet)

    2. 默认用到DefaultAnnotationHandlerMapping,用于映射URL,URL对应到具体的Handler

    3. 使用默认的DefaultAnnotationHandlerAdapter,用于做Handler适配,最终会衔接到自己做的蓝色部分④SeckillController

    4. DefaultAnnotationHandlerAdapter产出⑤ModelAndView,同时交互到DispatcherServlet中

    5. DispatcherServlet发现应用的是InternalResourceViewResolver(默认的jsp的view)

    6. DispatcherServlet把⑦Model和list.jsp相结合,反馈给用户

    实际开发的是蓝色部分SeckillController,其他部分用注解形式完成

    查看全部
  • SpringMVC运行流程

    1. 用户发送请求,映射到DispatcherServlet(中央控制器Servlet)

    2. 默认用到DefaultAnnotationHandlerMapping,用于映射URL,URL对应到具体的Handler

    3. 使用默认的DefaultAnnotationHandlerAdapter,用于做Handler适配,最终会衔接到自己做的蓝色部分④SeckillController

    4. DefaultAnnotationHandlerAdapter产出⑤ModelAndView,同时交互到DispatcherServlet中

    5. DispatcherServlet发现应用的是InternalResourceViewResolver(默认的jsp的view)

    6. DispatcherServlet把⑦Model和list.jsp相结合,反馈给用户

    实际开发的是蓝色部分SeckillController,其他部分用注解形式完成

    查看全部
  • Seckill的URL设计

    查看全部
  • 秒杀API的URL设计

    查看全部
  • 秒杀API的URL设计

    查看全部
  • URL设计

    集合应为名词

    查看全部
  • Restful规范

    POST和PUT的区别体现在幂等性上:非幂等的操作用POST,PUT为幂等操作,一般两者没有明显的区分

    查看全部
  • POST表示状态的转移

    {seckillId}表示具体的资源

    execution表示执行操作(名词)

    查看全部
  • http://img1.sycdn.imooc.com//6055679e0001644908630564.jpgaa

    查看全部
  • springMVC运行流程

    查看全部
    0 采集 收起 来源:web层课程总结

    2021-01-31

首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
《Java高并发秒杀API》是系列课程,共四门课,分别为业务分析和DAO层,Service层,Web层和高并发优化。本门课程是第二门课程,学习前需要了解如下知识: 1、精通JavaWeb基础 2、熟悉SpringMVC、Spring和MyBatis框架 3、学习《Java高并发秒杀API》系列的前两门课程
老师告诉你能学到什么?
1、掌握秒杀业务 2、能够进行SpringMVC+Spring+MyBatis的整合开发 3、使⽤用SpringMVC整合spring,实现秒杀restful接⼝

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!