激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JavaWeb案例講解Servlet常用對象

JavaWeb案例講解Servlet常用對象

2022-02-25 13:58筆觸狂放 Java教程

Java Servlet 是運行在 Web 服務器或應用服務器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層

概述

本次文章基于第三章的ServletConfig,ServletContext,HttpServletRequest,HttpServletResponse對象完成一個圖書訂閱系統的購買圖書和查看圖書購買記錄功能。

搭建項目主頁面

創建一個動態網站項目,在src中新建包com.book.servlet.

在包中,新建HomeServlet作為主頁。效果圖如下:

JavaWeb案例講解Servlet常用對象

為了讓一訪問項目根路徑地址就默認進入HomeServlet,這里需要將 HomeServlet的虛擬地址寫入web.xml文件中作為默認的首頁地址。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Day07Jsp</display-name>
  <welcome-file-list>
    <welcome-file>HomeServlet</welcome-file>
  </welcome-file-list>
</web-app>

HomeServlet中要完成超鏈接的顯示,這里需要在該Servlet中定義兩個靜態數據,使用java注解的方式進行定義,代碼如下:

package com.book.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class HomeServlet
 */
@WebServlet(urlPatterns = "/HomeServlet",
initParams = {
		@WebInitParam(name = "buy",value = "購買圖書"),
		@WebInitParam(name = "selectOrder",value = "查看訂單")
})
public class HomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HomeServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
   
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

然后在類中的空白處,重寫init方法,用于加載兩個靜態數據,因這兩個靜態數據需要在其他方法中被使用,因此定義成全局變量。代碼如下:

JavaWeb案例講解Servlet常用對象

再重寫init方法,并通過兩個靜態數據,存儲至全局變量。

@Override
    public void init(ServletConfig config) throws ServletException {
    	buy=config.getInitParameter("buy");
    	selectOrder=config.getInitParameter("selectOrder");
    	
    }

因瀏覽器訪問服務器默認使用Get請求,這里我們在diGet方法中編寫兩個超鏈接發送給瀏覽器上顯示:

/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//當瀏覽器訪問該Servlet的時候,servlet將靜態數據發給瀏覽器顯示
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		PrintWriter pw=response.getWriter();
		pw.append("<div align="center">");
		pw.append("<a href="">"+buy+"</a>&nbsp;");
		pw.append("<a href="">"+selectOrder+"</a>&nbsp;");
		pw.append("</div>");
	}

這里運行以后,可看到以上的效果圖所示的頁面。

定義圖書實體類

因為我們需要展示多本圖書供用戶進行購買,而每一本圖書都需要包含,書名,作者,單價,出版社,購買時間等等數據,因此為采用定義實體類的方式用于分別存儲每一本書的這些數據信息。

接著我們在src文件夾中定義包com.book.entity,用于存儲創建的所有實體類,點右鍵新建class類,類名為Book,在Book中定義五個全局變量用于存儲以上五個信息,并對其進行數據封裝,代碼如下:

package com.book.entity;
/**
 * 圖書的實體類
 * @author teacher
 *	2021/10/14
 */
public class Book {
	//java類的封裝
	private String bookName;//書名
	private String author;//作者
	private String price;//單價
	private String address;//出版社
	private String buyTime;//購買時間
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getBuyTime() {
		return buyTime;
	}
	public void setBuyTime(String buyTime) {
		this.buyTime = buyTime;
	}
	
	//生成所有變量的get和set方法
	//構造方法的作用:
	//1.用于創建這個類的對象
	//2.用于快速給變量進行賦值
	//生成無參構造方法
	public Book() {
		// TODO Auto-generated constructor stub
	}
	//生成有參構造方法
	public Book(String bookName, String author, String price, String address, String buyTime) {
		super();
		this.bookName = bookName;
		this.author = author;
		this.price = price;
		this.address = address;
		this.buyTime = buyTime;
	}
	@Override
	public String toString() {
		return "Book [bookName=" + bookName + ", author=" + author + ", price=" + price + ", address=" + address
				+ ", buyTime=" + buyTime + "]";
	}
	
	//生成toString方法,為了在做功能的時候,
	//查看檢查這個對象中是否有數據
	
	
}

定義臨時圖書庫工具類

這里我們使用List集合臨時將多本圖書信息存儲起來,用于顯示在頁面上供用戶進行購買,這里我們在src文件夾中新建包com.book.util,在包中新建類BookDBUtil,在類中定義方法,創建多本圖書信息,并將多本圖書存儲至List集合,代碼如下:

