-
投影片~~~~~~
查看全部 -
投影片~~~~~~~~~
查看全部 -
投影片~~~~~~~
查看全部 -
@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)提供一系列功能:數(shù)據(jù)綁定,?數(shù)字和日期的format?@NumberFormat,@DateTimeFormat, ??????????xml,json默認讀寫支持-->???? ???????<mvc:annotation-driven/>???? ???????<!--servlet-mapping映射路徑?"/"--> ???????<!--2.?靜態(tài)資源默認servlet默認配置???????? ???????????1).加入對靜態(tài)資源的處理:?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>
查看全部 -
## 細節(jié)處理
## 注解映射技巧
## HTTP請求地址映射原理?
mvc.xml
1. DispatcherServlet2. DefaultAnnotation HandlerMapping
3. DefaultAnnotation HandlerAdapter
4. SeckillController
5. ModelAndView /seckill/list
6. InternalResource ViewResolver
7. Model->list.jsp
8. user
查看全部 -
## Handler開發(fā)
## SpringMVC運行流程
查看全部 -
## 秒殺API的URL設計
查看全部 -
## 詳情頁流程邏輯
查看全部 -
1.前端交互設計? 由產品、前端、后端設計完成
2.URL設計
3.SpringMVC使用技巧
4.SpringMVC運行流程
5.Bootstrap和JS使用
查看全部 -
CDN的插件src
查看全部 -
SpringMVC運行流程
用戶發(fā)送請求,映射到DispatcherServlet(中央控制器Servlet)
默認用到DefaultAnnotationHandlerMapping,用于映射URL,URL對應到具體的Handler
使用默認的DefaultAnnotationHandlerAdapter,用于做Handler適配,最終會銜接到自己做的藍色部分④Controller,如果其中用到intercept(攔截器)的話也會把攔截器綁定到流程當中
DefaultAnnotationHandlerAdapter產出⑤ModelAndView,同時交互到DispatcherServlet中
DispatcherServlet發(fā)現(xiàn)應用的是InternalResourceViewResolver(默認的jsp的view)
DispatcherServlet把⑦Model和list.jsp相結合,反饋給用戶
實際開發(fā)的是藍色部分Controller,其他部分用注解形式完成
HTTP請求地址映射原理
注解映射技巧
請求方法細節(jié)處理
請求參數(shù)綁定
請求方式限制
請求轉發(fā)和重定向
數(shù)據(jù)模型賦值
返回json數(shù)據(jù)
cookie訪問
例子:
PathVariable:占位符匹配,通過該注解綁定參數(shù),對應到value中的占位符,當用戶傳入URL時,會獲取URL中的seckillId部分傳入detail方法中
method:該請求只允許GET方法訪問
model:承載返回給用戶的數(shù)據(jù);model.addAttribute傳入seckill(通過key-value方式映射),在頁面中可以通過seckill拿到model中的數(shù)據(jù)
redirect/forward:通過該字符串,控制請求的是重定向/轉發(fā)
最后return“detali”字符串,根據(jù)配置默認返回的是對應的jsp頁面,即detail.jsp,把model的數(shù)據(jù)傳遞給detail.jsp做相應的數(shù)據(jù)替換,最終輸出該jsp的html內容
返回json數(shù)據(jù):
produces:返回http請求的header
ResponseBody:返回json數(shù)據(jù),SeckillResult result會把最終數(shù)據(jù)封裝成json返回給瀏覽器
Cookie訪問:
CookieValue:required=false,不強制傳入cookie,當cookie中沒有對應的killPhone時不做攔截,也進入到方法中,后續(xù)會報異常
查看全部 -
SpringMVC運行流程
用戶發(fā)送請求,映射到DispatcherServlet(中央控制器Servlet)
默認用到DefaultAnnotationHandlerMapping,用于映射URL,URL對應到具體的Handler
使用默認的DefaultAnnotationHandlerAdapter,用于做Handler適配,最終會銜接到自己做的藍色部分④Controller,如果其中用到intercept(攔截器)的話也會把攔截器綁定到流程當中
DefaultAnnotationHandlerAdapter產出⑤ModelAndView,同時交互到DispatcherServlet中
DispatcherServlet發(fā)現(xiàn)應用的是InternalResourceViewResolver(默認的jsp的view)
DispatcherServlet把⑦Model和list.jsp相結合,反饋給用戶
實際開發(fā)的是藍色部分Controller,其他部分用注解形式完成
HTTP請求地址映射原理
注解映射技巧
請求方法細節(jié)處理
請求參數(shù)綁定
請求方式限制
請求轉發(fā)和重定向
數(shù)據(jù)模型賦值
返回json數(shù)據(jù)
cookie訪問
例子:
PathVariable:占位符匹配,通過該注解綁定參數(shù),對應到value中的占位符,當用戶傳入URL時,會獲取URL中的seckillId部分傳入detail方法中
method:該請求只允許GET方法訪問
model:承載返回給用戶的數(shù)據(jù);model.addAttribute傳入seckill(通過key-value方式映射),在頁面中可以通過seckill拿到model中的數(shù)據(jù)
redirect/forward:通過該字符串,控制請求的是重定向/轉發(fā)
最后return“detali”字符串,根據(jù)配置默認返回的是對應的jsp頁面,即detail.jsp,把model的數(shù)據(jù)傳遞給detail.jsp做相應的數(shù)據(jù)替換,最終輸出該jsp的html內容
返回json數(shù)據(jù):
produces:返回http請求的header
ResponseBody:返回json數(shù)據(jù),SeckillResult result會把最終數(shù)據(jù)封裝成json返回給瀏覽器
Cookie訪問:
CookieValue:required=false,不強制傳入cookie,當cookie中沒有對應的killPhone時不做攔截,也進入到方法中,后續(xù)會報異常
查看全部 -
SpringMVC運行流程
用戶發(fā)送請求,映射到DispatcherServlet(中央控制器Servlet)
默認用到DefaultAnnotationHandlerMapping,用于映射URL,URL對應到具體的Handler
使用默認的DefaultAnnotationHandlerAdapter,用于做Handler適配,最終會銜接到自己做的藍色部分④Controller,如果其中用到intercept(攔截器)的話也會把攔截器綁定到流程當中
DefaultAnnotationHandlerAdapter產出⑤ModelAndView,同時交互到DispatcherServlet中
DispatcherServlet發(fā)現(xiàn)應用的是InternalResourceViewResolver(默認的jsp的view)
DispatcherServlet把⑦Model和list.jsp相結合,反饋給用戶
實際開發(fā)的是藍色部分Controller,其他部分用注解形式完成
查看全部 -
SpringMVC運行流程
用戶發(fā)送請求,映射到DispatcherServlet(中央控制器Servlet)
默認用到DefaultAnnotationHandlerMapping,用于映射URL,URL對應到具體的Handler
使用默認的DefaultAnnotationHandlerAdapter,用于做Handler適配,最終會銜接到自己做的藍色部分④Controller
DefaultAnnotationHandlerAdapter產出⑤ModelAndView,同時交互到DispatcherServlet中
DispatcherServlet發(fā)現(xiàn)應用的是InternalResourceViewResolver(默認的jsp的view)
DispatcherServlet把⑦Model和list.jsp相結合,反饋給用戶
實際開發(fā)的是藍色部分Controller,其他部分用注解形式完成
查看全部 -
SpringMVC運行流程
用戶發(fā)送請求,映射到DispatcherServlet(中央控制器Servlet)
默認用到DefaultAnnotationHandlerMapping,用于映射URL,URL對應到具體的Handler
使用默認的DefaultAnnotationHandlerAdapter,用于做Handler適配,最終會銜接到自己做的藍色部分④Controller
DefaultAnnotationHandlerAdapter產出⑤ModelAndView,同時交互到DispatcherServlet中
DispatcherServlet發(fā)現(xiàn)應用的是InternalResourceViewResolver(默認的jsp的view)
DispatcherServlet把⑦Model和list.jsp相結合,反饋給用戶
實際開發(fā)的是藍色部分Controller,其他部分用注解形式完成
查看全部 -
SpringMVC運行流程
用戶發(fā)送請求,映射到DispatcherServlet(中央控制器Servlet)
默認用到DefaultAnnotationHandlerMapping,用于映射URL,URL對應到具體的Handler
使用默認的DefaultAnnotationHandlerAdapter,用于做Handler適配,最終會銜接到自己做的藍色部分④SeckillController
DefaultAnnotationHandlerAdapter產出⑤ModelAndView,同時交互到DispatcherServlet中
DispatcherServlet發(fā)現(xiàn)應用的是InternalResourceViewResolver(默認的jsp的view)
DispatcherServlet把⑦Model和list.jsp相結合,反饋給用戶
實際開發(fā)的是藍色部分SeckillController,其他部分用注解形式完成
查看全部 -
SpringMVC運行流程
用戶發(fā)送請求,映射到DispatcherServlet(中央控制器Servlet)
默認用到DefaultAnnotationHandlerMapping,用于映射URL,URL對應到具體的Handler
使用默認的DefaultAnnotationHandlerAdapter,用于做Handler適配,最終會銜接到自己做的藍色部分④SeckillController
DefaultAnnotationHandlerAdapter產出⑤ModelAndView,同時交互到DispatcherServlet中
DispatcherServlet發(fā)現(xiàn)應用的是InternalResourceViewResolver(默認的jsp的view)
DispatcherServlet把⑦Model和list.jsp相結合,反饋給用戶
實際開發(fā)的是藍色部分SeckillController,其他部分用注解形式完成
查看全部 -
Seckill的URL設計
查看全部 -
秒殺API的URL設計
查看全部 -
秒殺API的URL設計
查看全部 -
URL設計
集合應為名詞
查看全部 -
Restful規(guī)范
POST和PUT的區(qū)別體現(xiàn)在冪等性上:非冪等的操作用POST,PUT為冪等操作,一般兩者沒有明顯的區(qū)分
查看全部 -
POST表示狀態(tài)的轉移
{seckillId}表示具體的資源
execution表示執(zhí)行操作(名詞)
查看全部 -
aa
查看全部 -
springMVC運行流程
查看全部
舉報