亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

JavaWeb簡易購物車實(shí)戰(zhàn):基于Session的內(nèi)存購物車實(shí)現(xiàn)與避坑指南

JavaWeb簡易購物車實(shí)戰(zhàn):基于Session的內(nèi)存購物車實(shí)現(xiàn)與避坑指南 簡介這是一套基于JavaWeb技術(shù)實(shí)現(xiàn)的簡易購物車系統(tǒng)完整源碼適合Java初學(xué)者及希望鞏固Web開發(fā)基礎(chǔ)的中級開發(fā)者。代碼圍繞Servlet與JSP、Session會話管理、JDBC數(shù)據(jù)庫交互、MVC設(shè)計模式、JSTL與EL表達(dá)式等核心知識點(diǎn)展開覆蓋商品展示、加入購物車、修改數(shù)量、刪除商品及訂單處理等典型業(yè)務(wù)流程并附有開發(fā)文檔與項(xiàng)目安裝說明能幫助讀者理清從頁面請求到數(shù)據(jù)持久化的完整鏈路。壓縮包共54個文件包含14個Java源文件、14個編譯后的class文件、6個JSP頁面、數(shù)據(jù)庫相關(guān)配置及properties、xml等輔助資源整體大小約1.58MB目錄結(jié)構(gòu)清晰適合直接導(dǎo)入Eclipse或IntelliJ IDEA配合Tomcat運(yùn)行學(xué)習(xí)。已有4125人瀏覽學(xué)習(xí)。通過研讀源碼和筆記可快速掌握J(rèn)avaWeb項(xiàng)目從環(huán)境搭建、數(shù)據(jù)庫設(shè)計到功能實(shí)現(xiàn)的常見思路對提升實(shí)際項(xiàng)目開發(fā)能力很有幫助。1. 什么是 javaWeb 簡易購物車它不是一張表而是會話里的一塊內(nèi)存很多人第一次接觸 javaWeb 購物車時會下意識地想把「購物車」設(shè)計成數(shù)據(jù)庫中的一張表加購就是 insert改數(shù)量就是 update刪除就是 delete。這個思路不算錯但對一個網(wǎng)頁端的簡易購物車來說它把問題想復(fù)雜了。真正的購物車在絕大多數(shù)教學(xué)項(xiàng)目和基礎(chǔ)實(shí)踐中只是一個放在 HttpSession 里的內(nèi)存結(jié)構(gòu)。用戶點(diǎn)一下「加入購物車」服務(wù)端往 Session 里塞一個 HashMap用戶清空購物車服務(wù)端把這個 Session 屬性刪掉。整個過程不碰數(shù)據(jù)庫也不落盤。這么設(shè)計的第一層原因是簡單不需要額外建表、不需要處理事務(wù)、不需要考慮未登錄用戶怎么關(guān)聯(lián)購物車數(shù)據(jù)一個會話對象全搞定了。第二層原因是貼合 HTTP 的無狀態(tài)模型——購物車本質(zhì)是「某一次瀏覽過程里的臨時意圖」Session 天生就是為這種臨時狀態(tài)設(shè)計的。給剛?cè)腴T JavaWeb 的人做一個可以復(fù)現(xiàn)、能看清請求流轉(zhuǎn)路徑的項(xiàng)目用 Session 存購物車比引入 Redis 或數(shù)據(jù)庫表都直觀得多。這篇筆記面向的讀者很明確正在做 JavaWeb 課設(shè)或入門練手的人、需要給現(xiàn)有管理系統(tǒng)補(bǔ)一個購物車模塊的人、被教科書里各種「MVC 三層架構(gòu)」繞暈的初學(xué)者。我會先用最樸素的方式講清楚購物車應(yīng)該長什么樣然后給出一個能直接跑起來的最小工程再把加購、改數(shù)量、刪商品這些操作的代碼逐段拆開最后列幾個我實(shí)際踩過的坑。這套方案代碼量不大但該有的請求、轉(zhuǎn)發(fā)、重定向、會話、JDBC 讀寫都齊了值得照著做一遍。2. 技術(shù)選型與職責(zé)拆解為什么 JSP Servlet JDBC 就夠2.1 購物車為什么是內(nèi)存結(jié)構(gòu)而不是數(shù)據(jù)庫表購物車?yán)锏臄?shù)據(jù)有一個鮮明特點(diǎn)生命周期極短的臨時性。用戶打開瀏覽器訪問一次購物網(wǎng)站往購物車?yán)锛恿藥准唐啡缓箨P(guān)閉頁面走人這條數(shù)據(jù)就不再有任何意義了。如果把它落進(jìn)數(shù)據(jù)庫你不僅要為每個匿名訪客建一張購物車明細(xì)表還要在會話過期時寫定時任務(wù)去清理孤兒數(shù)據(jù)否則表會越攢越臟。為一個簡易項(xiàng)目引入這種復(fù)雜度不劃算。常見的做法是用 HttpSession 的 setAttribute 方法存放一個 Map商品Id, 數(shù)量。同一個商品再次加購時只要數(shù)量加 1 而不是重新插入。這個 Map 的生命周期由容器管理默認(rèn)超時時間一般是 30 分鐘用戶關(guān)掉瀏覽器后 Session 也隨之失效。要展示購物車?yán)锏纳唐吩斍槊Q、單價、小計再通過商品 Id 去查一遍商品表即可。也就是說購物車只存 Id 和數(shù)量兩個字段商品的其他信息仍然以數(shù)據(jù)庫為準(zhǔn)。為什么不是 CookieCookie 也存在瀏覽器端看似也能存購物車但 Cookie 的容量限制只有 4KB 左右而一個購物車?yán)飫虞m幾十件商品的 Id 列表很容易撐爆這個上限。更重要的是 Cookie 里的數(shù)據(jù)是明文的用戶可以隨意篡改。Session 把數(shù)據(jù)留在服務(wù)端客戶端只拿一個看不見內(nèi)容物的會話 ID安全性和容量都更合適。簡易購物車用 Session是成本和安全性之間的平衡點(diǎn)不是沒考慮過其他方案。還有一個實(shí)操上的好處調(diào)試直觀。你用 Servlet 處理加購請求時直接打印 session.getAttribute(cart) 就能看到當(dāng)前購物車的內(nèi)容不用連數(shù)據(jù)庫執(zhí)行 select。對于還沒把調(diào)試工具鏈玩熟的初學(xué)者這個「黑匣子」能被直接看到內(nèi)部狀態(tài)排查問題的成本低得多。2.2 職責(zé)拆解把 JSP、Servlet、JDBC 各放對位置一個可以交差的簡易購物車項(xiàng)目至少要分出四層職責(zé)但每層都很薄。第一層是 JSP 頁面負(fù)責(zé)展示商品列表和購物車內(nèi)容第二層是 Servlet負(fù)責(zé)接收請求、調(diào)用業(yè)務(wù)方法、決定跳轉(zhuǎn)方向第三層是一個購物車相關(guān)的 JavaBeanCartItem 和 Cart封裝購物車的存儲結(jié)構(gòu)第四層是商品數(shù)據(jù)的 JDBC 訪問代碼負(fù)責(zé)把商品表里的記錄查出來。不少人會把 JDBC 代碼直接寫進(jìn) Servlet 的 doGet 方法里這種做法在小項(xiàng)目里能跑但會讓你后面改數(shù)據(jù)庫連接配置時到處找代碼。我一般會單獨(dú)建一個類哪怕這個類只有一個靜態(tài)方法也要和 Servlet 分開。同理JSP 頁面里不要出現(xiàn) Java 代碼片段。用 EL 表達(dá)式讀購物車數(shù)據(jù)用 JSTL 的 c:forEach 遍歷商品列表這兩樣?xùn)|西是 JavaWeb 入門階段必須順手學(xué)會的——它們能讓你把頁面代碼控制在二十行以內(nèi)。關(guān)于版本選擇Servlet 可以用 3.1 或 4.0JSP 用 2.3 以上JDK 用 8 或 11Tomcat 用 9.x。這些版本都是經(jīng)過多年驗(yàn)證的穩(wěn)定組合網(wǎng)上能找到大量兼容性說明。不要用 Servlet 5.0 以上的版本因?yàn)閺?5.0 開始采用了 Jakarta EE 命名空間與老教材里的 javax.servlet 包名不兼容會讓照著舊教程寫代碼的初學(xué)者在第一關(guān)就翻車。# 這里給一個最小目錄結(jié)構(gòu)之后照著建就不會亂 src/main/java ├── com.demo.entity # CartItem、Cart、Product ├── com.demo.dao # 商品表訪問 ├── com.demo.web # CartServlet、GoodsServlet src/main/webapp ├── WEB-INF/web.xml # Servlet 映射 ├── goodsList.jsp # 商品列表頁 └── cart.jsp # 購物車頁面建目錄的時候包名盡量不要用默認(rèn)包否則 Servlet 注解掃描和 web.xml 配置都可能出問題。用公司域名反寫或者干脆用 com.demo 這種形似域名反寫的結(jié)構(gòu)是最穩(wěn)妥的選擇。3. 最小可運(yùn)行工程目錄、依賴與數(shù)據(jù)庫初始化3.1 用 Maven 搭好骨架pom.xml 里的依賴清單我會用 Maven 來管理這個項(xiàng)目。原因不是它多高級而是它能幫你鎖定依賴版本避免手動往 WEB-INF/lib 里拷 jar 包時漏掉某一個、運(yùn)行期才報 ClassNotFoundException。對于一個入門項(xiàng)目pom.xml 只需包含 servlet-api、jsp-api 和 mysql-connector-java 三樣其中前兩個還要顯式聲明 provided scope因?yàn)?Tomcat 容器本身自帶這兩個庫打包時不需要重復(fù)打入。dependencies dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency dependency groupIdjavax.servlet.jsp/groupId artifactIdjavax.servlet.jsp-api/artifactId version2.3.3/version scopeprovided/scope /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency /dependencies第二個依賴記得補(bǔ)上 jstl 和 taglibs因?yàn)轫撁嫜h(huán)要用 c:forEach沒有 JSTL 你只能退回 Java 代碼片段頁面會變得很難讀。版本號不用追新能穩(wěn)定工作的老版本反而更省心。mysql-connector 用 8.0.x 配合 MySQL 5.7 或 8.0 都能正常連接驅(qū)動類全名是 com.mysql.cj.jdbc.Driver這個寫法在 8.x 里已經(jīng)是標(biāo)配。dependency groupIdjavax.servlet/groupId artifactIdjstl/artifactId version1.2/version /dependencyMaven 配好后在項(xiàng)目根目錄執(zhí)行 mvn package確認(rèn)能打出 war 包。這一步通過說明依賴引入沒問題后續(xù)任何報錯都不太可能與缺 jar 有關(guān)了。3.2 商品表與初始化數(shù)據(jù)購物車得有東西可加購物車本身不存商品明細(xì)但頁面得能從商品表查出可加購的物品。我一般只建一張 goods 表包含 id、name、price、stock 四個字段。price 用 decimal(10,2) 而不是 float避免浮點(diǎn)精度在結(jié)算小計時出現(xiàn) 0.30000000000000004 這種尷尬。CREATE TABLE goods ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, price DECIMAL(10,2) NOT NULL, stock INT NOT NULL DEFAULT 10 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; INSERT INTO goods (name, price, stock) VALUES (機(jī)械鍵盤, 199.00, 50); INSERT INTO goods (name, price, stock) VALUES (游戲鼠標(biāo), 89.00, 80); INSERT INTO goods (name, price, stock) VALUES (顯示器支架, 129.00, 30);字符集用 utf8mb4 而不是 utf8是一個血淚經(jīng)驗(yàn)utf8 在 MySQL 里實(shí)際是 utf8mb3存不了 emoji也存不了部分生僻漢字。你寫個「」進(jìn)商品名舊字符集直接報錯。建表時把字符集定了以后少一堆麻煩。數(shù)據(jù)庫連接信息按慣例寫在 src/main/resources 下的 jdbc.properties 里然后寫一個簡單的 DBUtil 類讀取配置、獲取連接。連接串里必須帶上 useUnicodetruecharacterEncodingutf8否則中文參數(shù)往數(shù)據(jù)庫里寫會亂碼。時區(qū)參數(shù) serverTimezoneAsia/Shanghai 在 MySQL 8.x 下是必須的不加會報時區(qū)錯誤。Class.forName(com.mysql.cj.jdbc.Driver); String url jdbc:mysql://localhost:3306/shopdb?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai; conn DriverManager.getConnection(url, root, 你的密碼);注意 Class.forName 在連接池或較新驅(qū)動里已經(jīng)不是必寫項(xiàng)但對初學(xué)者來說保留更穩(wěn)。不需要理解它背后的 SPI 機(jī)制知道這行代碼是觸發(fā)驅(qū)動類加載即可。4. 購物車核心邏輯的實(shí)現(xiàn)加入、改數(shù)量、刪除4.1 定義 CartItem 和 Cart會話里存什么購物車?yán)锩恳恍惺且粭l CartItem至少要有商品 id、商品名稱、單價、加購數(shù)量四個屬性再加一個 getSubtotal() 方法計算小計。商品名稱和單價是在加購時從數(shù)據(jù)庫查出來的這樣頁面展示購物車時不必再查一次數(shù)據(jù)庫性能好一些代碼也簡單。public class CartItem { private int id; // 商品 id private String name; // 商品名稱 private double price; // 單價 private int count; // 加購數(shù)量 public double getSubtotal() { return price * count; } // 構(gòu)造方法、getter/setter 省略 }Cart 類不直接操縱 Session它只負(fù)責(zé)持有一個 MapInteger, CartItem。加購時判斷 map 里有沒有同一個 id有就把 count 加 1沒有就 new 一個 CartItem 塞進(jìn)去。把業(yè)務(wù)放在這個類里Servlet 就只做參數(shù)解析和跳轉(zhuǎn)兩件事后期如果想換成 Redis 存儲或其他方式只需要替換 Cart 的實(shí)現(xiàn)控制層可以不動。public class Cart { private MapInteger, CartItem items new LinkedHashMap(); public void addToCart(CartItem item) { CartItem exist items.get(item.getId()); if (exist ! null) { exist.setCount(exist.getCount() 1); } else { items.put(item.getId(), item); } } public ListCartItem list() { return new ArrayList(items.values()); } // remove、clear 方法類似不再贅述 }用 LinkedHashMap 而不是 HashMap 是有意為之它保證遍歷順序和插入順序一致購物車頁面顯示的順序就和用戶加購的順序一致了。這個小細(xì)節(jié)很多人不注意但頁面效果差異明顯。4.2 加購請求的完整鏈路Servlet 與 JSP 之間的配合加購操作的前端只是一個鏈接或者一個按鈕點(diǎn)擊后攜帶商品 id 請求 CartServlet。Servlet 根據(jù) action 參數(shù)分發(fā)處理add 是加購update 是改數(shù)量delete 是刪一項(xiàng)clear 是清空。最后統(tǒng)一重定向回商品列表頁或購物車頁而不是轉(zhuǎn)發(fā)到 JSP。WebServlet(/cart) public class CartServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String action req.getParameter(action); HttpSession session req.getSession(); Cart cart (Cart) session.getAttribute(cart); if (cart null) { cart new Cart(); session.setAttribute(cart, cart); } if (add.equals(action)) { int id Integer.parseInt(req.getParameter(id)); Product p ProductDao.findById(id); CartItem item new CartItem(p.getId(), p.getName(), p.getPrice(), 1); cart.addToCart(item); } else if (delete.equals(action)) { cart.remove(Integer.parseInt(req.getParameter(id))); } resp.sendRedirect(req.getContextPath() /goods); } }這里要解釋為什么用重定向而不是轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)是服務(wù)端內(nèi)部跳轉(zhuǎn)地址欄不變重定向是瀏覽器重新發(fā)起一次請求地址欄會變成目標(biāo)地址。如果加購后用轉(zhuǎn)發(fā)回到商品列表頁用戶按 F5 刷新時會再次提交上一次的加購請求商品數(shù)量會被反復(fù)疊加。重定向正是解決「刷新導(dǎo)致重復(fù)提交」的最樸素方案。ProductDao.findById 里的 JDBC 代碼老生常談建立連接、寫 SQL、填參數(shù)、執(zhí)行查詢、封裝結(jié)果集、關(guān)資源。唯一要強(qiáng)調(diào)的是 finally 里逐個關(guān)閉 ResultSet、Statement、Connection并且要按這個順序關(guān)否則連接不釋放多刷新幾次頁面就會出現(xiàn)連接超時。public static Product findById(int id) { String sql SELECT id, name, price, stock FROM goods WHERE id?; // PreparedStatement 預(yù)編譯防 SQL 注入 // 結(jié)果封裝成 Product 對象返回 }在頁面端遍歷購物車只需這樣一段 EL JSTLc:forEach items${sessionScope.cart.list()} varitem tr td${item.name}/td td${item.price}/td td a hrefcart?actionupdateid${item.id}count1/a ${item.count} a hrefcart?actionupdateid${item.id}count-1-/a /td td${item.subtotal}/td tda hrefcart?actiondeleteid${item.id}刪除/a/td /tr /c:forEach需要留意的是 sessionScope 的寫法只有加上它才能明確告訴 EL 去 Session 里取 cart而不是去請求域或頁面域里找。這個小細(xì)節(jié)如果漏掉頁面上的購物車一直是空的排查時容易一頭霧水。改數(shù)量操作不用單獨(dú)加一個文本框直接在現(xiàn)有數(shù)字旁邊放加減兩個鏈接通過 count 參數(shù)傳 ±1后端拿到后修改數(shù)量這樣就避免了表單提交要處理的空值問題。5. 五個高頻坑Session 丟失與亂碼排查記錄5.1 商品數(shù)量莫名其妙疊加刷新一次漲一次現(xiàn)象加入一件商品后點(diǎn)瀏覽器刷新購物車?yán)镞@件商品的數(shù)量每次 1無法通過刷新讓頁面停留在原狀。原因加購請求用的是 doGet瀏覽器地址欄的請求 URL 不會因?yàn)轫撁嫣D(zhuǎn)而改變刷新時瀏覽器原樣重發(fā)上一次請求。如果加購后是轉(zhuǎn)發(fā)到列表頁這個請求會被反復(fù)提交每次都在原數(shù)量上加 1。另外頁面里如果用了 這種方式直接提交 GET 請求刷新重放的幾率也高。解決把加購處理結(jié)束后的響應(yīng)改為重定向即 resp.sendRedirect() 返回列表頁。重定向會讓地址欄變成列表頁的 URL刷新時提交的是列表頁的查詢請求而不是加購請求。對于數(shù)量變化類操作更穩(wěn)妥的是改用 POST 提交并且處理完后仍然重定向雙保險。我習(xí)慣的規(guī)則是所有寫操作一律 POST 重定向讀操作才用 GET 轉(zhuǎn)發(fā)。5.2 加購時商品名變成 或亂碼現(xiàn)象使用 Tomcat 8 及以下版本運(yùn)行項(xiàng)目時請求參數(shù)里的中文商品名在購物車?yán)镲@示為一堆問號或亂碼。原因GET 請求的中文參數(shù)默認(rèn)按 ISO-8859-1 解碼超過這個字符集范圍的字符全部變成問號。Tomcat 8 及以上版本默認(rèn) URI 編碼是 UTF-8問題不大但很多教材配套的教學(xué)環(huán)境還在用 Tomcat 7。解決在請求到達(dá) Servlet 之前先指定請求編碼或者在 Tomcat 的 server.xml 的 Connector 配置里加上 URIEncodingUTF-8。代碼層面最省事的做法是寫一個 Filter在 doFilter 開頭設(shè)置 req.setCharacterEncoding(UTF-8)然后 chain.doFilter 放行。注意設(shè)置編碼動作必須發(fā)生在讀取任何參數(shù)之前否則已解碼的參數(shù)無法回頭修正。同時JSP 頁面頂部寫 pageEncoding“UTF-8”數(shù)據(jù)庫連接串里帶 characterEncodingutf8三層一起到位才算是徹底解決。public class EncodingFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) { req.setCharacterEncoding(UTF-8); resp.setCharacterEncoding(UTF-8); chain.doFilter(req, resp); } }5.3 同一個商品加購后數(shù)量沒有 1反而出現(xiàn)兩行現(xiàn)象往購物車?yán)锛右患唐穬纱钨徫镘図撁娉霈F(xiàn)兩行同名的商品而不是一行數(shù)量為 2。原因CartItem 里的 equals 和 hashCode 沒有重寫導(dǎo)致 MapInteger, CartItem 的 key 是商品 idInteger 包裝類型時不存在重復(fù)問題但如果你把 Cart 實(shí)現(xiàn)里的 key 換成了 CartItem 對象且沒有重寫 equals那么每次 new 的 CartItem 都是不同對象永遠(yuǎn)不能命中已有的項(xiàng)。初學(xué)者最容易在這里寫錯把 key 類型和實(shí)際類型混在一起。解決嚴(yán)格保持 Map 的 key 類型為 Integer 商品 id判斷是否存在時用 id 作為查找依據(jù)而不是把 CartItem 本身當(dāng)作 key。如果你的設(shè)計里一定要用對象做 key那么必須重寫 equals 和 hashCode且只比較商品 id。經(jīng)驗(yàn)之談能用基本類型包裝類做 key 就不要用對象少寫代碼就是少出錯。5.4 頁面能打開但購物車數(shù)據(jù)顯示不完整點(diǎn)刪除報空指針現(xiàn)象列表頁能正常顯示商品但進(jìn)入購物車頁后部分字段空白點(diǎn)擊刪除某個商品時后臺拋 NullPointerException頁面白屏。原因這是典型的用戶換了個瀏覽器或者清了 Cookie 導(dǎo)致 Session 丟失。Session 是靠 Cookie 里的 JSESSIONID 維持的瀏覽器禁止 Cookie 后每次請求都是新的會話cart 屬性自然為 null。另一個常見情況是先直接打開了購物車頁還沒通過列表頁加購過任何商品此時 session 里根本沒有 cart 這個屬性。解決在購物車頁面的 Servlet 里做空值兜底取出 cart 為 null 時就 new 一個空的 Cart 放入 session而不是直接拿 null 去調(diào)方法。頁面端為了優(yōu)雅可以在購物車為空時提示「還沒有商品去逛逛」而不是渲染一個空表格。這段邏輯兩三行就能寫完但能擋住大部分線上白屏。Cart cart (Cart) session.getAttribute(cart); if (cart null) { cart new Cart(); session.setAttribute(cart, cart); }5.5 修改數(shù)量時輸入了負(fù)數(shù)或 0購物車?yán)锍霈F(xiàn)離譜數(shù)據(jù)現(xiàn)象用戶通過加減鏈接操作數(shù)量理論上每次只傳 ±1但如果有人手工修改 URL 參數(shù)傳 count-999購物車?yán)锏臄?shù)量就變成了負(fù)數(shù)。原因后端缺少兜底校驗(yàn)?zāi)玫絽?shù)后直接運(yùn)算。簡易項(xiàng)目通常不面對惡意攻擊但一個「不小心手滑」的普通用戶也能制造同樣的臟數(shù)據(jù)。負(fù)數(shù)的購物車數(shù)量會導(dǎo)致購物車總計出現(xiàn)負(fù)數(shù)展示上非常難看計算結(jié)算金額時還會引發(fā)邏輯混亂。解決在后端更新數(shù)量之后、保存之前做一次最小值校驗(yàn)數(shù)量小于 1 時直接刪除這一項(xiàng)或者重置為 1。數(shù)量大于庫存時按庫存上限截斷。這套校驗(yàn)邏輯放在 Cart 類的 updateCount 方法里保證任何入口進(jìn)來的數(shù)據(jù)都會被兜住。類似的兜底同樣適用于商品 id 參數(shù)Integer.parseInt 前先做一次正則匹配或 try-catch避免非數(shù)字參數(shù)直接讓 Servlet 拋 NumberFormatException。6. 從「能跑」到「能交差」的進(jìn)階調(diào)整到此一個基于 Session 存儲、JSP Servlet 展示、JDBC 讀商品表的簡易購物車已經(jīng)完整跑通了。如果做完這個還覺得不過癮或者這是你的課程設(shè)計需要「加亮點(diǎn)」下面幾個方向是我會優(yōu)先考慮的按性價比從高到低排列。第一個值得改的是把商品詳情也納入購物車展示。當(dāng)前方案在加購時把商品名和單價存進(jìn)了 CartItem這有個隱患后臺改了商品價格購物車?yán)锏呐f價不會自動更新。進(jìn)階做法是購物車只存 id 和數(shù)量每次渲染購物車頁時用 id 批量查一次商品表詳情實(shí)時對齊。代價是每次打開購物車多一次查詢但換來的是價格數(shù)據(jù)的準(zhǔn)確性。這一步改動不大但能把「購物車是臨時視圖」這個理念貫徹到位。第二個方向是加上數(shù)量校驗(yàn)與庫存聯(lián)動。在 updateCount 方法里查一下當(dāng)前商品的庫存加購數(shù)量超過庫存時彈出提示不允許繼續(xù)添加。這樣即使沒人惡意攻擊也能擋住誤操作頁面體驗(yàn)感提升明顯。庫存扣減可以放在「結(jié)算」動作里做如果沒有做結(jié)算功能至少要做到下單時二次校驗(yàn)防止超賣——雖然簡易項(xiàng)目通常不需要真上鎖但提前把庫存校驗(yàn)邏輯埋好后續(xù)接支付寶或微信支付時會省很多事。第三個方向是引入 Cookie 持久化未登錄用戶的購物車。做法是用戶未登錄時把購物車編碼為 JSON 字符串寫入 Cookie登錄后將 Cookie 中的內(nèi)容合并進(jìn)賬戶的購物車數(shù)據(jù)。這個功能在真實(shí)電商里是標(biāo)配但實(shí)現(xiàn)起來涉及 JSON 序列化、Cookie 編解碼、合并策略量不小。我的建議是如果做的是課設(shè)這個方向?qū)儆诩臃猪?xiàng)但投入產(chǎn)出比一般把 Session 版本打磨到極致已經(jīng)足夠如果是在公司里做企業(yè)級項(xiàng)目這幾乎是硬需求。我在經(jīng)歷模擬項(xiàng)目X的時候一開始也想著把所有狀態(tài)都放進(jìn)數(shù)據(jù)庫后來發(fā)現(xiàn)會話過期時數(shù)據(jù)庫里堆滿了沒人認(rèn)領(lǐng)的臨時記錄清洗麻煩不說還拖慢查詢。把購物車放 Session 后又踩過刷新重復(fù)提交的坑被 QA 同學(xué)反復(fù)反饋「加一次變兩次」?!笇懖僮骱笠宦芍囟ㄏ颉惯@個習(xí)慣就是那次被磨出來的?;仡^來看做簡易購物車最有價值的收獲并不是學(xué)會了幾個標(biāo)簽和 API而是真正理解了 HTTP 無狀態(tài)和 Session 之間的關(guān)系。如果你照著上面的代碼跑通了建議你試著改一個功能來驗(yàn)證自己是否真理解把「加入購物車」改成「商品詳情頁內(nèi)選擇數(shù)量后加入」看看參數(shù)傳遞和數(shù)量疊加邏輯會出現(xiàn)哪些新問題。這個改動不復(fù)雜但能考驗(yàn)?zāi)銓φ麄€請求鏈路的掌握程度。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
秋霞久久亚洲精品成人| 久久久久久久| 国产女人与拘做受视频免费| 熟女性视频| 久久午夜色播影院免费高清| 久久草视频污视频| 无码少妇精品一区二区60岁老人| 亚洲美女AV无码| 欧美老妇综合网| 亚洲砖码砖专无区2023| 日韩色图 一区二区| 五月天综合| 无码高清少妇久久| 国产成人五月天丁香花| 色综合久久夜色精品国产天堂| 久久草大香蕉| 日韩亚洲国产视频| a片 xxxx受爽视频| 1204金沙人妻懂旧版免费| 在线岛国新天堂8| 中文字幕欧美丝袜07资源| 性爱AV天堂| 淫妻综合网| 色五月婷婷在线| 黄色av网站在线播放| 嫩草美女久久| 天天综合91| 精品国产乱码久久久久久久久久毛片| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 亚欧洲一区二区视频| 在线只有精品| 五月婷视频| 五月激情视频| 好湿好紧好爽 视频| 97香焦色区| 久操视频免费在线观看| 国产精品一区二区麻豆| 丝袜视频网国产90| 99热免费精品| 美女久久久| 日本99视频| 性性久久| 熟妇xxxxx性春色| AV九九| 国产视频小说| 人人做,人人操,人人摸| 发朗少妇买婬全视频中文| 久久原创中文| AA特级绝黄| a片亚洲一本通视频| 97超碰人人操人人操| 首页亚洲国产高跟丝袜诱惑视频 | 日韩在线人妻网站| 亚洲天天操| 色九月| 亚洲不雅视频1区二区| 美女诱惑在线一区| 国产久久成人| 香蕉一区二区三区在线视频| 四虎影视永久在线观看精品免费网站| 亚洲AV无码乱码| 欧美亚州综合图片| 久久东京伊人一本到鬼色| 少妇人妻精品| 91强奸乱轮| 亚洲女优有码无码高清| 色噜噜狠狠色综无码久久合欧美| 91精品国产长腿丝袜美女| 天天色综合天天操| 天天伊人| 国产精品视频| 精品一区二区三区蜜桃臀赵总| 欧美色综合网| 午夜天堂精品久久| 欧美一级久久久久久久大片动画| 日本熟妇精品九九| 久99| 这里只有精品视频在线观看麻豆 | 最新亚洲人成网站在线影院| 高清成年美女黄网站免费大全| 欧美 日韩 国产传媒| 91欧| 999综合色| 激情AV| 91强热人妻| 91亚洲欧美| 九九九九九九精品| 亚洲欧洲偷拍一区| 日逼逼免费看| 热热色91| 少妇人妻无码| 亚洲熟女av中文字幕| 成人久久久精品| 日韩懂色网| 青青操97| 欧美 中文字幕 一区| 51久久夜色精品国产麻豆| 啊啊啊啊一区| 91痴汉| 三及片网站| 96国产污污污丝袜| 91综合网站| 免费αV在线视频| 久久精品国产99精品亚洲蜜... | 99久久综合网| 三级三级三级日本99| 秋霞视频一区二区| 啊啊啊好想要| 久热伊人99re| 91丨九色丨43老版熟女| 永久免费发布性爱网| 亚州五月| 超碰九九| 免费成人在线观看91| 欧美婷婷| 欧美中字不卡| 欧洲亚洲国产综合在线| 国产成人午夜视频网址| 久久嫩草国产成人一区| 亚洲骚男同com| 亚洲熟妇AV日韩熟妇在线| 麻豆婷婷成人一二三| 国产成人网站在线观看| 日韩乱码Av| 亚洲第一成人影院色播| 91亚洲色图| 精品亚州18| 啊啊啊com| 亚洲图片91| 精品丰满熟妇人妻一区| 天天舔天天日天天射| 夜夜夜久久| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 色五月综合网| 国产www色在线观看| 久久在线观看免费视频| 亚洲中文字幕在线视频一区二区| 99re久久| 亚洲网站一区二区在线| 精品国产乱码久久| 看日韩黄片| 日本不卡一区二区| 午夜.DJ高清在线观看免费7 | 人人么人人操| 国产内射爽爽大片| 日熟女| 色吧91| 青草精品视频日本久久久久网站在线| 熟女91网| 国产精品久久天天干| 日本黄色精品专区网站| 色yeye成人免费视频| 天堂av最新电影网| 加勒比海色香蕉婷婷| 91日产欧美| 大香蕉草草| 秋霞鲁丝午夜无码一区二区三| 色999五月色| 又摸又舔在线观看网站| 亚洲欧美综合| 欧美成人9797| 精品九九| 春色校园综合网| 一级岛国大片| 欧美日韩亚洲高清不卡一区二区三区| 欧美 亚洲 第一页| 蜜臀av在线播放一区二区三区| 伊人欧美大香蕉视频| 中国探花熟女| 亚洲熟女中文字幕在线| 99re69综合| 日韩操p| 精品中文日韩字幕视频| 国产精品无码在线| 97鸡把在线视频| 无码9区| 亚洲 欧美 精品专区 极品| 亚洲妇色| 另类小色呦| 丁香九月婷婷| av72网| 色婷五月| 家庭乱伦麻豆| av草草在线电影| 精品国产乱码久久久久久影片| aa片毛片| 91高清欧美| 超碰97久| 欧美精品日韩久久久九| 日韩偷拍色图| 狠狠操官网| 制服少妇欧美| 国产日韩欧美三级片| 伊人AAA| 天天爽天天| 9久久精品| 天天综合网久久ww| 美女网站黄页| 黄总AV色图| 久9热| 78超碰| 人妻少妇被猛烈进入中| 国产高清自拍| 99操碰| 人妻精品视频一区二区| 欧美在线干| 中文字幕精品日韩中文字幕| 黄色大片免费在线| 92性色国产午夜福利在线661| 操曰本熟女| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 9Ⅰ老熟女| 老司机久久| 极品丝袜无码| 国产99 中文字幕日韩小视频| 影音先锋日本乱伦| 日本一二区不卡| 国产精品久久久久久久久久久久久久吹 | 亚洲黑人在线| 91色狼| 中文字幕欧美丝袜07资源| 草B在线| 日日骚一区二区三区| 免费男人的天堂| 麻豆国产成人精品| 日韩国产十八禁| 骚乳在线| 亚洲污污网站| 91激情国产| 亚洲国产天堂| 人妻9117c| 国产亚洲精品农村妇女| 久久男女激情视频网站| 九九久久综合| 日日黄色三级网站| 九九碰九九爱97超碰| а√天堂资源官网在线资源| 日韩精品国产一区二区| 午夜欧美女人操逼| 亚洲国产一区二区三区在线| 91精品少妇搡搡搡| 久久这里只精品免费福利| 黄在线| 日韩性爱免费观看视频| 久9热| 国产二区视频在线观看电影| 国产精品国产自产高清AV| 亚洲第一精品在线视频| 91AV入口| 天天综合91入口| 性在久久久久久| 先锋精品av色鲁| 啊啊啊啊,啊啊好多水| 日韩精品一区二区日韩| 男人的天堂2010| 超碰在线人妻不卡| 欧美熟妇精品黑人巨大91| 超碰97在线 欧美 国产| 免费国产电影一区二区| 99超碰碰| 丁香五月自拍| 日韩精品资源专区二区| 蜜臀va69| 亚洲AV无码乱码在线观看性色| julia ann久久| 开心五月激情网| 欧美91精品国产自产| 香伊人在线| 萌白酱自拍视频| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 伊人青青一区成人视频在线观看区 | 野狼激情网| 一区二区三区一亚洲中文字幕、综合区灬 | 久操免费观看| 思思热在线观看| 欧美在线天堂| 91色鬼| 国产人伦a片信息免费片| 欧美熟女妇同| 另类小说综合网| 国模久久在线| 激情深爱五月天| 国产精品一区二区校花| 日本不卡一二区| 日韩精品人妻中文字幕久久久| 和协影院中文字幕三区| 人人妻碰人人免费| 精品人妻二区三区| 20cm女自慰在线日韩欧美| a在线观看| 精品美女人人干| 久久东京伊人一本到鬼色| 午夜免费视频1000| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 思思热久久成人| 色妺妺在线视频| 久草成人影片| 国产18精品亚洲精品| 日韩无码AB| 国产aⅴ无码片毛片一级网站| 中国黑人三级片网站上区| 亚洲综合影院| 91高跟美女在线播放| 在线人成亚洲视频免费观看| 插老姨肥穴| 99国产在线 精品 视频| 91精品免费| 强奸乱伦资源| 欧洲黄色网| 超碰亚洲欧美日韩无| 91天美| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 日本欧美国内在线| 婷婷爽人人婷婷爽视频| 欧美 亚洲 大香| 欧美操人视频| 日韩 女同 综合| 欧美日韩第一页| 日本不卡一二区| http://qxhbdz.com| 沈阳熟女高潮对白视频| 在线观看午夜婷婷久久久久清性观看| 国产18精品亚洲精品| www.91视频网| 伊人久久久日韩一区| 曰本人妻人人澡人人夹| 97精品国产| 久久久久亚洲精品| 一起草AV| 精品高清一区二区三区三州| 蜜臀网 一区| 欧美日韩222| 日韩一区二区三区四区五区 | 国产精品老师| 性爱视频免费网址| 99视频自拍区| 日日橹狠狠爱欧美超碰| 岛国成人av在线播放网址| 黄页| 成人情色综合网| 日本青青草在线| 玖玖玖玖精品国产剧情| 精品无码欧美三级| 后入精品| 91精产一区二区三区| 91黑丝在线播放| 日韩性爱视频在线免费观看| 日本欧美不卡| 久久久久幕乱码| 美日韩一卡二卡三卡免费人妻精品| 亞洲久久直播| 黄片免费视频2019| 日韩三级伊人| 国产丝袜啪啪| 久久久久久裸体| 96免费视频在线| 久久人妻办公室视频| 啪啪资源网| 人人看黄色视频| 国产精品午夜福利| Julia Annxxxxx| 超碰在线人妻不卡| 伊人青青一区成人视频在线观看区| 婷婷五月天激情网| 日本操逼视频导航| 久久男人精品| 伊人丁香五月婷婷| 新亚洲无码| 超碰在线免费一区二区三区| 校园春色 亚洲| 超碰无码五月97| 欧美情色贴图| 久久久久久久六六| 九九热在线精品视频| 国产自产91区13区| 免费看美国人人爽,人人操| 99激情| 天天流夜夜操| 91蜜臀熟女| 亚洲五月婷婷| 久久黄黄| 极品白嫩福利在线| 中文字幕乱碼在线| 黑人中出21连凳花野真衣| 日韩97超碰中文字幕| 久久思思热| 吻戏激情性巴克| 亚洲色五月| 亚洲高潮少妇| 国产夫妻一区二区| 久久蜜色情在线视频xxx免费观看| 97亚洲综合电影| 欧美 亚洲 制服 精品| 欧美综合骚| 大香蕉伊人亚洲| 天天日日日射| 亚洲男人的天堂网| 亚洲少妇视频| 视频国产欧美在线播放| 欧美偷拍区| 中文字幕一区电影在线观看| 综合网~91综合网| 99综合自拍| 欧美色日| 少妇无码999| 91色色网站| 中文字幕日韩精品久久| 日韩欧美中文| 玖玖视频在线资源一区二区三区| 精品.99999| 亚洲色香| 777超碰| 91啦人妻| 亚洲av强奸乱伦| 男人的天堂网免费| 大香蕉男人的天堂| 91n欧美| 99re公开精品免费视频| 五月婷婷丁香六月| 97视频900| 丰满人妻一区二区三区免费| 人人摸.人人色| 日本肏逼视频在线观看| 日韩二级| 97超碰日韩| 欧美日韩亚洲一区二区在线观看 | 狠狠色五月亚洲91| 国产中文大片资源中文字幕 | 亚洲三级。日韩三级| а√天堂资源官网在线资源| 女人高潮抽搐喷水视频网站| 五月天综合网| 加勒比海色香蕉婷婷| 黄页网站免费高清在线观看| 久九九九九九九热| 久久伊人东京热| 日韩免费三级黄片电影| 黄污污污污| 亚洲AV在线资源| 日本操逼视频在线| 婷婷五月色| 国产精品久久久久999| 亚洲?V高清一区二区三区尤物| 超碰人人超在线观看| 日本不卡码黄色| 亚洲一区二区av| 亚洲欧洲综合av在线| 国产亚洲人妻综合日韩 久久| 裸体美女久久久| 亚洲自拍偷拍视频在线| 色噜噜狠狠色综无码久久合欧美| 韩国毛片一区二区三区| 无码精品人妻一区二区三区妖精| 大香蕉 222| 日本男人天堂| 99精品在线播放| 日韩特一级久久| 三级色综合| 欧美暴力猛交| 欧美日韩另类在线播放| 自拍欧美| 强奸国产精品视频| 欧美一区二区三区黄色影视| 日韩在线一区二区| 日本最新1区2区3区| 欧美日韩操逼动图| 九九九九免费视频| 五月婷久久| 日韩无码第3页| 国产又色又爽又舒服的三级视频| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 欧美在线视频播放| 欧美日韩操逼动图| 在线洲亚线| 高清无码网址| 99国产精品| 久久发布国产伦子伦精品| 屁股久久久久久久| 抽插爽| 少妇3P性爱自拍| 97精品97久久| 99热这里是精品| 久久久人妻| 无码99| 青娱乐福利99| 久久是精品| 色播五月丁香| 亚洲春色一区二区三区| 色老牛| 亚洲国产欧美中文永久| 欧美色图综合网| 有码人妻系列| 韩国黄片aaaa| juliaann丝袜| 超碰综合色| 色欲人妻一区二区在线| 成人免费在线网站| 老熟女综合| 97色色国产视频| 乱伦av.com| 97欧美日韩精品| 国产天天骚| 国产 热久久久久国产精品| 欧美日韩精品久久久久东北老熟妇| 成人av动漫在线观看| 99999精品| 91欧美性| 一区久久久二区| 国内亚洲精彩视频在线| 亚洲黑人在线| 欧美日韩国产色五月综合在线| 920日本午夜免费| 久久精品日韩| 日本道不卡| 综合色久欲| 欧洲中文字幕| aaa一级黄片| 91丨九色丨国产丨人妻在线| 超碰诱惑| 亚洲欧美激情小说| 天天插夜夜爽| 欧美日韩人人精品| 99操99| 亚洲免费成人精品电影| 99婷婷一区二区| 人妻激情视频| 精品欧美日韩在线观看| 啊啊啊啊啊好大好舒服想要| 成人夜夜爽| 丝袜美腿制服人妻二区中文字幕| 色哟哟AⅤ| 精精品人妻一区二区三区| 桃色人妻在线视频| 丝袜性亚洲| www.婷婷| 一区在线观看中文字幕| 欧美aaaaaaa| 婷婷在线视频在线观看| 欧美日韩国产成人高清| 激情小说在线视频| 1024精品在线| 欧美春色| 农村少妇久久久久久久| 熟妇一区,二区,三区。| 亚洲91综合| 久久大精品乱码视频人妻熟女| 亚洲情色1区| 夜夜嗨AV一区天天| 97亚洲综合电影| 久久精彩视频| 吻戏激情性巴克| 亚洲激情综合| 水野优香在线观看| 一区二区偷拍拍视频| 丁香五月天堂网| 激情五月丁香五月| 欧美日韩国产在线| 97久久精品亚洲| 中文字幕五区| 97色插| 久久亚州高清| 欧美色日本| 欧美91网站| 人妻黑丝袜电影| 久久久久久久9最新免费视频观看| 久久99精品九九久久久婷婷| 亚洲天天影视色综合| 啊啊啊好疼| 免费精品AB| 超碰碰97资源站| 亚洲国产综合图区中文字幕| 欧美第一页| 在线观看亚洲成人精品| 免费精品人妻一区二区三| 久久久麻豆精品| 久久伊人大香蕉| 91婷婷伊人狠人| 免费人人搞97| 天堂精品| 欧美黄页| 深夜国产一区二区三区在线看| 中文字幕狠狠玩| 亚洲 日韩 欧美 国产综合体| 久久发布国产伦子伦精品| 少妇500双飞99| 国产成人精品一区| 蜜臀久久99精品久久久久久婷婷| 狠狠婷婷亚洲中文综合久久| 美国一区二区三区视频| 久久香蕉影院| 国产亚卅97| 校园春色美腿丝袜 | 一个人免费HD91视频| 色情成人五月天| m欧洲一级午老| 天美av在线| 色婷婷六月丁香七月婷婷| 特级丰满少妇一级AAAA爱毛片| 99成人| 久久97超碰香蕉| 超碰97护士| 日本成人电影资源网| 亚 欧 美 综合| 99热日| A 天堂| 99操视频| 四虎在线免费视频| 囯产精品久久久久久久久久梁医生 | 超碰97爽| 日韩91网| 八人操人人摸人人看| 殴美性色a级欧美| 亚洲人人夜夜澡人人爽| 成人无遮挡毛片免费看| Julia在线播放亚洲久久| 熟女精品一区二区在线观看| 秋霞 色色| 人妻久久久久久| 网友自拍第一页| 先锋色眉乱伦资源| 蜜桃臀 后入 一区 二区 三区 在线| 操逼无毒无码免费视频| 大香蕉视频一二三区| 女同在线视频一区| 亚洲图片 欧美电影| 波多野结衣先锋影音| 亚洲最大黄网| 久久中出| 偷拍伦理视频| 午夜啊啊| 五月婷婷无码| 97视频播放| 欧美日韩性爱精品| 色九九九九九九| 亚洲精品一区二区三区在线播放| 白丝少妇一区二区| 亚洲av综合伊人久久| 91麻豆天美国产欧美| 欧美熟妇色| 99精品在线观看| 99热线麻豆| 国产 v乱码一区二| 中精品一区二区三区| 精品久久久久av影院| 欧美亚洲日韩16色| 欧美综合国产精品久久丁香| 伊人色综合超碰| 成人性爱免费播放| 中文字幕片| 亚洲激情在线观看一区| 屌妞视频久久久久久久久久久久| 偷拍偷窥与盗摄视频专区| 久久久久中出| 日韩极品无码B| 麻豆一区在线| 国产第25页在线观看| 亚洲女人毛茸茸91| 亚洲精品美女久久久久久久久| 色综合1991| 91Chinese在线| 婷婷色香伊人| 97香蕉人人乳| 九月丁香综合网| 伊人欧美大香蕉视频| 日日操天天操| 国语对白露脸XXXXXX| 亚州久久9| 人人做人人妻人人夜视频| 九九九九九九精品| 九色 人妻 大香蕉| 黄色激情电影在线观看| 少妇久久久免费| 欧美激情五月天| 亚州熟女乱伦| 天天天操天天天爱| 男人兔费天堂| 97人人夜夜精品视频| 蜜臀av中文字幕| 九九碰九九爱97超碰| 91处女在线观看| 夜夜人妻爽| 99性爱视频| 自怕偷自怕亚洲精品| 白嫩妹子国产骚| 久久综合18p| 成人5码视频| 少妇久久久久久| 综合久久99亚洲人妻中文在线| 亚洲国产日韩欧美熟妇在线| 肉动漫无遮挡h在线观看| 91丝袜在线视频| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 男人的天堂日本东京热| 九九色色| 国产精品久久久久久久黄无码| 91中出视频| 91精品婷婷国产综合久久竹菊| 中文字幕 国产区| 亚洲āv网址在线观看| 久久精品一区一起草| 人人操天天爽| 欧美在线干| 免费一级a毛片久久久久久鸭绿欲| 欧美色97| 啊啊啊久久久视频| 黄色高清久久无码依人| 婷婷五月天成人网| 欧美激情中文字幕另类小说| 国产91亚洲精品一区二区三区| 亚洲第二页| 嫩草影院永久在线制服丝袜| 中文伊人大香蕉视频| 手机在线观看不卡无码av| 欧洲黄色网| 东京热天堂网| 亚洲丨在线| 久久久精品一区二区| 欧美性爱一内片一区二区三区| 色色婷婷五月| 国产成人www免费人成看片| 强奸乱伦免费网站| 在线视频免费观看午夜| 91丝袜美女视频| 密臀在线视频| 亚州欧美另类| 欧美中日韩XXXX| 久久久免费高清中文视频| 免费亚洲国产精品久久一区| 91欧美另类| 久久一二三四五六七八九区区| 宅男91视频在线播放| 2011国产精品| 中文字暮97| 国产精品一区人妻精品阁在线| 日韩婷婷| 99精品在线| 国产精品交换一区二区| 欧美99| 欧美九9 9 9| 日产狠狠干| 天天操夜夜操| 亚洲人精| 久久久久久久久久久久久久久乱码| 久久黄黄| 国产日韩精品一区二区三区| 欧美 亚洲 大香| 青青草日本中文字幕| 亚洲欧美setu| 久久综合久色欧美综合狠狠| 91无摭挡| 亚洲男人在线观看天堂| 国产精品视频在线观看| 啪啪啪综合网| 日韩三A大片在线观看| 欧美天天干| 亚洲一区二区性爱电影| 色色色热| 亚91亚洲网| 无毛精品| 日本天天干天天操一区| 欧美人与动性人交a| 人妻中文字幕精品无码| 天天色播亚洲综合网站| caorenqi shipin| 动漫片子网站3黄| 国内一区二区免费| 人人爱人人乐人人操| 精品成人无码| 国产67194| 日韩 人妻 精品| 97在线青| 91人妻熟女| 天天操天天射天天日| 精品伊人久久久大香线蕉小说| 色九区| 殴美日韩m| 激情内射| 精品国产av一区二区三区四区入口| av绯色| 99热在线观看| 青青草国产盗摄一二三区| 国产青青综合伊人| 亚洲国产美女久久久久| 日人妻视频91| 亚洲AV免费在线观看| 免费亚洲国产精品久久一区| 亚洲激情视频| 无码人妻丰满热妇又大又粗| 亚洲色图91欧美日韩| 97综合在线| 91国产美女丝袜足交精品视频| 亚洲欧美成人网站AAA| 亚洲天堂少妇| 家庭乱伦国产精品| 久久久久久AV无码免费网站| 国产视频一区二区在线观看| 91精品久久久久久77777| 91丨人妻丨国产丨丝袜| 亚欧成人中文字幕一区| 麻豆国产原创AV色哟哟| 日韩精品资源| 思思热久久成人| 国产原创精品| 巨乳特殊服务按摩| 夜嗨影院| 久久久∴| 人人弄人人摸| 中文字幕 人妻不满 在线视频| 欧美青青视频| A级片日韩欧美国产欧美视频精选观看 | 蜜汁欧美| 久久毛卡| 久插综合| av亚欧| 天天摸,夜夜摸| 亚洲日本大香蕉1| 久久无码成人| 亚洲淫乱骚妇AV| 91激情| 九九无码| 操熟女91| 婷婷九月色| 性欧美| 白嫩国模丰满一二三区| 小骚逼被操的爽不爽| 少妇厨房愉情理伦片bd在线观看| 青青操青娱乐| 日本不卡在线二区三区| 久久草大香蕉| 亚洲丝袜二区在线| 精品人人插人人操| 久热这里| 99九九精品| 99精品九九九九九九| 91人妻Pr| 亚洲成成熟女人综合一区二区| 中文字幕在线高清男人的天堂| 91精品少妇搡搡搡| 国产激情在线| 99热这里只有精品1| 日韩AC| 蜜臀99久久精品久久久久久| 你懂得91| 91丝袜美女视频| 久妇网| 十八禁视频一区二区| 色噜噜人妻丝袜AV资源| 99在线免费公开视频| 伊人991| 色综合久久88色综合久久天天| AV男人天堂网| www.狠狠| 欧美一级在线观看成人| 色第一页| 夜嗨影院| 久久久久久久久久久久97 | 日本成a人v网站在线观看| 欧美亚洲第1页| 激情五月天插| 久久熟女精品不卡一区| 欧美日韩成人在线| 国产精品白领在线观看| 伊蕉97蜜桃97狠狠综合干| 日韩成人精品视频自拍| 欧美伊人电影| 超碰色中文| 欧美日韩国产高清在线一二三区| 日本ZZ高免费A级视频| 中亚av| 日韩三A大片在线观看| 亚洲欧美综合网站| 青草青青久久久久久国产| 国产亚洲精品久久久久小| 久久久精品中文字幕麻豆| 五月丁香六月激情综合| 26uuu成人影片| 2019亚洲男人天堂| 国内精品999| 成人5码视频| 亚洲成人贴图| 欧美传媒一区| 天天影视综合网欧美精品| 免费一级黄色录像影片| 97超碰大| 天堂涩涩| 欧美最婬乱婬爆婬性视频 | 中文字幕丝袜人妻| 日本3级一区二区免费| 永久电影三级在线观看| 精品美女人人干| 欧美日日夜夜| 亚洲午夜AV| 精品少妇人妻av久久免费| 91制服丝袜中文字幕| 中文字幕精品久久久久人妻红杏ⅰ| 麻豆这里只有精品| 超碰色男人操熟女| 亚洲影视综合| 日日AAvv| 日韩精品怡红院| 久久国色天香香蕉| 亚洲各类熟们中文字幕| 中文字幕精品一区二| 丰满人妻-区二区三区免费看 | 搡老熟女免费视频 | 亚洲国产欧美一区二区潘金莲| 91亚洲综合在线| 午夜精品久久久久久久99| 一区中文字幕二区日韩| 亚州色图第三区| 操逼逼无码| 中文字幕中文字幕一区二区| 国产亚洲精品一区二区三区| 超碰九7| 一区二区三区麻豆| 99热线麻豆 | 99久久精品无码一区二区毛片免费| 亚洲女人91| 天天综合91入口| 骚逼自拍99| 91真人天天在线| 屌妞视频久久久久久久久久久久| 国产乱码久久| 深爱激情五月天| 91丨九色丨43老版熟女| 激情久久久| 日韩激情中文字幕有码| 51一区二区三区| 日本成人A片免费看| 内射老妇BBWX0C0CK| 亚洲天天综合| 精品视频一区二区| 亚洲综合电影| 蜜臀一区二区三区在线| 大香蕉一级黄色片久久| 蜜臀久久99精品久久久电影| 欧美日韩在线小说| 好爽视频在线观看视频| 丰满人妻一区二区三区四区| 欧美碰碰综合色| 久久久久久久9| 九九九九国产| aaa亚无码专区| 日本羞羞的视频在线播放| 亚洲中文字幕熟女| 高清无码久操视频| 中文字幕一区二区三区四区在线视频| 26uuu久久| 亚洲无码太久| 国产精品婬乱一级毛片彝族| 国产精品无码在线| 亚洲国产成人高清在线| 亚洲综合五月天婷婷丁香| 女优免费一区二区永久| 97超碰69| 91热情品| 骚妻少妇精品性色无码四色A V| 老熟妇一区二区三区| 天天天干977| 麻豆天美91| 一级片在线观看高清无码| 欧美日韩性爱无码| 狠狠操狠狠爱| 1024亚洲中文字幕久在线看片你懂的| 97激情97激情| 久久精品99久久久久久| 国产成人五月天丁香花| 欧美一区二区男人天堂| 天天操夜夜操狠很操| 日亚韩精品视频二区三| 水野优香在线观看| 少妇与黑人高潮在线| 伊人在线大香蕉视频久久| 91狠狠综合久久| 成人精品久久久午夜福利| 中文字幕亚韩| 欧美日韩夜夜| 麻豆国产成人精品| 精精品人妻一区二区三区| 欧美性爱综合,免费| 天堂中文日本在线观看| 精品超碰中文在线| 欧美日韩青操| 天天网综合| 天堂а√在线最新版在线| 六月婷婷综合| 日han少妇无码| 综合亚州欧美| 国产精品视频自拍在线| 久99| 强奸熟女一区二区三区| 青青草中文字幕| 日美免费黄片| 欧美性,色九九| 亚洲丨在线| 日本熟女免费視颖| 日韩一级二级| 蜜桃精品视频一区二区三区| 欧美精品三级黄片| 91|九色|国产熟女| 天天日天天操VV| 999综合网| 国产精品自产拍在线观看社区| 亚洲丝袜B诱惑| 欧美偷拍| 秋霞一级视频在线观看免费| 丝袜无码a片| 97超碰超碰| 欧美99| 四虎免费视频| 先锋色眉乱伦资源| 大香蕉伊人在线成人AV在线观看 | 91久久久久久| 日韩精品影视| 国产视频一区二区三区在线免费观看| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 粉嫩av在线一区二区| 丝袜无码a片| 超碰午夜| 久久香蕉国产传媒一区剧情天美| 久久9999 | 一区二区三区一亚洲中文字幕、综合区灬 | 萌白酱自拍视频| 超碰中文字幕人妻草一区| 亚洲成人激情小说视频| 日韩草久视频| 天啪| 亚洲另类综合欧美| 3P丝袜熟女 色综合| 婷婷亚洲五月***久久| 北野未奈加勒比av| 国产熟女乱论| 91色s| 911粉嫩人妻| 国产午夜福利合集| 亚洲欧洲国产综合av| 国产少妇内射| 色婷久久| 久热伊人| 超碰三级秋霞| 欧美第一页| 欧美黄色图片| AV和黑人在线播放| 中文字幕女同在线| 国产Aα| 久久久成人免费av电影| 国产一区二区啪啪视频| 夜夜嗨一区二区三区三州加勒比| 五月综合婷婷久久网站| 久草毛片| 天天爽天天| 亚洲欧美人妻| 吉川爱美98堂在线| 亚洲 自拍偷拍 欧美| 欧美大干日韩| 国产无套粉嫩白浆在| 国产精品另类| 欧美78p| 亚洲色图尤物视频| 亚洲一区制服诱惑| 国产25页| 国产精品极品美女视频| chaopen97久久| 又黄又爽在线观看视频| 色吧5亚洲| 蜜桃一区二区三区| 99操逼| 中文乱码字字幕在线第5页| 久久久久ab| 色综合久| 色欲天天综合久久久无码网中文| 亚洲丝袜色图| 日韩欧美俄罗斯A片| 男人天堂新| 熟妇艹鸡八| 中文字幕亚洲在线一区| 女生91网站| 噜噜噜久久亚洲精品色情| 国产日韩欧美三级片| 碰碰97| 一本色道久久综合熟妇| 亚洲精品男人的天堂| 妇女性内射冈站HDWWWCOM| 欧美色道啊| 800zy一区二区| 亚洲二区精品在线观看| 91丨人妻丨国产丨丝袜| 98福利在线视频| 久久久久久午夜男人的天堂| 成人97人人超碰人人| 亚洲资源吧| 日韩精品第3页| 国产原创自拍| 韩国黄片aaaa| 久久久97| 91插B网站| 久久亚洲熟妇在线视频| 东京热免费视频| 逼操网站| 国产美女高潮| 新怡红院| 一二三四视频在线社区中文字幕| 久久久久13| www色日本| 精品午夜福利国产一区二区在线观看| 91美女在线| 蜜臀久久99'精品久久久| 2025亚洲男人天堂| 人人爱操| 国产亚洲色婷婷久久99精品91葵花宝典| 亚洲在线欧美| 欧美热图99| 91女优在线观看 | 91精品导航| 国产AV线| 麻豆精品三区视频| 午夜天堂网| 97香焦色区| 五月婷婷综合网| 国产精品久久久久无码AV会牛| 国产一区二区在线播放量| 青草精品视频-日本久久久久网站| 久久9精品网站| 是还免费视频1727我| 中文字日本乱码| 精品久久久av| 久久色人体| 首页亚洲国产高跟丝袜诱惑视频| 欧美亚洲日本激情在线| 中文字幕丝袜国产第一页不卡| 国产精品一区二区手机看片| 97aiaiai| 五十路熟女人妻一区二区三区四区五| 亚洲脚交| 亚洲情色综合网| 偷拍片久久| 婷婷九月国产| 国产精品乱码久久久久久| 夜夜综合| 亚洲欧洲无码一区夜| 91天天c| 97精品久久久久中文字幕| 欧美日本天堂| 老鸭窝黄色视频网站| 美女AV一区二区| 殴洲老熟女| 中文字幕久久亚州无码| 久久精品视| 97久久久久久久久久| 青青草华人在线欧美在线| 老司机福利社视频在线观看| 蜜桃午夜视频一区二区 | 亚洲国产精品久久久久久久久久| 日韩无码成人电影| 91综合在线| 天天欧美色| 久久av色| 成人欧美日超碰| 日韩毛片9| 国语少妇精|