package com.book.util;
/**
 * 圖書信息的工具類
 * @author teahcer
 *	2021/10/14
 *用于臨時存儲一些圖書信息
 */
 
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import com.book.entity.Book;
 
public class BookDataUtil {
 
	//定義方法,用于存儲多本書的信息
	public List<Book> getBooks(){
		Book book1=new Book("Java編程思想", "馬云", "120.0元", "人民郵電出版社", "");
		Book book2=new Book("MySQL數據庫教程", "任正非", "89.0元", "清華大學出版社", "");
		Book book3=new Book("Java瘋狂講義", "馬化騰", "108.0元", "電子工業出版社", "");
		Book book4=new Book("Python爬蟲技術", "李彥宏", "66.0元", "新華出版社", "");
		Book book5=new Book("C語言從入門到放棄", "李云龍", "56.0元", "江西出版社", "");
		//創建List用于存儲以上五本書
		List<Book> oBooks=new ArrayList<Book>();
		oBooks.add(book1);
		oBooks.add(book2);
		oBooks.add(book3);
		oBooks.add(book4);
		oBooks.add(book5);
		return oBooks;
	}
	
	//獲得當前實時時間
	public static String getNowTime() {
		//獲得的現在實時時間是毫秒計算的
		Date date=new Date();
		//簡單日期格式類  2021年10月20 日  13:55:30
		SimpleDateFormat sdf=
				new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		//按照設定的格式進行格式化
		String time=sdf.format(date);
		return time;
	}
}

創建圖書信息列表頁面供用戶購買圖書

即多本圖書已準備好,這里需要創建Servlet完成圖書信息列表頁面,類名為ShowBookInfoServlet,這里我們需要先從工具類中獲得所有圖書信息,并將該圖書已表格的形式發送給瀏覽器上顯示出來,其代碼如下:

package com.book.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.book.entity.Book;
import com.book.util.BookDataUtil;
 
/**
 * Servlet implementation class ShowBookInfoServlet
 */
@WebServlet("/ShowBookInfoServlet")
public class ShowBookInfoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ShowBookInfoServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//獲得所有圖書信息
		BookDataUtil util=new BookDataUtil();
		List<Book> oBooks=util.getBooks();
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		PrintWriter pw=response.getWriter();
		pw.append("<div align="center">");
		pw.append("<table border="1" style="width:800px;text-align:center;">");
		//寫標題
		pw.append("<tr>");
		pw.append("<td>書名</td>");
		pw.append("<td>作者</td>");
		pw.append("<td>單價</td>");
		pw.append("<td>出版社</td>");
		pw.append("<td>操作</td>");
		pw.append("</tr>");
		for (int i=0;i<oBooks.size();i++) {
			pw.append("<tr>");
			pw.append("<td>"+oBooks.get(i).getBookName()+"</td>");
			pw.append("<td>"+oBooks.get(i).getAuthor()+"</td>");
			pw.append("<td>"+oBooks.get(i).getPrice()+"</td>");
			pw.append("<td>"+oBooks.get(i).getAddress()+"</td>");
			pw.append("<td><a href="BuyBookServlet?index="+i+""><input type="button" "
					+ "style="background-color:green;" "
					+ "value="購買"></a></td>");
			pw.append("</tr>");
		}
		pw.append("</table>");
		pw.append("</div>");
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

并在HomeServlet的首頁的購買圖書的超鏈接上添加圖書信息列表頁面的虛擬地址。

JavaWeb案例講解Servlet常用對象

其運行后,點擊購買圖書即課跳轉至圖書信息列表頁面,效果如下:

JavaWeb案例講解Servlet常用對象

JavaWeb案例講解Servlet常用對象

完成存儲用戶購買的圖書記錄信息

當用戶點擊任意一本圖書進行購買的時候,這里我們采取發送給圖書的下標給服務器的方式,能盡快的獲取用戶要購買的圖書信息,這里新建一個Servlet類,類名為BuyBookServlet,用于接收用戶將要購買的圖書的下標,并查找出該圖書,并通過方法獲得當前購買圖書的下單的實時時間,存儲至該購買的圖書中,然后將該圖書存儲至List集合,因為用戶可能會購買多本圖書,最后將所喲購買的圖書記錄信息存儲至ServletContext對象中。

package com.book.servlet;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.book.entity.Book;
import com.book.util.BookDataUtil;
 
