1.2 獲取使用者資訊
1.2.1 問題分析
- 需要回去使用者資訊時需要首先獲取Request物件,如果沒有改物件則需要進行手動的傳參.這樣的程式碼耦合性太高.不建議使用
1.3 SpringMVC攔截器
1.3.1 ThreadLocal
說明:保證當前執行緒內實現資料的共享.線上程安全問題中經常使用
說明:通過ThreadLocal本地執行緒變數,可以實現當前執行緒的資料的共享.但是ThreadLocal中的存入資料使用set(). 獲取資料呼叫的get()..但是每次只能獲取單個資料.如果有多個資料進行存取,使用Map集合結構
1.3.2 ThreadLocal工具類
說明: package com.jt.web.util;
public class UserThreadLocal { //建立本地執行緒變數 private static ThreadLocal<User> threadLocal = new ThreadLocal<User>(); public static User get(){ return threadLocal.get(); } public static void set(User user){ threadLocal.set(user); } }
1.3.3 攔截器實現
說明: package com.jt.web.intercept;
//定義SpringMVC的攔截器 public class WebInterceptor implements HandlerInterceptor{ @Autowired private JedisCluster jedisCluster; private static ObjectMapper objectMapper = new ObjectMapper(); //在執行請求之前執行 /** * 說明:如果使用者沒有登陸京淘系統,則應該在點選購物車按鈕時,訪問後臺 * 資料前生效. * 思路: * 1.從request物件中獲取ticket資訊 * 2.判斷ticket資訊中是否含有資料. * 如果有資料: * 從redis中獲取userJSON資料. * 如果資料不為null * 獲取user資訊,之後儲存~~~~~~~ * 除此之外 直接跳轉到登陸頁面 * * 3.引數解析 * return false; 表示攔截 不能訪問目標url * return true ; 表示放行 可以訪問目標url */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String ticket = CookieUtils.getCookieValue(request, "JT_TICKET"); if(!StringUtils.isEmpty(ticket)){ //表示資料不為null String userJSON = jedisCluster.get(ticket); if(!StringUtils.isEmpty(userJSON)){ //redis中的資料不為null User user = objectMapper.readValue(userJSON, User.class); //通過ThreadLocal實現資料傳輸 UserThreadLocal.set(user); return true; //表示放行 } } //如果上述程式碼不能執行.則跳轉登入頁面 response.sendRedirect("/user/login.html"); return false; } }
1.3.4 攔截器配置
<!--定義MVC的攔截器 --> <mvc:interceptors> <mvc:interceptor> <!--表示攔截的路徑 /* 攔截一級目錄 /** 攔截所有目錄 --> <mvc:mapping path="/cart/**"/> <bean class="com.jt.web.intercept.WebInterceptor"/> </mvc:interceptor> </mvc:interceptors>
2.3 訂單提交
2.3.1 訂單的表設計
說明:訂單的整個的構成由3部分構成,分別是訂單表Order 訂單商品表 訂單物流表.
在三張表中
order 與 orderItem是一對多的對應關係
order 與 orderShipping 是一對一的對應關係
在維護時,通過order表來維護關聯關係
2.3.2 賦值分析
- el表示式遍歷
說明:上述的name寫法表示,為一個名為orderItems的list集合賦值.
其中${status.index}表示正在遍歷的下標
orderItems[${status.index}].itemId 表示
為List<OrderItem物件> orderItems 中的OrderItem物件的itemId屬性賦值.
2.3.3 頁面分析
分析JS
2.3.4 編輯前端Controller
說明:包路徑package com.jt.web.controller;
2.3.5 編輯前端Service
2.3.6 介面檔案定義
請求方法 |
POST |
URL |
http://order.jt.com/order/create |
返回值 |
orderId 訂單編號 使用String型別接收返回值 採用SysResult物件返回 |
2.3.7 定義後臺POJO物件