久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

JSP+Bean+Servlet網(wǎng)上購書系統(tǒng):從架構(gòu)設(shè)計到部署驗收全解析

JSP+Bean+Servlet網(wǎng)上購書系統(tǒng):從架構(gòu)設(shè)計到部署驗收全解析 簡介基于JspBeanServlet實現(xiàn)的簡單網(wǎng)上購書系統(tǒng)課程設(shè)計資源面向Java Web初學(xué)者與課程設(shè)計人群采用典型B/S結(jié)構(gòu)完成用戶注冊、登錄、信息查詢與瀏覽等核心功能可幫助理解ServletJSP的分層開發(fā)與請求響應(yīng)流程。壓縮包共55個文件以Java源碼、JSP頁面、SQL腳本及配置文件為主內(nèi)含15個Java源文件及對應(yīng)15個class編譯文件、6個JSP頁面、2個SQL腳本、2個XML與properties配置另有PDF說明文檔、README筆記和項目工程文件整體僅1.21MB輕量且結(jié)構(gòu)清晰。資源附帶的Java Web課程綜合訓(xùn)練PDF對項目設(shè)計做了梳理配合src、WebRoot、config等目錄可逐模塊研讀也能直接導(dǎo)入Eclipse運行調(diào)試便于在此基礎(chǔ)上擴展購物車、訂單等模塊。已有172人學(xué)習(xí)下載是一份適合課程設(shè)計參考和Servlet/JSP動手練習(xí)的完整示例。1. 從課程設(shè)計到能跑的 Web 工程JSPBeanServlet 網(wǎng)上購書系統(tǒng)到底在寫什么如果你正在為一門 JavaWeb 課程設(shè)計或畢業(yè)設(shè)計選題發(fā)愁那基于 JspBeanServlet 實現(xiàn)Web簡單的網(wǎng)上購書系統(tǒng)應(yīng)該是你搜到的最常見答案之一。它看起來是個老掉牙的選題但恰恰把 Web 開發(fā)的三層骨架全裝了進去JSP 畫頁面Servlet 接請求Bean 裝數(shù)據(jù)。它不花哨卻能讓你在答辯時把「一個請求從瀏覽器到數(shù)據(jù)庫再回到頁面的完整路徑」講清楚。我會帶著你把數(shù)據(jù)庫設(shè)計、Servlet 請求處理、JSP 頁面渲染、Tomcat 部署驗收整條鏈路跑一遍全程給可復(fù)現(xiàn)的代碼和參數(shù)。適合打算用這個題目交課程設(shè)計的學(xué)生以及想補 JavaWeb 基礎(chǔ)、搞明白 JSP 項目怎么落地的新手。2. 先拆架構(gòu)再動代碼JSP、Bean、Servlet 在購書系統(tǒng)里各自分工與選型理由2.1 這套組合的本質(zhì)Servlet 生命周期與手工 MVC 的取舍JSPBeanServlet 是 JavaWeb 課程設(shè)計里最經(jīng)典的手工 MVC。M 是 Model 層的 BeanV 是 View 層的 JSPC 是 Controller 層的 Servlet。三者的邊界在購書系統(tǒng)里非常清楚。Servlet 只做三件事接收請求參數(shù)、調(diào)用 Bean 的方法拿到結(jié)果、決定把請求轉(zhuǎn)發(fā)到哪個 JSP 頁面。它不寫 HTML也不直接拼 SQL。JSP 只做一件事把 Servlet 放進 request 或 session 作用域里的數(shù)據(jù)用 HTML 展示出來。Bean 則分成實體 Bean 和業(yè)務(wù) Bean實體 BeanUser、Book、CartItem的字段對應(yīng)數(shù)據(jù)庫表業(yè)務(wù) BeanUserService、BookService封裝登錄校驗、查書列表、加購物車這些動作。這里必須先說透 Servlet 生命周期因為很多新手把 Servlet 當(dāng)成一個碰巧能跑 main 函數(shù)的按鈕寫完 doGet 就結(jié)束了。實際上 Tomcat 容器管理 Servlet 的完整生命周期加載類并實例化調(diào)用 init() 做初始化每個請求進入后由容器調(diào)用 service()service() 再按請求類型把工作分發(fā)給 doGet 或 doPost最后在容器關(guān)閉時調(diào)用 destroy() 回收資源。你在課程設(shè)計里幾乎不用重寫 service()但要知道 doGet 和 doPost 是誰調(diào)進來的——這是后面排查 405 錯誤的基礎(chǔ)。Servlet 默認是懶加載的第一次請求到達時才創(chuàng)建實例并執(zhí)行 init()。如果你在 init() 里初始化數(shù)據(jù)庫連接池或加載配置希望項目一啟動就檢查環(huán)境就在 web.xml 里配置load-on-startup1/load-on-startup。數(shù)字越小優(yōu)先級越高Tomcat 啟動時就會把這個 Servlet 實例化好。很多基于 JSP 的畢設(shè)選題都會在初始化時機上踩坑連接池第一次訪問才創(chuàng)建數(shù)據(jù)庫沒就緒就直接報錯看起來像代碼寫錯其實是時機不對。這套手工 MVC 雖然離企業(yè)級 Web 開發(fā)的要求還很遠但它把 Spring MVC 在背后做的事完整演了一遍。理解了 request、session、Servlet 這三個對象再看 Spring Boot 里的過濾器、攔截器和 Controller你會發(fā)現(xiàn)全是同一套骨架換了個殼。提示Servlet 是單實例多線程這一點最容易出問題。寫在 Servlet 里的成員變量會被所有請求共享購物車這種按用戶隔離的數(shù)據(jù)絕不能直接做成成員變量。標(biāo)準(zhǔn)做法是把購物車放進 session 作用域每個用戶拿到自己的 HttpSession數(shù)據(jù)自然隔離。2.2 數(shù)據(jù)庫設(shè)計圖書表、用戶表、訂單表要建到什么程度網(wǎng)上購書系統(tǒng)雖然叫「簡單」但數(shù)據(jù)庫至少要有四張表用戶表 users、圖書表 books、購物車表 cart_items、訂單表 orders。如果時間緊有人會把購物車和訂單合并成一張已購記錄表但答辯時很容易被「訂單狀態(tài)怎么表示」「購物車和訂單關(guān)系是什么」這類問題問住。我建議按最小可演示但結(jié)構(gòu)完整的程度建表工作量不會多多少。先建用戶表和圖書表CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(64) NOT NULL, email VARCHAR(100), created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE books ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(200) NOT NULL, author VARCHAR(100), price DECIMAL(10,2) NOT NULL, stock INT NOT NULL DEFAULT 0, description TEXT, cover_url VARCHAR(255) );邏輯說明id 一律用自增主鍵不要用業(yè)務(wù)字段當(dāng)主鍵后面建訂單表和購物車表時都要引用圖書 id數(shù)字主鍵做外鍵關(guān)聯(lián)最省事。books 表里 title 的 200 長度足夠容納中英文書名。password 字段預(yù)留 64 位是為了存 SHA-256 哈希后的十六進制字符串而不是明文。這是 web 安全里最基礎(chǔ)的一條哪怕是課程設(shè)計也建議別用明文存密碼。參數(shù)說明price 用 DECIMAL(10,2) 而不是 FLOAT浮點數(shù)在金額計算上會有精度誤差這是所有涉及錢的系統(tǒng)的底線要求。stock 設(shè)置 NOT NULL DEFAULT 0避免插入測試數(shù)據(jù)時忘記填庫存導(dǎo)致空指針。cover_url 允許為空演示時不強制每本書都有封面圖。再建購物車表和訂單表CREATE TABLE cart_items ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, book_id INT NOT NULL, quantity INT NOT NULL DEFAULT 1, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_cart_user FOREIGN KEY (user_id) REFERENCES users(id), CONSTRAINT fk_cart_book FOREIGN KEY (book_id) REFERENCES books(id) ); CREATE TABLE orders ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, book_id INT NOT NULL, quantity INT NOT NULL, total_price DECIMAL(10,2) NOT NULL, order_time DATETIME DEFAULT CURRENT_TIMESTAMP, status VARCHAR(20) DEFAULT paid, FOREIGN KEY (user_id) REFERENCES users(id) );邏輯說明cart_items 用外鍵約束 user_id 和 book_id讓數(shù)據(jù)庫自身保證引用完整性。很多初學(xué)者怕外鍵拖慢速度其實這種量級的小系統(tǒng)完全不受影響反而能防止插入 user_id 不存在的臟數(shù)據(jù)。orders 表把 book_id、quantity、total_price 冗余存進去訂單不會因為以后改圖書價格而變化——這是電商訂單設(shè)計的基本習(xí)慣。參數(shù)說明status 字段預(yù)留訂單狀態(tài)即使現(xiàn)在只做「已支付」一個值也建議留出來演示時往 orders 表手動插一條數(shù)據(jù)展示訂單列表比對著代碼講更有說服力。2.3 Bean 的實例化與屬性注入三種常見寫法怎么選Bean 的實例化方式在購書系統(tǒng)里有三種常見寫法。第一種是直接 new最簡單直觀LoginServlet 里new UserService()用完即走。第二種是單例模式把 UserService 和 UserDao 設(shè)計成單例避免每個請求都重新創(chuàng)建對象。第三種是靜態(tài)工廠用一個 BeanFactory 按類名反射創(chuàng)建對象這已經(jīng)是 Spring IOC 容器的雛形。課程設(shè)計里用前兩種就夠了第三種適合想在答辯里講「解耦」的同學(xué)。一個簡化的 BeanFactory 大概長這樣public class BeanFactory { private static MapString, Object beans new HashMap(); public static Object getBean(String className) throws Exception { if (!beans.containsKey(className)) { Class? clazz Class.forName(className); beans.put(className, clazz.getDeclaredConstructor().newInstance()); } return beans.get(className); } }邏輯說明getBean 先查緩存緩存沒有就反射創(chuàng)建創(chuàng)建完放進 Map。這叫「懶加載 單例池」Spring 容器里最核心的機制也就是這兩行思路。參數(shù)說明這里要求 Bean 必須有無參構(gòu)造器否則反射調(diào)用getDeclaredConstructor().newInstance()會失敗。真實項目會換成構(gòu)造器注入但理解這個雛形對回答「Bean 的實例化方式有哪些」這類問題足夠。Bean 的生命周期在這個手寫場景里就是「創(chuàng)建、使用、被 JVM 回收」沒有 Spring 容器管理的那些回調(diào)鉤子但思路是通的。屬性注入和構(gòu)造器注入的選擇在購書系統(tǒng)的 OrderService 里能直接感受到。構(gòu)造器注入把依賴關(guān)系寫死new OrderService(cartDao, bookDao)一步完成對象一創(chuàng)建就完整可用。setter 注入先 new 再逐個 set靈活但有可能在裝配完之前被調(diào)用出現(xiàn)空指針。手寫 JDBC 項目我一般傾向構(gòu)造器注入因為少寫代碼、依賴清楚。等你以后用 Spring Boot 會發(fā)現(xiàn)bean 的注解注入本質(zhì)上還是「先聲明依賴再交給容器裝配」思路完全一致。3. 用 Servlet 把請求接住登錄、注冊、圖書列表與購物車的核心鏈路3.1 項目目錄結(jié)構(gòu)、web.xml 配置與 IDEA 新建 JSP 項目的關(guān)鍵選項在 IDEA 2024 版本里新建 JSP 項目的常見做法是先創(chuàng)建普通 Java 項目右鍵模塊選擇「添加框架支持」勾選 Web ApplicationIDEA 會自動生成 web/WEB-INF/web.xml。也可以用 Maven 骨架創(chuàng)建目錄結(jié)構(gòu)更規(guī)范。無論哪種方式最終目錄結(jié)構(gòu)應(yīng)該是這樣src/main/java/com/bookshop/ ├── bean/ # 實體 BeanUser.java, Book.java, CartItem.java ├── dao/ # 數(shù)據(jù)訪問UserDao.java, BookDao.java ├── service/ # 業(yè)務(wù)邏輯UserService.java, BookService.java └── servlet/ # 控制器LoginServlet.java, BookListServlet.java src/main/webapp/ ├── WEB-INF/web.xml ├── login.jsp ├── register.jsp ├── book_list.jsp └── cart.jspweb.xml 是整個 Web 項目的注冊中心Servlet 必須在這里聲明后才能通過 URL 訪問。一個最小的配置?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd version4.0 servlet servlet-nameLoginServlet/servlet-name servlet-classcom.bookshop.servlet.LoginServlet/servlet-class load-on-startup1/load-on-startup /servlet servlet-mapping servlet-nameLoginServlet/servlet-name url-pattern/login/url-pattern /servlet-mapping /web-app邏輯說明servlet聲明 Servlet 的類名和顯示名servlet-mapping把對外訪問的 URL 映射到內(nèi)部名字。load-on-startup1/load-on-startup表示容器啟動時就實例化這個 Servlet適合在 init() 里做連接池初始化。url-pattern/login/url-pattern寫成不帶后綴的簡潔路徑前端表單直接提交到這個地址。參數(shù)說明url-pattern 必須以 / 開頭寫 /login 只匹配該路徑寫 /login/* 匹配它下面的所有子路徑。如果映射寫成 *.do 這種后綴形式請求路徑就變成 /login.do。兩種風(fēng)格選一種即可別混著寫否則容器會報路徑?jīng)_突。3.2 登錄與注冊的 Servlet 實現(xiàn)取參、校驗、轉(zhuǎn)發(fā)與錯誤回顯登錄是整個購書系統(tǒng)的入口。一個完整的 LoginServlet 既要在 GET 請求下把登錄頁面打開又要在 POST 請求下處理表單提交。常見做法是只重寫 doGet 和 doPost把公共邏輯拆到私有方法里。package com.bookshop.servlet; import com.bookshop.bean.User; import com.bookshop.service.UserService; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; public class LoginServlet extends HttpServlet { private UserService userService new UserService(); Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher(/login.jsp).forward(request, response); } Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(UTF-8); String username request.getParameter(username); String password request.getParameter(password); if (username null || username.trim().isEmpty()) { request.setAttribute(error, 用戶名不能為空); request.getRequestDispatcher(/login.jsp).forward(request, response); return; } User user userService.login(username, password); if (user null) { request.setAttribute(error, 用戶名或密碼錯誤); request.getRequestDispatcher(/login.jsp).forward(request, response); return; } HttpSession session request.getSession(); session.setAttribute(loginUser, user); response.sendRedirect(request.getContextPath() /bookList); } }邏輯說明doGet 里直接轉(zhuǎn)發(fā)到 login.jsp這樣訪問 /login 就能看到登錄頁不用在地址欄敲 /login.jsp。doPost 里先調(diào)request.setCharacterEncoding(UTF-8)而且必須在讀取任何參數(shù)之前調(diào)用否則中文用戶名直接變亂碼。登錄成功后把 User 對象放進 session之后所有頁面都能通過${sessionScope.loginUser.username}拿到當(dāng)前登錄人。參數(shù)說明response.sendRedirect(request.getContextPath() /bookList)里的 getContextPath() 會自動拼上項目部署名解決寫死 /bookList 導(dǎo)致部署名變化后 404 的問題。userService.login()返回 null 表示賬號或密碼校驗失敗這里把具體錯誤信息放進 request 而不是 session是因為轉(zhuǎn)發(fā)時 request 生命周期能覆蓋整個請求而且錯誤信息不該跨請求殘留。注冊邏輯和登錄類似差別是注冊成功不要自動登錄直接重定向到登錄頁讓用戶手動登錄一次。這個細節(jié)答辯時能講出理由注冊和登錄是兩個動作用戶應(yīng)該清楚自己處在哪個狀態(tài)。3.3 圖書列表與購物車的 Servlet 實現(xiàn)查數(shù)據(jù)、存 session、再渲染BookListServlet 負責(zé)把數(shù)據(jù)庫里的圖書查出來放進 request轉(zhuǎn)發(fā)給 book_list.jsp 渲染。這里 dao 層用簡單的 JDBC 查詢service 層把連接關(guān)閉的雜活收掉。package com.bookshop.servlet; import com.bookshop.bean.Book; import com.bookshop.service.BookService; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class BookListServlet extends HttpServlet { private BookService bookService new BookService(); Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ListBook books bookService.findAllBooks(); request.setAttribute(bookList, books); request.getRequestDispatcher(/book_list.jsp).forward(request, response); } }邏輯說明BookService.findAllBooks()返回 ListBook通過request.setAttribute(bookList, books)把數(shù)據(jù)放進 request 作用域。forward 到 JSP 時同一個請求對象被帶到頁面JSP 里直接用${bookList}就能拿到。forward 是服務(wù)端跳轉(zhuǎn)URL 地址欄不會變適合列表展示場景。購物車的核心邏輯不在數(shù)據(jù)庫而在 session。用戶加購時先從 session 里取購物車 List取不到就新建一個再放回 session。每次加購?fù)@個 List 里塞一個 CartItem最后結(jié)算時把購物車數(shù)據(jù)批量插入訂單表。protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session request.getSession(); User loginUser (User) session.getAttribute(loginUser); if (loginUser null) { response.sendRedirect(request.getContextPath() /login); return; } int bookId Integer.parseInt(request.getParameter(bookId)); CartItem item new CartItem(); item.setBookId(bookId); item.setQuantity(1); ListCartItem cart (ListCartItem) session.getAttribute(cart); if (cart null) { cart new ArrayList(); session.setAttribute(cart, cart); } cart.add(item); response.sendRedirect(request.getContextPath() /cart.jsp); }邏輯說明先從 session 拿 loginUser 做登錄校驗沒登錄直接踢回登錄頁這就形成了「未登錄加購被攔截」的閉環(huán)。getSession() 會創(chuàng)建新 session不想為匿名用戶創(chuàng)建 session就用 getSession(false) 并判空。參數(shù)說明quantity 暫時固定為 1去重和數(shù)量累加放到購物車頁面用循環(huán)處理課程設(shè)計做到這里已經(jīng)能演示完整流程。cart 放在 session 里意味著關(guān)掉瀏覽器再打開購物車會丟這是 session 的天然特性答辯時可以說「正式系統(tǒng)會把購物車持久化到數(shù)據(jù)庫」不丟分。4. 在 JSP 里把數(shù)據(jù)渲染出來EL 表達式、JSTL 循環(huán)與表單回顯4.1 用 EL JSTL 展示圖書列表而不是在 JSP 里寫 Java 代碼很多新手在 JSP 里寫% for (int i 0; i list.size(); i) { ... } %這種腳本片段循環(huán)。在只有一兩個頁面的課程設(shè)計里能跑但頁面一多就會出現(xiàn)變量覆蓋、標(biāo)簽嵌套混亂的問題。更可靠的做法是用 EL 表達式取值JSTL 標(biāo)簽做循環(huán)和判斷。% page contentTypetext/html;charsetUTF-8 languagejava % % taglib prefixc urihttp://java.sun.com/jsp/jstl/core % html headtitle圖書列表/title/head body h2全部圖書/h2 c:if test${empty bookList} p暫無圖書請先到后臺添加。/p /c:if c:if test${not empty bookList} table border1 trth書名/thth作者/thth價格/thth庫存/thth操作/th/tr c:forEach varbook items${bookList} tr td${book.title}/td td${book.author}/td td${book.price}/td td${book.stock}/td td form action${pageContext.request.contextPath}/cart methodpost input typehidden namebookId value${book.id}/ input typesubmit value加入購物車/ /form /td /tr /c:forEach /table /c:if /body /html邏輯說明c:if test${empty bookList}處理空列表避免表格只有表頭沒有數(shù)據(jù)。c:forEach varbook items${bookList}遍歷 Servlet 放進來的集合每次迭代把當(dāng)前元素賦給變量 book頁面用${book.title}直接取字段值。EL 表達式會自動調(diào)用 Bean 的 getter 方法Book 類里必須有 getTitle()否則取不到值。加入購物車按鈕包在一個小表單里隱藏域傳 bookId提交到 /cart 由 CartServlet 處理。參數(shù)說明JSP 頁面頂部必須寫contentTypetext/html;charsetUTF-8否則頁面中文容易亂碼。JSTL 需要把對應(yīng)的 jar 包放進 WEB-INF/lib并且 taglib 的 uri 要和你使用的 JSTL 版本匹配版本不一致會出現(xiàn)標(biāo)簽找不到的錯誤。4.2 個人信息展示頁面與購物車頁面的數(shù)據(jù)回顯技巧JSP 里最容易被問到的就是表單回顯。注冊頁面用戶填了用戶名密碼錯了被退回時用戶名應(yīng)該還在輸入框里而不是清空讓用戶重敲。做法是在 input 的 value 里寫 EL 表達式。form action${pageContext.request.contextPath}/register methodpost 用戶名input typetext nameusername value${param.username}/ 密碼input typepassword namepassword/ span stylecolor:red${error}/span input typesubmit value注冊/ /form邏輯說明${param.username}直接讀取請求參數(shù)里名為 username 的值注冊失敗回到注冊頁時用戶名自動回顯。password 字段絕不回顯這是 web 安全的基本習(xí)慣。${error}顯示 Servlet 放進 request 的錯誤提示一次請求結(jié)束后自動消失不會污染下次訪問。提示表單回顯時如果值是 null頁面上會出現(xiàn)字符串 null。用${param.username ! null ? param.username : }先做一次判斷能避免這種尷尬。購物車頁面的回顯更復(fù)雜一點購物車 CartItem 列表放在 session 里頁面遍歷每個 item再取 bookId、quantity。如果想顯示書名而不是數(shù)字 id常見做法是在 CartItem 里冗余一個 bookTitle 字段加購時一并寫入不要在每個 item 里再查一次數(shù)據(jù)庫頁面會出現(xiàn)明顯的卡頓。課程設(shè)計現(xiàn)場演示時這個細節(jié)很能體現(xiàn)工程意識。4.3 頁面跳轉(zhuǎn)方式轉(zhuǎn)發(fā)與重定向怎么選路徑為什么老 404JSP 項目的跳轉(zhuǎn)就兩種request.getRequestDispatcher(/xx.jsp).forward(request, response)是轉(zhuǎn)發(fā)response.sendRedirect(/xx)是重定向。選哪種不是玄學(xué)規(guī)則很簡單。轉(zhuǎn)發(fā)不改變?yōu)g覽器地址欄請求對象能帶著 request 里的數(shù)據(jù)到下一個頁面適合列表展示、登錄失敗回顯錯誤這種場景。重定向改變地址欄重新發(fā)起一次新請求request 里的數(shù)據(jù)全部丟失但能避免表單重復(fù)提交適合登錄成功后跳首頁、加購后跳購物車這種場景。路徑 404 的原因八成是絕對路徑寫錯。在 JSP 里寫死 /bookList項目部署名是 bookshop真實路徑就變成 /bookshop/bookList。解決辦法只有一個所有重定向都用request.getContextPath()拼路徑所有 JSP 里的鏈接和表單都用${pageContext.request.contextPath}拼路徑。這兩個寫法會自動帶上部署名換機器部署也不會 404。還有一個容易被忽視的場景刷新頁面導(dǎo)致表單重復(fù)提交。用戶在注冊成功頁面按 F5瀏覽器會重新提交上一次的 POST 請求產(chǎn)生重復(fù)記錄。所以注冊成功、登錄成功這類操作一定要用重定向不要用轉(zhuǎn)發(fā)而登錄失敗這種需要回顯錯誤信息的情況才用轉(zhuǎn)發(fā)。5. 避坑購書系統(tǒng)從「能編譯」到「能演示」的 5 個翻車現(xiàn)場5.1 中文亂碼JSP、Servlet、數(shù)據(jù)庫三處編碼不一致現(xiàn)象頁面上的中文變成亂碼或者數(shù)據(jù)庫里存儲的中文變成問號。原因三處編碼沒有統(tǒng)一。JSP 文件本身的編碼、Servlet 讀取請求參數(shù)時的解碼、JDBC 連接數(shù)據(jù)庫的 charset任何一處不一致都會在傳輸過程中產(chǎn)生亂碼。最常見的是只設(shè)置了 JSP 編碼忘了在 Servlet 里調(diào)用 setCharacterEncoding或者連接 URL 沒加編碼參數(shù)。解決JSP 頂部寫% page contentTypetext/html;charsetUTF-8 %Servlet 里在讀取任何 getParameter 之前執(zhí)行request.setCharacterEncoding(UTF-8)JDBC URL 末尾加useUnicodetruecharacterEncodingUTF-8MySQL 表字符集用 utf8mb4。四件事都做了中文問題不會再出現(xiàn)。另外要注意 setCharacterEncoding 必須在 getParameter 之前調(diào)用放在后面等于白寫這個順序問題出現(xiàn)的頻率比想象中高。5.2 數(shù)據(jù)庫連接失敗JDBC 驅(qū)動版本與 Class.forName 的坑現(xiàn)象運行時報ClassNotFoundException: com.mysql.jdbc.Driver或者Communications link failure。原因驅(qū)動類名寫錯或者驅(qū)動 jar 沒放進 WEB-INF/lib。新版 MySQL 驅(qū)動類的包名從 com.mysql.jdbc.Driver 改成了 com.mysql.cj.jdbc.Driver這是網(wǎng)上購書系統(tǒng)里翻車率最高的一處。解決先確認驅(qū)動 jar 在 WEB-INF/lib 目錄下。MySQL 8 及以上寫Class.forName(com.mysql.cj.jdbc.Driver)URL 用jdbc:mysql://localhost:3306/bookshop?useSSLfalseserverTimezoneAsia/Shanghai。數(shù)據(jù)庫連接信息不要寫死在代碼里放到 src 下的 db.properties用 ClassLoader 讀取換環(huán)境只改配置文件不用改代碼。5.3 表單提交后 405doGet/doPost 沒寫全或者映射配錯現(xiàn)象點擊登錄或注冊按鈕瀏覽器彈出 405 Method Not Allowed。原因表單 methodpost但 Servlet 里只重寫了 doGet沒寫 doPost或者 url-pattern 映射到了錯誤路徑。解決補上 doPost哪怕 doPost 里只是調(diào)一下 doGet也要讓容器找到處理入口。另一種常見情況是映射路徑寫在某個子目錄下表單 action 卻寫成根路徑兩者對不上??梢杂脝尤罩纠锎蛴〉挠成湫畔⒋_認實際注冊的地址再對照表單 action 檢查。5.4 JSP 里直接寫 Java 代碼能跑頁面一多就崩現(xiàn)象最開始用% %在頁面里寫循環(huán)和 if單頁能正常顯示加了購物車頁面之后報變量找不到或者 HTML 結(jié)構(gòu)錯亂。原因腳本片段里的變量作用域是整個 JSP 翻譯出來的 Java 類多個腳本片段共享變量一不小心就互相覆蓋。更隱蔽的是 try-catch 腳本片段和 HTML 混排JSP 翻譯時生成的代碼會打亂聲明順序報錯行號根本對應(yīng)不上源碼行號。解決循環(huán)和判斷換成 JSTL 標(biāo)簽取值換成 EL 表達式。JSP 頁面里只留 HTML 和標(biāo)簽Java 邏輯全部上移到 Servlet。這不是風(fēng)格問題是 JSP 項目能不能往下追加頁面的底線。課程設(shè)計如果只做一個頁面怎么寫都能跑要做到登錄、列表、購物車三四個頁面腳本片段的維護成本會明顯上升。5.5 IDEA 部署到 Tomcat 后 404部署名與請求路徑不匹配現(xiàn)象啟動 Tomcat 后訪問 http://localhost:8080/bookList 一直 404IDEA 控制臺也沒報錯誤。原因Tomcat 的部署名是 bookshop_war_exploded默認根路徑是 /bookshop_war_exploded/訪問路徑少了部署名。解決打開 Run Configuration 里的 Deployment把 Application context 改成 /直接以根路徑訪問或者所有頁面鏈接統(tǒng)一加${pageContext.request.contextPath}前綴。我自己的習(xí)慣是本地開發(fā)改成 /省事多項目共存時保留部署名統(tǒng)一用 getContextPath 拼路徑。還有一個很隱蔽的問題修改 JSP 后 Tomcat 沒有重新編譯頁面還是舊的這種情況把 Tomcat 的 work 目錄刪掉再重啟即可。6. 驗證與進階用 WAR 打包和功能驗收清單讓購書系統(tǒng)真正收尾到這一步系統(tǒng)應(yīng)該已經(jīng)在本地跑通了。但課程設(shè)計或畢設(shè)驗收時老師通常會要求能部署到一臺獨立的 Tomcat 上。常見做法是把傳統(tǒng) JSP 項目打包成 war在 IDEA 里打開 Project Structure選中 Artifacts新增 Web Application ArchiveBuild 之后會生成 war 文件。如果是 Maven 項目在 pom.xml 里設(shè)置打包方式為 war然后執(zhí)行mvn clean package生成的 war 在 target 目錄下把它扔到 Tomcat 的 webapps 目錄啟動 Tomcat 就會自動解壓部署。這個動作本身很簡單但能一次性暴露部署名和路徑問題。部署完成后按清單過一遍功能缺什么立刻能看出來功能項操作路徑預(yù)期結(jié)果注冊訪問 /register.jsp填入用戶名密碼提示注冊成功跳轉(zhuǎn)登錄頁登錄輸入正確賬號密碼跳轉(zhuǎn)圖書列表顯示用戶名登錄失敗輸入錯誤密碼登錄頁回顯錯誤提示圖書列表登錄后訪問 /bookList展示全部圖書及庫存加入購物車點擊任意圖書的加購按鈕購物車頁出現(xiàn)該圖書未登錄加購?fù)顺龅卿浐笾苯釉L問加購鏈接被踢回登錄頁中文數(shù)據(jù)注冊中文用戶名并瀏覽頁面全程無亂碼再往深走一步有幾個低成本的進階點值得做在 web.xml 里加一個 CharacterEncodingFilter 過濾器把請求編碼統(tǒng)一處理掉比在每個 Servlet 里手寫 setCharacterEncoding 更接近真實工程給密碼加鹽哈希不要用明文把購物車數(shù)據(jù)持久化到數(shù)據(jù)庫而不是只放 session。這三個點做完答辯時老師問「你的系統(tǒng)有什么可以改進的」你直接能給出具體方案。最后說一個我自己的習(xí)慣每次改完 JSP 或 Servlet不要只在 IDEA 內(nèi)置瀏覽器里點一遍一定要用瀏覽器無痕窗口走一遍完整的注冊到購物車流程因為無痕窗口不帶舊 session能暴露緩存和登錄狀態(tài)的問題。實際驗收前再看一遍 Tomcat 日志里有沒有紅色異常。這套流程我用了很多年基本沒在現(xiàn)場演示時翻過車。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
伊人激情| 亚洲色图欧美色图日韩色图| 国产一区二区久久| av大香蕉| 欧美丰满熟妇XXXX性ppX人交| 五月丁香激情四射| 中文字幕av一区二区三区人妻少妇| 99热免费| 国产精品一区二区黄片| 91在线超高颜值国产| 97爱爱| 亚洲s色图| 97干在线看| 精品v日韩欧美国产| 日韩字幕一区| 8x福利精品第一福利视频导航| 91A欧美电影网站| 欧美亚洲清纯| 夜夜爽夜夜摸夜夜操免费视频| 午夜激情床戏激情| 婷婷色一区| 亚洲综合中文字幕有码| 黄色网址在线免费观看| 亚洲图片欧美在线视频| 欧美综合站| 国产亚洲国产超碰| 东北老女人的激情视频| xxx亚洲午夜天堂| 亚洲婷婷五月天| 99精品热| 不卡二三区人妻少妇| 91国产丝袜美女| 欧洲精品人妻| 久久国产精品视频| 亚洲人综合19| 成 人 A V免费视频在线观看| 精品对白久久不卡| 激情文学88| 97中文热色| 600国产精品视频| 99精品九九九九九九| 人妻人久久精品中文字幕| 日夜尻逼网| 久久亚洲日韩国产欧| 熟女露脸激情自拍视频| 亚州综| 精品九九九九九九| 精品国产av一区二区三区四区入口| 欧州91高潮| 少妇久久久久久久| 伦激情人妻另类人妻| 国产精品毛片?v一区二区三区| 国产精品日韩在线一区| 国产成人无码久久精品| 92福利社视频| 九九九九九九九九九五码| 日日干男人的天堂| 日韩欧美加勒比| 116美女午夜| 75大香蕉| 亚洲天天自拍| 午夜视频好爽啊| 岛国视频免费在线观看| 丁香五月综合| 97天天爽| 日本免费一区二区不卡| 熟妇色99| 中文自拍欧美影视| 日韩/97| 欧美夜色| 精品蜜乳AV免费观看| 免费黄色片。| 中文字幕在线观看丝袜| 加勒比伊人综合| 精品人妻一区二区三区视频在线| 秋霞成人一级在线观看| 色狠狠综合噜一二三区| 亚洲图片 欧美电影| 性色亚洲| 色综合尤物| 诱惑人妻欧美一区在线播放| 黄页av| 色情乱伦AV| 欧美色偷拍 | 国产色产精品在线观看| 欧美一级A片在线看视频性色| 啊啊啊啊嗯嗯嗯用力好爽 | 男人的天堂2018东京热啪啪啪| 欧美图片偷拍| 酒色综合网| 精品无码久久久久久国产浪潮| 天天色播亚洲综合网站| 日韩天天本| 偷拍 亚洲 欧美| 中国东北熟女老太婆内谢| 大香蕉伊人亚洲| 久久精品噜噜噜成人看免欧美大片| 久久欲| 婷婷丁香五月综合| 亚洲图片视频小说| 狠狠色综合网| 干b网| 高清无码 国产精品| 欧美狠狠操| 男人的天堂2018| 99热伊人| 啊啊啊啊嗯嗯在线久久久| 国产无马视频| 午夜毛片高清免费不卡| 先锋激情∨在线视频播放| 1024久久高清视频| 黄片qw| 国产伦精品免编号公布| 久久国产成人精品国产成人亚洲| 综合熟女| 精品亚洲天堂| 亚洲淫色网中文| 美女91在线观看| 极品白嫩美少妇在地板上位骑射淫水泛滥| 天天摸,夜夜摸| 中文字幕欧美精品亚洲日韩蜜臀| 天天插天天射| 国产精品午夜AV完会免费 | 日日干夜夜操视频h| 丝袜美腿av女优在线| 操操AV电影| 欧美AB在线| 欧美专区在线| 欧亚在线视频| 国产精品乱码久久| 欧美久久久15P| 国产av又色又爽又黄| 天天摸天天舔天天操| 久久欲| 久湿久久 | 中文字幕视频免费| 六月天婷婷| 免费人成毛片乱码| 亚洲色入欧美| 欧美精品999| 激情一区二区| 久久久久久91香蕉国产| 干婷婷综合网| 欧美在线91| 伊人成人情色综合| 97色婷婷| 牛牛AV人人夜夜澡人人爽| 另类av天堂| 亚洲成人福利电影免费| 欧美人妻制服| 精品九九九九九九九| 日本熟妇人妻中出视频| 中文字幕日韩综合| 尤物黄色在线观看网站| 啊啊啊啊啊啊好多水| 99热aaa| 日本一区二区成人在线| 免费试看60秒| 久久久草草精品| 首页亚洲国产高跟丝袜诱惑视频| 国产中文大片资源中文字幕 | 国产AV超爽| 亚洲综合20p| 成人五月天色网| 色墦五月丁香| 操逼片中文| 丰满人妻一区二区三区免费 | 亚洲天堂精品日韩电影| 啊嗯嗯啊好大好爽| 久久久久密臀视频| 韩国女主播青草福利视频| 久草免费福利在线播放| 无码高清操逼| 国产白丝av| 亚洲丝袜二区在线| 夜草欧美| 亚洲丝袜色图| ss久久| 色色五月天婷婷| 日韩亚洲中文有码视频| 自拍二页| 精品无码一区二区| 欧美另类色| 日韩人妻一区二区精品| 深夜激情无码| 熟女人妻一区二区三区| 蜜乳Av成人片网站| 国产综合在线视频网站| 精品人妻一区二区三区日产乱码| AV色女综合| 97超碰欧美手机在线| 91欧美美女日韩国产婷婷| 一本久道久久综合狠狠爱| 免费的黄片wwwwww| 在线人人人人人人精品超| 9色国产精品一区粉嫩| 俞拍久久国应视频| 青娱乐91| 久久性爱视频免费看| 欧美激情内射| 97久久国产精品女不卡| 97免费视频在线| 人妻91少妇| 麻豆天美一区二区| 欧美色网| 日韩激情无码影院| CCYY草草影院地址入口| www.亚洲黄色| 啪啪资源网| 亚洲免费在线探花| 26uuu国产免费观看| 国语精品内射在线观看| 激情啪啪拍91| 超碰在线一区二区| 激情婷婷综合久久| 亚洲精品国产无码高清| 啪一啪免费视频| 丰满人妻一区二区三区大胸懂色 | 亚洲 综合 第一页| 天堂精品| 精品欧美乱码久| 国产女大学生AV| 9色国产精品一区粉嫩| 超碰在线人妻中文字幕| 日韩激情中文字幕有码| 日韩啪啪网| 久久超碰爱| 很黄很污的免费网站| 看黑丝美女操逼青青网站| 北京美女一区二区| 亚洲蜜臀精品视频久久| 欧美色综合| 欧美黑人精品在线播放| 欧美色综合影院| 丁香五月综合| 99xav| 四虎在线观看网站| 97色网| 日本三级一区二区 在线| 欧美日韩国产中文精品字幕自在自线| 五月天激情网图片| 色哟哟av网址| 操操逼视频| 亚洲欧美日韩中文久久自慰| 欧美日韩欧美| 天天看天天在线精品| 五月婷婷丁香六月| 久啪| 农村女一级毛卡片| 大地资源在线观看中文第二页| 韩国女主播青草福利视频| 好好的日:com久久九九| 免费视频一二三区| 欧美啪啪女女| 中文一区二区| 久久性爱视频99| **一级毛片国产| 久操 高清| 亚洲区小说| 国产隔壁老王影院在线| 嗯嗯嗯嗯啊啊啊好紧好大| 91 综合 色| 综合久久少妇中文字幕| 久久99亚洲精品久久99果| 久久夜色一区二区| 99re免费| 国产精品色色| 超碰人人干天天射| 福利在线观看一区二区| 国产熟妇一区二区| 精品国产三级av韩国在线| 日本三级R| 婷婷五月天无码| 东京热一区二区中文字幕| 岛国精品视频在线观看| 中文在线视频| 黄色网址在线免费观看| 中文字幕综合人妻| 丝袜剧情| 99国内熟女露脸视频| 欧美精品久久久久久久丰满| 人人超碰在线观看黄| 欧美色图综合| 国产丰满熟夫69mpp| 男人的天堂网页| 蜜臀久久99精品久久久久电影| 东北丰满熟女国产一区| 久久久不卡区一区二区三区久久久| 九七超碰| 超碰性爱97| 亚洲本色精品一区二区久久| 欧美1727免费观看视频| 无码人妻精品酒店| 99操| 一级特级aaaa毛片免费观看| 熟女高潮合集-永久久久-成人AV| 国产久久成人| 久久精品国产精品| 91|九色|国产熟女| 91熟女网| 狠狠色一区二区中文字幕| 亚洲图片激情综合另类| 婷婷15月天青娱乐| 熟女精品va中文字幕| 欧美色自拍| 国产精品蜜乳AV| 国产不卡的视频 | 欧美亚洲高清不卡| 久久久久九九九| 久久九九精品一区二区 | 久久人妻一区二区三区高清| 99热精品在线播放| 国产精品麻豆免费视频| 亚洲美腿丝袜香蕉影视欧美成人| 大香蕉丝袜一级片| 国产深夜福利| 午夜综合在线| 玖玖久久久| 天天影视综合网欧美精品| 翔田千里A片一区二区| 日本 免费 一区二区三区 久久香蕉| 国产高清吃奶免费视频网站| 日韩 女同 综合| 99热精品在线观看| 久久久久久久国产视频| 老熟女阿 国产91| 婷婷五月天补不补| 强奸乱伦av电影| 91人妻熟女| 欧美日韩国产电影| 日韩国语字幕| 国产区91柔拿会所技师| 欧美综合另类| 超碰97.com| 亚洲五区熟女| 丁香五月天激情综合| 国产福利电影| 97资源站日韩| 欧美熟女丝袜| 日产中文字幕2020| 五月色综合| 欧美一级久久久久久久大片动画| 中文字幕一区二区三区50路| 久久久久96| 午夜天堂精品久久| 久久女人一区二区三区| 手机看av网站在线看| 人人爱人人乐人人操| 人妻另类| 极品色电影院| 少妇一区二区三区在线观看| 青草一区二区| 欧美色图自拍| 内射中国少妇高清视频免费视频| 日韩偷拍色图| 五月丁香六月婷| AA特级绝黄| 九九精品无码专区免费| 九九AV| 好湿好紧视频| 91在线丝袜| 日本不卡二三区| 狠狠躁AV| 北京专精特新企业招聘信息| 艳美熟妇先锋一二三区| AV中文在线可看| 国产精品一区二区黄片| 五月婷婷爱六月丁香色| 自慰白浆在线观看| 无色无码| 92午夜免费福利视频| 免费人成在线观看网站品爱网| 九九九九九精品| 亚洲第二页| 久久精品六区| 天天干人妻视频| wuyechaopeng| 91N综合网| 风间由美日韩欧美久久| 99精品人妻| 天美传媒AV在线| 91综合网在线| 呦呦一区| AⅤ片水多多| 麻豆国产97在线| A级片日韩欧美国产欧美视频精选观看| 国产精品美女视频诱惑| 国产女s强制榨精视频| 国产无马在线| 可以在线观看的黄色网址| www.91理论| 国产一区二区精品久久99| 93人人操人人| 色五月综合网| 97久久久久久久精| 射丝袜大香蕉| 久久久久久欧美精品se一二三四| 99re在线观看| 天天干2区3区| 天天日天天屌天天操| 人妻天天爽| 欲色综合| 狠狠久久手机视频精品| 国产成人午夜视频网址| 精品人人插人人操| 大香蕉99热| 91熟女.com| 亚洲图片视频小说| 操国产逼| 激情五月丁香五月| 日日橹狠狠爱欧美超碰| 精品国产乱码久久久影院| 亚洲综合999| 不卡av在线中文字幕| 日韩黄色一区二区三区| 污啪啪啪视频| 欧美亚洲美少妇一区二区| 久久久久久裸体| 亚洲色天| 99热在线观看| 四虎AV无码| 精品无av| 一级特黄aaa大片在线观看成人一级片在线观看 | 久久人妻少妇| 亚州综合色| 翔田千里无码中出中文字幕| 日韩一级片| 裸模AV女优| 新91视频.cmp| 色噜噜精品一区二区三| 电影69乱码96| 九九久久国产精品怡红院| 国产夜夜操| 男人的天堂三级| 久久久一区二区三区三州| 丁香五月色情| 欧日韩一二三f区| 色综合V| 超碰人人妻| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 欧美日韩大黄片| 狠狠爱综合网| 久久国产精品视频| 在线a v| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 人妻在线视频| 这里只有精品视频在线观看麻豆| 欧美色乱| 日韩欧无码一区二区三区免费不卡| 日本道人妻久久久在线不卡色视频| 欧美色图20P| 岛国网址国产 | 色婷婷影视| 91熟女.com| 国产久久成人| 你草精品在线视频| 蜜臀一区二区三区在线| 麻豆久久久一区二区| 色777999综合| 亚洲欧洲国产综合av| 欧美影音在线| 国产欧美一级在线观看| 精品中文一区二区| 国产操偷| 国模久久在线| 黄色性爱网网| 蜜桃臀久久| 狠狠色狠狠色狠狠五月| 久久久一区二区| 物尤视频一区二区| 黄色AAAAA欧美| 九九自拍伦理| 午夜偷拍久久熟女| 天天影视网色欲色香| 大香蕉久| 亚洲少妇视频| 人妻日日夜夜精品| 国产成人超碰在线| 一区二区三区无卡视频在线观看| 午夜操逼不卡| 亚州Av天美传媒| 日本精品第一视频在'| 四季av一区二区凹凸精品小说| 亚洲天堂 视频你懂的| 天天躁日日躁狠狠狠躁| 九九九网页| 国产精品久久天天干| 性性欧美| 午夜精品视频777| 国产91美女视频| 99热这里只有精| 男女无套 免费网站| 台湾大香蕉99热| 亚洲日韩精品一区视频在线| 亚洲风情综合网| 一区二区你上我| 蜜臀AV秘一区翔田千里| 黑人干亚洲| 五月婷婷六月丁香| 久久久久久亚洲Av无码| 看看日B真人视频| 大香交伊人网| 热久久国产| 天天日天天干天天摸天天操| 久久久久久久一级黄色打同平台| 1769国内精品视频| 国产中午字一暮区| 欧亚乱色熟一区二区三四区| 911av网站免费观看| 亚洲性刺激| 2017av无码免费无线播| 亚洲色图欧美色图在线播放| 少妇毛片久久| 国产一区二区三区精品观看啪| 91黑丝在线| 人妻大香蕉| 久久久不能久久久久| 亚洲女毛多水多21P| 久久69| 熟女网站最新| 夜夜高潮夜夜爽高清视频一 | 丝袜狠狠草尤物人妻av91| 国产精品久久99日日| 欧美 亚洲 在线| 日韩 女同 综合| 午夜性| 五月丁香啪啪啪| 久久五月天婷婷丁香中文字幕| 偷拍盗拍亚洲色图图片| 天天天做天天天爱天天天爽| 成人精品视频一区二区| 国产剧情一区在线观看| 黄片无码在线制服| 人人看人人爰人人操| 精品福利| 亚洲少妇视频| 超碰 欧美| 亚洲欧美日韩电影网站一区| 欧美丝袜激情| 啊嗯好大视频在线观看| 超碰久久中文| 韩日精品四区| 99色视频| 99精品在线观看| 黑人精品成人一区二区三区| 天堂中文日本在线观看| 国产精品 久久久精品一牛| 四虎精品永久在线播放| 神马麻豆福利院| 欧美综合天堂| 亚洲熟妇A V黑人| 日韩天天综合| 午夜精品久久久久久久第一页按摩| 一级黄色性爱A级片| 中字幕人妻一区二区三区| 亚洲97在线观看| 91宗合网| 久久大黄片| 丰满少妇一区二区三区免费看| 东北老熟女| 天堂网亚洲区手机版| 亚州欧美另类| 春色综合网| 日日操夜夜操天天操免费观看麻豆| 日本道人妻久久久在线不卡色视频| 国产精品在线一区二区| 人人摸人人舔一区二区| 亚洲人妻久久久| 久久久91| 在线综合网| J?P?NESEHD熟女熟妇伦| 国产精品女生av| 国产精品一区午夜福利| 女人午夜视频777| 国产精品久久久三级无码| 丁香成人五月天| 午夜免费视频1000| 大香蕉 222| 欧美夜色| 啊啊啊男女| 九九九九九精品| 人妻9117c| 久久久亚洲高清不打码| 日本国产成人亚洲精品无码| 精品一区二区啪啪啪| 热久久精品| 精品乱码久久久久| 久久久无码精品人妻二区| 久久午夜色播影院免费高清| 国产精品爱欲| 久久久久9999| 成人天天看站长推荐| 超碰97在线中文| 青青草大香蕉视频| 三级激情网站| 成片免费观看视频大全| 国产成人AV麻豆| 欧美色交| 变态乱伦伪娘灌肠一区二区| 六月丁香啪啪| 伊人991| 欧美 亚洲精品首页| 影音先锋少妇| 丁香五月偷拍| 欧美亚洲| 午夜天天碰综合视频| 欧美国产有色电影| 亚洲欧美综合| 亚洲成人久久美女| 久久国模av| 蜜臀视频网站| 欧美成人黄网色网站| 在线啊啊啊啊| 亚洲美女精品九九视频| 干日本人少妇午夜寂寞影院| 欧美第一页性| 一二三区精品视频| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 日韩综合无码一区久久92| 国产又大又硬又长又粗| 欧美一二三区四五区| AV色女综合| 人人插人人摸人人| 日韩国产十八禁| 水多多映视AV| 又黄又爽在线观看视频 | 中文字幕日本久久| julia中文字幕在线观看| 99999精品| 色综合久| 国产农村妇女毛片精品久久| 无码精品人妻一区二区三区妖精| 岛国人妻少妇av在线观看| 丝袜亚洲综合| 久久国产精品91| 久久久啊啊啊| 九九色综合| 欧洲自拍第一页| 97人人操人人摸| 久日91在线| 日韩欧美大力操| 精品无人区麻豆乱码久久久| AVE乱伦| 日韩99999色| 国产精品免费久久久久久久久久| 另类综合另类| 综合另类| 真实高潮91| 秋霞免费无码视频日韩A片| 久草综合京东| 色色毛片| 神马久久久久久久久久久久| 欧美特大AA级黄片| 北京美女一区二区| 国产浮力影院第1页| 99爱爱| 国产精品亚洲免费| 欧美东京热青青草| 素人美腿视频网站| 欧美 精品国产制服第一页| 有码色中文字幕在线观看| 国产精品99精品视频网站| 欧美视频第二页| 男人a天堂手机在线版| 97视频在线视频| 黄色av一区二区在线| 国语少妇精| 亚洲男人的天堂一区二区| 另类TS人妖一区二区三区| 涩涩久久精品| 探花精品视频| 手机看片91人妻| 欧美熟女丝袜| 中文字幕在线日亚州9| 亚洲丝袜诱惑| 久久色一区二区| 国产粉嫩出水在线播放| 亚洲一区二区三区婷婷| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 国产精品亚洲无码| 欧美精品不卡一二三四在线91| 99碰碰| 免费岛国一级片| 欧美大色交| 伊人网av| japan日本高清乱xxxx| 日韩九九九| 久久、1234| 3p国产欧美99热| 网站A V在线| 一区超碰一区| 校园春色欧美色图| 最新日韩黄片| 亚洲一区在线观看欧洲| 91中文字幕在线观看| 色av中文字| 极品尤物女神在线观看| 高清国产精品福利网站| 囯产精品强| 九一综合精品视品av| 国产一区二区三区精品观看啪| 国产成年女黄特黄| www.成人无码| 淫乱图区| 熟妇人妻一区二区| 五月丁香啪啪啪| 熟女乱伦A| 亚洲无码精品AV久久久| 欧美狠狠狠| 天天色怡春院| AV高清一区| 丁香五月婷婷基地| 亚洲欧美国产成人综合不卡| 国产无吗在线播放| 色噜噜国产精品视频一区二区| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 91 丝袜在线| 中文字幕五区| 亚洲欧美精品福利在线| 午夜激情成人在线观看| 免费视频一二三区| 日韩精品资源| 熟女熟妇一区二区三区视频| 日韩精品人妻中文字有码在线| 大香蕉伊人一区在线观看| 精品国产久热在线观看| 一区二区三区黄色片a| 伊人一级免费黄片| 日本免费一级AAA大片器| 91另类| 国产精品自拍视频| 色欲久久99国产精品久久久久久| 激情婷婷丁香| 热热色国产一二区AV| 天堂网 主播 亚洲| 欧美日韩人妻婷婷一区| 亚洲日韩熟女人妻高清在线| 香港成人一级视频在线青青草| 爱爱动态120秒| 国产超碰国产97| 欧美图片偷拍| 偷拍欧美激情| 在线综合 亚洲 欧美中文字幕 | 尤物av网站| 淫色网综合| 亚洲情色1区| 亚州色站 日韩电影| 综合激情97 | ..日韩av毛片精品久久久| 亚洲伊人a线观看视频| ,成人免费啪啪视频| 小日子操bb在线看| 26uuu性物| av天堂手机版追回 | 9997se| 欧美 日韩第一性色| 日1区2区3区2020| 日逼97| 肏逼视频日本| 日韩色欲久久一二三四区| 翔田千里一区二区三区奶水| 久草网站免费在线观看| 亚洲日韩精品在线播放| 婷婷久草一区二区三区| 久草色悠悠在线视频| 99热这里只有是精品10| 女上位精品在线| 欧美碰碰综合色| 欧美日韩插逼视频| 性影在线视频| 五月丁香久久| 亚洲色性情三级| 超碰在线1234区| 国产精品久久久久久久久久久久| 国产日韩精品suv| 激情网色| 97超碰美国| 国产精品天干天干综合网麻豆 | 综合久久婷婷| 欧美三级免费伊人| 丰满少妇精品一区二区| 91天天| 中国一区二区亚洲人妻| 99久热| 日韩资源网| 亚州男人天堂| 国产www色在线观看| 欧洲色色| 九九av| 伊人国产成人av网站| 太久视频| 婷婷伊人一区| 怡春院久久| 午夜无遮挡男女啪啪视频| 激情视频网址| 丝袜狠狠草尤物 91| 超清中文乱码字幕| 日本在线激情一区二区三区 | 97香蕉网| 亚洲欧美中文日韩视频中国语| 欧美色图亚洲特色| 不卡二三区人妻少妇| 国产黄片在线免费观看| 国产怡红院| 欧美 亚洲精品首页| 国产福利在线视频网站| 中文字幕精品人妻丝袜| 久久精品28| 国产乱人伦AVA麻豆软件.| 男人的天堂色偷偷青青草视频婷婷网| 国产后入式在线观看| 人人操人人操人人操人人操人人操人人人11.CM | 久久久久亚洲?V片无码V| 国产不卡片| 久热这里只有精品9| 亚洲美女自拍偷拍视频| 韩国三级三级BD在线| 狠狠爱大香蕉| 久久久久人妻| 精品丰满熟妇人妻一区| 日韩一级成人毛片免费观看| 日韩美女高潮喷水视频| 人妻精品免费一二三区| 神马视频久久久久久| 欧美激情高清性猛交| 久热大香蕉| 一区二区无码视频| 被体育老师抱着c到高潮| 日日噜噜夜夜久久亚洲一区二区| 人人操,人人插| 亚洲aw毛茸茸在线| 亚州熟女乱伦| 九久9热| 午夜小电影在线插入淫高潮| 蜜桃色色网站视频三区| 欧美日韩传媒| 亚洲精品一区二区三区新线路| 久久精品熟妇丰满人妻99| www.婷婷五月天| 91成人无码| 久草久热| 国产成年女黄特黄| 欧美老妇综合网| 伊人丁香五月婷婷| 日韩天天本| 国产精品探花视频| 亚洲情色 自拍| 色99视频| a级免费在线观看| 老熟女熟妇| 欧美一级黄片视频在线| 九九人妻| 丁香五月天视频| 一区二区乱码福利| 九X超碰| 日本一区二区三区四区免费观看| 久久人人爽av亚洲精品天堂桃色| 久久亚洲精品成人av| 国产美女自拍视频| www老逼91| 欧美成人四级在线播放| 国产精品69久久久久孕妇欧美| 99色在线观看| 一级做受视频免费是看美女| 天天射夜夜| 噜噜噜狠狠色综合| 亚洲春色一区二区三区| 99只有精品| 天堂8在线新版官网| 欧美日韩精品久久久久久久久东北老熟妇| 国产欧美日韩在线观看麻豆传媒公司 | 狠狠色噜噜狠狠狠狠2018| 国产久久一区二区| 婷婷色婷婷| 欧美gv在线观看| 天欧美在线| 青青草日本无码| 色色福利| 玖玖爱影院| 蜜臀一二三| 偷拍伦理视频| 亚洲第一狼人丝袜美女另类| 水滴偷拍| 强奸熟女一区二区三区| 婷婷中文字幕| 国产亚洲精品美女久久久m| 久久精品电影在线| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 哑洲在线| 青青草亚洲一区| 97国产成人精品免费视频| 在线视频 亚洲精品| ...日韩成人一区二区三区字幕| 天天日天天爽| 99精品欧美一区二区三区桃色| 人人妻人人玩人人澡人人爽| 男人的天堂日本东京热| 精彩视频日韩| 丁香啪啪| 日本操逼视频导航| 亚洲一区二区三区春色| 日韩欧视频| 久久精品人妻一区二区| 青青草原人妻| 激情综合五月| 日韩在线观看字幕精品| 日日操免费视频| 美女诱惑久久| 亚洲一区中文字幕| 97在线资源| 欧美日韩婷婷中文| 91N五十路| 色蜜AV| 色人久久| 秋霞欧美性爰视频| 久久成人午夜精品影院| 欧美人与动性人交a| 97超碰9| 欧美韩日精品99综合| 亚洲熟妇综合久久久久久| 黑人天8A∨高清网站| 91婷婷伊人狠人| 五月天婷婷小说| 久久人人看| 牛黄色久午久| 国产精品久久伊人| 日本国产欧美高清在线| 亚洲va有码在线天堂| 日本操逼视频在线| 人妻一区二区三区四区视频| 欧美色图91| 美女久久久久久久久久久| 欧洲站一级二级三级h| 久久久成人精品| 超碰无码五月97| 丝袜色综合| 超碰无码五月97| 97视频在线视频| 麻豆区久久久久亚| 久久中久文96| 欧美自拍网| 一本色道熟妇| 好爽视频在线观看视频 | 久超碰在| 高清不卡国产| 欧洲亚洲人妻无码中字久久三区四区| 97干97色| 美女被啪到深处抽搐视频| 粉嫩av在线| 欧美爱三级日韩久久| 国产探花日韩援交| 十八禁的黄污污免费网站| 家庭乱伦性爱av| 秋霞欧美性爰视频| 色色五月天婷婷| 久久人人妻| 91九九九逼| 941超碰| 96超碰网| 成人a v在线播放免费| 国产在线强奸视频| 插日本熟女视频| 九九九九九九九精品视频| 国产不卡片| 久久免费精品96| 天天综合网亚洲综合网| 日本欧美不卡| 乱伦熟妇一区二区| 国产精品极品美女视频| 337p大胆噜噜噜噜噜91Av| 香蕉在线一区二区三区| 亚洲激情 欧美色图| 欧美玖玖爱免费玖玖| 97在线观| 人人操我人人干| 综合久久中文字幕综合日韩精品| 久久久久成人蜜桃精品| 媚薬在线视频麻豆| 亚洲猛交| 久久久久久久伊人精品| 中文字幕av乱伦| 啊啊啊啊啊操我视频| 欧美色图在线视频少妇| 欧美色图亚洲色| 十八岁啪啪视频免费看| 2020视频1区2区3区| 熟女高潮合集-永久久久-成人AV| 亚洲欧美91| 中国一级操逼视频| 加勒比无码一区二区三区| 日韩在线97| 天天综合青苹果| 国产日韩在线播放av| 国产 日韩 欧美 人妻 熟女 中文| 久久超碰97中文字幕| 97综合激情| 欧美一区二区三区入口| 亚洲天天艹| 久9爱经典视频| 国产精品成人久久一区二区三区| 午夜男女爽爽爽在线视频| 亚洲日韩青青草色月| 亚洲色婷婷综合久久久久中文| 国产久久成人| 欧美日韩m| 成人片在线播放| 91 丝袜在线观看| 免费岛国一级片| 99自拍视频| 性交一区二区在线播放| 亚洲无码精品AV久久久| 久久婷婷五月综合| 久久久久久久久国产| 麻豆国产视频精品观看| 伊色综合天堂色97| 久草精品在线| 国产一区二区啪啪视频| 亚洲综合性网址| 午夜无遮挡男女啪啪视频| 99re这里只有精品中心播放 | 国产亚洲日本精品在线| 麻豆AV96熟妇人妻| V A在线| 先锋精品av色鲁| 欧美激情精品久久久久久| 国产家庭乱伦网址| 久久超碰av在线| 亚洲成人无码影院| 久久久111| 欧美激情性爱视频网站| 欧美一二三区四五区| 九九综合九九综合| 天天透伊人| 欧美精品三区| 久操视频免费在线观看| 激情综合网亚洲| 欧美日韩性感| 国产一级高清免费观看| 日本免费一区二| 91超碰在线| 性色乱AV一区二区| 男人的天堂 在线一区| 日韩欧美麻豆大片| 97综合久久| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 久久精品国产亚洲AV先锋| 久久熟女人| 久久久久亚洲熟妇熟女| 男插女青青影院| 强奸国产精品视频| 亚洲自拍欧美色综合| 女人喷水视频在线观看| 日韩人人精品| 天天爽天天爽| 国产精品美女| 大香蕉在线免| 久久久精品无码亚免费| 中文字幕精品亚洲熟女| 超碰人人色| 久久精品熟妇丰满人妻99| 国精品一区二区三| 欧美精品一区二区少妇免费A片| 干B| 日本免费亚洲欧美| 天天日天天干少妇日| 久久超碰亚洲人| 日本激情免费大片| 97欧美综合网| 欧美美女啪啪视频| 亚洲欧洲综合av在线| 九九精品99| 欧美传媒| 后入国产| 国产激情视频一区区三区| 亚欧操逼片在线观看 | 中文久久| 波多野结衣一级视频| 一级AV性爱| 久久成人国产| 国产精品老师| 午夜情侣自拍网站| 91丝袜美腿片| 欧美综合网站999| 亚洲天堂欧美| 亚洲精品人妻在线| 国产精品三级视频网站| 精品久久久久,69国产成人精| 久热伊人99re| 91熟女视频网| 欧美精品69性爱| 亚洲AV无码国产精品久久久久 | 岛国AB视频| 夜夜爽妓女| 嗯嗯啊啊啊好爽| 一本一道vs波多野结衣| 麻豆国产尤物AV| 日韩天天本| 日本黄色精品专区网站| www网站黄| 日逼五月天| 男人天堂网站| 香蕉婷婷| 国产中文字幕在线| 国产亚洲中文不卡二区| 啊嗯好大视频在线观看| 大粗鳼巴久久久久| 强歼乱伦资源网| 欧美色自拍| 岛国在线一区二区三区| 青青网三级视频| 97视频免费播放| 天天做天天爱天天高潮| 台湾佬中文娱乐网久久久久久久久久com | 91男人天堂网| 久久av一级av少妇av高潮| A啊啊在线观看| 极品欧美一区二区三区| 97久久超碰国产网站| 少妇熟女1区2区3区| 久久久久久久久久久六六| 超清中文乱码字幕| 德国一二三不卡| 婷婷色婷婷| 99re视频在线播放青草| 人妻天堂综合网| 国产午夜在线观看| m欧洲一级午老| 在线国产福利网址导航| 久久久少妇诱惑精品视频| 五月婷婷激情| 黄色免费一级在线毛片| 少妇内射视频| 中日无幕一二三四区| 亚洲一区中文精品| 久久视频,这里只有精品| 久久久一区二区三区四曲免费听| 男人的天堂VA| 久久99精品国产| 蜜桃久久综合视频| 黄色大香焦1级‘′‘| 亚洲图片欧美色| 大香蕉2017| 亚州日韩97| 中文字幕加勒比海高清无码免费视频| 久久精品店| 影视综合无码少妇| 91天美| 欧美春色| 九九九精品一区二区无码| 懂色中文一区二区三区| 欧美一级色| 亚洲一区二区精品福利| 久久精品国产亚洲AV清纯| 久9爱精品| 人伦四五区| 黄站在线免费观看| 久久精品99| 91色伦| 欧美 日韩第一性色| 骚逼一区二区|