/**
 * Servlet implementation class BuyBookServlet
 */
@WebServlet("/BuyBookServlet")
public class BuyBookServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BuyBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//獲得用于點擊購買按鈕發送過來的請求
		//獲得瀏覽器發送過來的圖書的下標
		String index=request.getParameter("index");
		//將接收的字符串類型轉換成int類型
		int i=Integer.parseInt(index);
		//根據用戶發送過來的下標,去查找用戶將要購買的書籍
		List<Book> oBooks=new BookDataUtil().getBooks();
		Book book=oBooks.get(i);
		//當用戶購買圖書的時候,需要獲得當前實時時間
		book.setBuyTime(BookDataUtil.getNowTime());
		//獲得ServletContext對象
		ServletContext sc=getServletContext();
		//判斷ServletContext是否存在List集合
		Object object=sc.getAttribute("orders");
		List<Book> oList=null;
		if (object==null) {
			//說明以前從來沒有購買過書
			oList=new ArrayList<Book>();
			oList.add(book);
		}else {
			//以前有購買書,只需要拿到List集合繼續添加購買記錄即可
			//不需要重新創建List集合
			oList=(List<Book>) object;
			oList.add(book);
		}
		//保存完購買記錄,之后存儲至ServletContext對象
		sc.setAttribute("orders", oList);
		//購買成功之后,跳轉至提示頁面
		//使用請求轉發跳轉,因為請求轉發可以攜帶數據跳轉頁面
		request.setAttribute("book", book);
		request.getRequestDispatcher("AlertServlet")
					.forward(request, response);
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

創建提示信息頁面

在圖書記錄信息存儲后,需要提示用戶購買的圖書下單完成,是否需要繼續購買的提示,這里新建一個Servlet類,類名為:AlertServlet

package com.book.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.book.entity.Book;
 
/**
 * Servlet implementation class AlertServlet
 */
@WebServlet("/AlertServlet")
public class AlertServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AlertServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Book book=(Book) request.getAttribute("book");
		String info="您的《"+book.getBookName()+"》購買成功,"
				+ "如果繼續購買請<a href="ShowBookInfoServlet">點擊這里</a>,"
				+ "或者5秒之后自動跳回首頁";
		response.setHeader("refresh", "5;url=HomeServlet");
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		PrintWriter pw=response.getWriter();
		pw.print(info);
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

效果如下:

JavaWeb案例講解Servlet常用對象

JavaWeb案例講解Servlet常用對象

完成查看圖書記錄信息列表頁面

用戶在購買完圖書信息之后,需要查看當前購買的所有圖書的記錄信息,這里我們新建Servlet類,類名為:SelectOrderServlet,從ServletContext類中獲得所有的圖書記錄信息,展示在表格上,并需要判斷是否有購買圖書記錄信息,其代碼如下:

package com.book.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.book.entity.Book;
 
/**
 * Servlet implementation class SelectOrderServlet
 */
@WebServlet("/SelectOrderServlet")
public class SelectOrderServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SelectOrderServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//因為用戶購買的圖書信息被存儲在ServletContext對象中
		//要展示用戶的購買記錄,需要先獲得ServletContext對象
		ServletContext sc=getServletContext();
		//從該對象中獲得存儲圖書記錄的List集合
		Object object=sc.getAttribute("orders");
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		PrintWriter pw=response.getWriter();
		List<Book> oBooks=null;
		if (object!=null) {
			oBooks=(List<Book>) object;
			pw.append("<div align="center">");
			pw.append("<table border="1" style="width:800px;text-align:center;">");
			//寫標題
			pw.append("<tr>");
			pw.append("<td>書名</td>");
			pw.append("<td>作者</td>");
			pw.append("<td>單價</td>");
			pw.append("<td>出版社</td>");
			pw.append("<td>購買時間</td>");
			pw.append("</tr>");
			for (int i=0;i<oBooks.size();i++) {
				pw.append("<tr>");
				pw.append("<td>"+oBooks.get(i).getBookName()+"</td>");
				pw.append("<td>"+oBooks.get(i).getAuthor()+"</td>");
				pw.append("<td>"+oBooks.get(i).getPrice()+"</td>");
				pw.append("<td>"+oBooks.get(i).getAddress()+"</td>");
				pw.append("<td>"+oBooks.get(i).getBuyTime()+"</td>");
				pw.append("</tr>");
			}
			pw.append("</table>");
			pw.append("</div>");
		}else {
			pw.print("當前還沒有購買圖書的記錄,請先購買再查看!!!");
		}
		
	}
	
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

并把給Servlet的虛擬地址添加至主頁面的第二個超鏈接上,

JavaWeb案例講解Servlet常用對象

其運行的效果如下:

JavaWeb案例講解Servlet常用對象

JavaWeb案例講解Servlet常用對象

初學者可根據代碼完成以上功能,可自行擴展修改圖書信息以及刪除購買記錄的功能等等。

到此這篇關于JavaWeb案例講解Servlet常用對象的文章就介紹到這了,更多相關JavaWeb Servlet 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/u010321564/article/details/120896362

延伸 · 閱讀

精彩推薦
  • Java教程深入談談java的枚舉(enum)類型

    深入談談java的枚舉(enum)類型

    這篇文章介紹的是java中的枚舉類型,對于枚舉類型的相關知識,我們也介紹過不少方面的內容。希望本文能夠給你帶來幫助,下面來一起看看,有需要的可...

    daisy1742020-06-10
  • Java教程Java ThreadLocal的設計理念與作用

    Java ThreadLocal的設計理念與作用

    這篇文章主要介紹了Java ThreadLocal的設計理念與作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    我是一只小兔紙咿呀咿呀4732021-07-25
  • Java教程Java程序員應該遵守的10條紀律

    Java程序員應該遵守的10條紀律

    Java程序員有許多應遵循的守則或最佳實踐方式。本文概述了每個開發者最應該遵循的10條守則或戒律,如果不遵循它們,將會導致災難性后果。 ...

    lijiao5222020-01-05
  • Java教程java中queue接口的使用詳解

    java中queue接口的使用詳解

    本篇文章主要介紹了java中queue接口的使用詳解,對學習Queue接口有一定的幫助,感興趣的小伙伴們可以參考一下。 ...

    風生水起4722020-07-06
  • Java教程使用Spring Boot集成FastDFS的示例代碼

    使用Spring Boot集成FastDFS的示例代碼

    本篇文章主要介紹了使用Spring Boot集成FastDFS的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    純潔的微笑10502021-03-30
  • Java教程Java Spring Boot實戰練習之單元測試篇

    Java Spring Boot實戰練習之單元測試篇

    單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。對于單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語...

    程序猿-小菜6712022-02-20
  • Java教程Java中的clone方法詳解_動力節點Java學院整理

    Java中的clone方法詳解_動力節點Java學院整理

    clone顧名思義就是復制, 在Java語言中, clone方法被對象調用,所以會復制對象。下面通過本文給大家介紹java中的clone方法,感興趣的朋友一起看看吧...

    動力節點2562020-11-08
  • Java教程java 使用JDBC構建簡單的數據訪問層實例詳解

    java 使用JDBC構建簡單的數據訪問層實例詳解

    以下是如何使用JDBC構建一個數據訪問層,包括數據轉換(將從數據庫中查詢的數據封裝到對應的對象中……),數據庫的建立,以及如何連接到數據庫,需...

    java教程網4062020-07-05
主站蜘蛛池模板: 天天操很很操 | 香蕉国产片 | 羞羞视频在线免费 | 中国字幕av | 一级外国毛片 | 日本精品久久久一区二区三区 | 日韩精品中文字幕在线播放 | 毛片免费在线播放 | 久久成年人视频 | 婷婷亚洲一区二区三区 | 91av资源在线 | 中国洗澡偷拍在线播放 | 羞羞视频一区二区 | 日韩电影av在线 | 欧美一级做a | 香蕉久草在线 | 黄污网站在线观看 | 青青草国产在线视频 | 国产呻吟| 久草最新 | 久久精品中文字幕一区 | 久久久三区 | 午夜视频你懂的 | 久久精品re| 亚洲午夜久久久精品一区二区三区 | 日本欧美一区二区三区视频麻豆 | 国产伦精品一区二区三区在线 | 亚洲欧美aⅴ | 成人免费久久网 | 国产一级一片免费播放 | 国产精品久久久久久久av三级 | 特级无码毛片免费视频尤物 | 国产一区二区精品免费 | 久草影音 | 日本a大片 | 久久国产成人午夜av浪潮 | 欧美日韩色片 | 国产99久久久久久免费看农村 | 中文字幕亚洲情99在线 | 黄色的视频免费观看 | 四季久久免费一区二区三区四区 |