精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

開發(fā) RESTful 應(yīng)用程序,已經(jīng)從困難到容易

網(wǎng)絡(luò) 通信技術(shù)
大家都知道,我們要用 Spring 創(chuàng)建一個RESTful 應(yīng)用程序,是需要為框架做很多事情的,比如往項目的構(gòu)建文件中添加各種庫依賴,還要自己寫各種配置文件,因為 Spring 雖然牛逼的提供了很多優(yōu)秀的特性,但是我們還是需要配置告訴 Spring 該怎么做。

 [[413438]]

本文轉(zhuǎn)載自微信公眾號「七哥聊編程」,作者七哥 。轉(zhuǎn)載本文請聯(lián)系七哥聊編程公眾號。

大家好呀,我是七哥。

大家都知道,我們要用 Spring 創(chuàng)建一個RESTful 應(yīng)用程序,是需要為框架做很多事情的,比如往項目的構(gòu)建文件中添加各種庫依賴,還要自己寫各種配置文件,因為 Spring 雖然牛逼的提供了很多優(yōu)秀的特性,但是我們還是需要配置告訴 Spring 該怎么做。

但是,現(xiàn)在都啥時代了,全人類都講究自動化、智能化了,我們程序員開發(fā)任務(wù)為啥就不能來點(diǎn)自動化、智能化呢?這不, Spring Boot 橫空出世了。它擁有的 起步依賴、自動配置 特性,讓我們拒絕那些繁瑣且千篇一律的配置,解放程序員的雙手,集中精力開發(fā)應(yīng)用程序即可。

今天這篇文章的目標(biāo),就是帶大家用 Spring Boot 開發(fā)一個視頻觀看列表的應(yīng)用程序,一起感受 Spring Boot 的強(qiáng)大。

1. 前言

我們今天要開發(fā)的這個視頻觀看列表應(yīng)用程序,可以支持用戶查找觀看列表,輸入自己想看的視頻信息,刪除已經(jīng)看過的視頻。

技術(shù)棧采用 Spring Boot 快速開發(fā)、Spring MVC 處理 Web 請求, Thymeleaf 來定義 Web 視圖,Spring Data JPA 來持久化觀看列表到數(shù)據(jù)化,數(shù)據(jù)庫使用 H2。

2. 初始化項目

創(chuàng)建 Spring Boot 項目的幾種方式我們之前已經(jīng)講過了,本質(zhì)都是使用的 Spring Initializr,選擇最合適的就好,但是要確保勾選了我們需要的依賴。

使用 IDEA 選擇 Initializr 創(chuàng)建項目:

創(chuàng)建完成后,就得到了如下圖的項目結(jié)構(gòu):

基本上 Spring Boot 項目初始化完成后的結(jié)構(gòu)都是一樣的,你可能已經(jīng)著急想開發(fā)應(yīng)用程序了,但是在進(jìn)入下一步寫代碼之前,我們還是停下腳步來具體看下項目里的這些東西都是干啥的,我覺得這是很重要的!搞清楚了大概的原理在開發(fā)的時候就不容易踩坑了,免得你在實(shí)際工作中不明所以,改這些文件也是糊里糊涂的,這樣容易出 bug 的~~

3. Spring Boot項目的結(jié)構(gòu)

總體來說 Spring Boot 項目是遵循 Maven 或者 Gradle 的項目布局的,主要代碼放在 src/main/java 路徑下,配置文件放到 src/main/resources 路徑下,測試代碼放到 src/test/java 路徑下,如果有測試配置就放在 src/test/resources 路徑。

我們再來看下我們項目根目錄中還有不少文件:

  • build.gradle: Gradle 構(gòu)建說明文件;
  • SpringRoad02Application.java:應(yīng)用程序的啟動引導(dǎo)類,同時也是主要的 Spring 配置類;
  • application.properties:用于配置應(yīng)用程序和 Spring Boot 的屬性;
  • SpringRoad02ApplicationTests.java:基本的集成測試類;

啟動引導(dǎo)Spring

SpringRoad02Application 它的作用是啟動引導(dǎo)和配置。

  1. //開啟組件掃描和自動配置 
  2. @SpringBootApplication  
  3. public class SpringRoad02Application { 
  4.  
  5.     public static void main(String[] args) { 
  6.         // 啟動引導(dǎo)應(yīng)用程序 
  7.         SpringApplication.run(SpringRoad02Application.class, args);  
  8.     } 
  9.  

@SpringBootApplication 這個注解是如何開啟組件掃描和自動配置功能的呢?

這是因為 @SpringBootApplication 注解將三個有用的注解組合在了一起:

  • @SpringBootConfiguration:標(biāo)明該類是一個基于 Java 代碼的 Spring 配置類;
  • @ComponentScan:啟用組件掃描,這樣項目中我們寫的控制器和其它服務(wù)類才會被 Spring 掃描注冊為應(yīng)用程序上下文中的 Bean;
  • @EnableAutoConfiguration:這個注解最牛逼,就是它開啟了 Spring Boot 的黑魔法,讓我們不用寫 Spring 那些繁瑣的 xml 配置;

那要運(yùn)行 Spring Boot 應(yīng)用,除了傳統(tǒng)的 WAR 包部署,啟動類的 main 方法支持我們在命令行里把應(yīng)用程序當(dāng)成可執(zhí)行的 JAR 包來運(yùn)行。實(shí)際上就算我們一行代碼都不寫,這個項目已經(jīng)是可運(yùn)行的了,最簡單的構(gòu)建運(yùn)行方法就是 Gradle 的 bootRun 任務(wù),你可以執(zhí)行下面的命令感受一下:

  1. gradle bootRun 

啟動成功截圖:

測試Spring Boot應(yīng)用程序

Initializr 還提供了一個測試類:SpringRoad02ApplicationTests ,可以基于它我們來為應(yīng)用程序編寫測試。

  1. @SpringBootTest // 通過 Spring Boot 加載上下文 
  2. class SpringRoad02ApplicationTests { 
  3.  
  4.     @Test 
  5.     void contextLoads() { 
  6.     } 
  7.  

可以直接運(yùn)行這個 contextLoads() 方法,不報錯就說明加載應(yīng)用程序上下文是沒有問題的:

配置應(yīng)用程序?qū)傩?/strong>

Initializr 生成的項目中有一個空的 application.properties 文件,這個文件其實(shí)是可選的,你可以刪掉,但是一般會保留,因為實(shí)際項目肯定都有很多的屬性配置,比如數(shù)據(jù)庫、mq、redis 等等。

我們可以給這個文件配置一個屬性 sever.port=8000 試試看:

加上后,我們在啟動程序,它內(nèi)嵌的 Tomcat 監(jiān)聽端口就從默認(rèn)的 8080 改為了 8000。

神奇的地方在于,我們完全不用告訴 Spring Boot 去加載 application.properties 文件,只要它在根目錄存在就會自動被加載,Spring 和 應(yīng)用程序就可以獲取其中配置的屬性。

4. 構(gòu)建說明文件,起步依賴介紹

項目基本結(jié)構(gòu)我們上面都已經(jīng)介紹的差不多了,那接下里我們就來看看 Spring Boot 應(yīng)用程序到底是如何構(gòu)建的。比如 Spring Boot 為什么可以支持打 JAR 包部署?如果沒有 Spring Boot 我們要使用 Spring MVC 需要添加哪個依賴,應(yīng)該用哪個版本的 Spring Data JPA?這些包放在一起的兼容性如何?

上面這些問題,都是我們在開發(fā) Spring 應(yīng)用程序會遇到的問題,一般情況下項目需要依賴包我們都是直接從其它項目拷貝過來,因為現(xiàn)有項目經(jīng)過了測試,依賴jar包之前的兼容性經(jīng)過了測試,出現(xiàn)問題的情況就比較小。不過就算這樣,這也是一項復(fù)雜繁瑣的工作。

好在 Spring Boot 的出現(xiàn)解放了我們奮戰(zhàn)在一線的程序員,因為它引入了起步依賴這個特性,簡而言之就是可以根據(jù)功能來引入對應(yīng)的依賴包。

比如我們要開發(fā)一個 Web 應(yīng)用,它使用 Thymeleaf,通過 Spring Data JPA 來持久化數(shù)據(jù),那我們的構(gòu)建文件就只需要寫上這些功能就可以了。

比如下面這樣,就是我通過 Spring Initializr 創(chuàng)建 Spring Boot 應(yīng)用程序后 Gradle 構(gòu)建文件里的包依賴說明:

  1. dependencies { 
  2.     implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 
  3.     implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' 
  4.     implementation 'org.springframework.boot:spring-boot-starter-web' 
  5.     compileOnly 'org.projectlombok:lombok' 
  6.     runtimeOnly 'com.h2database:h2' 
  7.     annotationProcessor 'org.projectlombok:lombok' 
  8.     testImplementation 'org.springframework.boot:spring-boot-starter-test' 

可以看到,構(gòu)建文件中沒有單獨(dú)的庫依賴,只需要添加對應(yīng)的 起步依賴 就好了。這幾個起步依賴等價于加了一大把獨(dú)立的包,每個包的版本會根據(jù) Spring Boot 的版本自動幫我們決定,都是經(jīng)過大量的官方測試的,所以兼容性也可以放心。

如果你是一個小心謹(jǐn)慎的人,實(shí)在想看看自己用的相關(guān)包的版本,那么可以使用構(gòu)建工具的命令查到你想看的:

  1. // gradle里使用的命令 
  2. gradle dependencies 
  3. // maven里使用的命令 
  4. mvn dependency:tree 

然后你就會得到一顆樹狀列表,查看每個起步依賴引入的那一大堆相關(guān)的包。

上面的這幾個起步依賴,包括 Web、Thymeleaf、JPA等,只不過是 Spring Boot 眾多起步依賴中的滄海一粟,它還提供了很多起步依賴,大家可以按需添加即可。

覆蓋起步依賴引入的傳遞依賴

假如我們現(xiàn)在要替換起步依賴引入的其中一個包的版本,要怎么做呢?當(dāng)然一般我們不需要手動去替換,但是方法我們還是需要掌握的,可以用在某個包出現(xiàn)了嚴(yán)重的bug,或者刪除不需要使用的包給項目瘦身。

排除傳遞的依賴

gradle里面可以如下操作:

  1. // 排除掉 Jackson 
  2. implementation ('org.springframework.boot:spring-boot-starter-data-jpa') { 
  3.         exclude group'com.fasterxml.jackson.core' 

maven里可以使用元素來排除傳遞依賴。

  1. <dependency> 
  2.   <groupId>org.springframework.boot</groupId> 
  3.   <artifactId>spring-boot-starter-web</artifactId> 
  4.   <exclusions> 
  5.     <exclusion> 
  6.       <groupId>com.fasterxml.jsackson.core</groupId> 
  7.     </exclusion>   
  8.   </exclusions>   
  9. </dependency>   

 

 

 

替換傳遞的依賴

假如我們是需要將傳遞的 Jackson 包進(jìn)行升級呢?這種情況一般多用在新版本的包升級了某個bug。

Maven 總是會用最近的依賴,也就是說重新添加就會覆蓋:

  1. <dependency> 
  2.   <groupId>com.fasterxml.jsackson.core</groupId> 
  3.   <artifactId>jackson-databind</artifactId> 
  4.   <version>2.12.3</version> 
  5. </dependency>     

 

Gradle 也是一樣的道理,不過如果你要替換的包版本比傳遞的包版本低 ,那么這塊有點(diǎn)坑需要注意下:Gradle 默認(rèn)使用最新版本的包,所以就需要先排除起步依賴引入的包,在加入對應(yīng)版本的包。

  1. implementation ('org.springframework.boot:spring-boot-starter-data-jpa') { 
  2.         exclude group'com.fasterxml.jackson.core' 
  3. }   
  4. implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.1' 

當(dāng)然替換包的版本時候一定要謹(jǐn)慎,畢竟起步依賴的傳遞都是經(jīng)過大量的測試的。

5. 使用自動配置,代碼開發(fā)

Spring Boot 采用的自動配置,可以節(jié)省我們手動寫諸如 web.xml 等配置文件,下面直接給大家展示下我們開發(fā)一個視頻觀看列表程序所需要的代碼。

數(shù)據(jù)庫實(shí)體對象;

  1. @Entity 
  2. @Data 
  3. public class Video { 
  4.     // 主鍵 
  5.     @Id  
  6.     // 值是自動生成的 
  7.     @GeneratedValue(strategy = GenerationType.AUTO)  
  8.     private Long id; 
  9.  
  10.     private String reader; 
  11.  
  12.     private String isbn; 
  13.  
  14.     private String title; 
  15.  
  16.     private String author; 
  17.  
  18.     private String description; 
  19.  
  20. }   

@Entity 注解表示這是一個JPA實(shí)體對象,@GeneratedValue 表示 id 字段的值是自動生成的。

數(shù)據(jù)訪問接口

  1. public interface ReadingListRepository extends JpaRepository<Video,Long> { 
  2.  
  3.     List<Video> findByReader(String reader); 
  4.    

你沒看錯,只需要繼承 JpaRepository 接口即可,這個接口內(nèi)置了18個方法,我們也無需寫實(shí)現(xiàn)類, Spring Date 提供了非常智能的實(shí)現(xiàn),應(yīng)用程序啟動后,就會幫我們自動生成實(shí)現(xiàn)。

Web 接口定義

有了數(shù)據(jù)庫實(shí)體對象和持久化數(shù)據(jù)的接口,接下來我們就需要一個前端控制器,這塊使用的當(dāng)然就是 SpringMVC 了。

  1. @Controller 
  2. public class ReadingListController { 
  3.  
  4.     @Autowired 
  5.     private ReadingListRepository readingListRepository; 
  6.  
  7.     @GetMapping(value = "/{viewer}"
  8.     public String readersVideos(@PathVariable("viewer") String viewer, Model model) { 
  9.         List<Video> videoList = readingListRepository.findByReader(viewer); 
  10.         if (videoList != null) { 
  11.             model.addAttribute("videos", videoList); 
  12.         } 
  13.         return "readingList"
  14.     } 
  15.  
  16.     @PostMapping(value = "/{viewer}"
  17.     public String addToReadingList(@PathVariable("viewer") String viewer, Video video) { 
  18.         video.setReader(viewer); 
  19.         readingListRepository.save(video); 
  20.         return "redirect:/{viewer}"
  21.     } 
  22. }   

代碼很簡單,就是定義了兩個接口,一個用于處理用戶的 GET 請求,獲取觀看視頻的列表,一個用于將用戶提交的視頻信息綁定到 Video 對象,然后通過數(shù)據(jù)訪問接口落庫。

由于 Spring Boot 提供的自動裝配特性,因此我們無需配置視圖解析器和模板引擎,就可以支持解析邏輯視圖名然后重定向到頁面了。

Thymeleaf模板

Spring Boot 項目我們的視圖模板文件需要放到 src/main/resources/templates 目錄下,文件名為:readingList.html 。

  1. <html> 
  2.     <head> 
  3.         <title>Reading List</title> 
  4.         <link rel="stylesheet" th:href="@{/style.css}"></link> 
  5.     </head> 
  6.     <body> 
  7.         <h2>Your Reading List</h2> 
  8.         <div th:unless="${#lists.isEmpty(videos)}"
  9.             <dl th:each="video : ${videos}"
  10.                 <dt class="bookHeadline"
  11.                     <span th:text="${video.title}">Title</span> by 
  12.                     <span th:text="${video.author}">Author</span> 
  13.                     (ISBN: <span th:text="${video.isbn}">ISBN</span>) 
  14.                 </dt> 
  15.                 <dd class="bookDescription"
  16.                     <span th:if="${video.description}" th:text="${video.description}">Description</span> 
  17.                     <span th:if="${video.description eq null}">No description available</span> 
  18.                 </dd> 
  19.             </dl> 
  20.         </div> 
  21.         <div th:if="${#lists.isEmpty(videos)}"
  22.             <p>You have no books in your book list</p> 
  23.         </div> 
  24.         <hr/> 
  25.         <h3>Add a video</h3> 
  26.         <form method="POST"
  27.             <label for="title">Title:</label> 
  28.             <input type="text" name="title" size="50"></input><br/> 
  29.             <label for="author">Author:</label> 
  30.             <input type="text" name="author" size="50"></input><br/> 
  31.             <label for="isbn">ISBN:</label> 
  32.             <input type="text" name="isbn" size="15"></input><br/> 
  33.             <label for="description">Description:</label><br/> 
  34.             <textarea name="description" cols="80" rows="5"></textarea><br/> 
  35.             <input type="submit"></input> 
  36.         </form> 
  37.     </body> 
  38. </html>   

 

 

 

 

然后我們還提供了一個簡單的樣式文件,這個名為 style.css 的樣式文件,我們需要放到 src/main/resources/static 靜態(tài)資源目錄下。

  1. body { 
  2.     background-color: #cccccc; 
  3.     font-family: arial,helvetica,sans-serif; 
  4. .bookHeadline { 
  5.     font-size: 12pt; 
  6.     font-weight: bold; 
  7. .bookDescription { 
  8.     font-size: 10pt; 
  9. label { 
  10.     font-weight: bold; 

至此代碼就寫完了,雖然它什么配置都沒有寫,不過這確實(shí)已經(jīng)是一個完整的 Spring 應(yīng)用程序了。你是不是已經(jīng)迫不及待的想運(yùn)行了?

6. 運(yùn)行測試

Spring Boot 應(yīng)用程序,可以選擇通過 Maven 或者 Gradle 來運(yùn)行應(yīng)用程序,比如文章前面我們使用的: gradle bootRun。

當(dāng)然我們一般使用 IDEA 來開發(fā),可以執(zhí)行運(yùn)行啟動類的 main 方法來運(yùn)行。

然后我們通過瀏覽器來訪問:http://localhost:8000/sevenluo

可以嘗試添加一些視頻,然后就可以得到視頻列表了。

結(jié)尾

那今天我們通過一個簡單的視頻觀看列表應(yīng)用程序,帶大家手把手開發(fā)了一個完整的 Spring Boot 應(yīng)用程序。

開發(fā)全程我們是沒有任何配置的,之所以這么便利主要是用到了 Spring 4.0 引入的條件化配置新特性。

我們也可以在 Spring 里很方便的編寫自己的條件,只要實(shí)現(xiàn) Condition 接口即可,今天就不多逼逼了,如果你對于 Spring Boot 如何通過條件化配置實(shí)現(xiàn)自動裝配感興趣,可以留言告訴我,我們安排一章來詳細(xì)介紹。

 

責(zé)任編輯:武曉燕 來源: 七哥聊編程
相關(guān)推薦

2009-05-11 20:22:41

2011-03-17 15:01:14

一次性試用品應(yīng)用程序忠實(shí)用戶

2021-11-16 13:46:29

移動應(yīng)用安全應(yīng)用程序

2012-02-08 15:06:31

ibmdw

2022-09-19 00:37:13

SaaS云計算開發(fā)

2013-02-21 14:14:40

開發(fā)Tizen

2013-02-21 14:15:41

開發(fā)Tizen

2013-11-19 15:35:01

2010-11-23 09:06:37

Web應(yīng)用程序

2010-10-15 09:39:22

MeeGoQt

2009-09-24 17:21:17

加速Hibernate

2009-07-17 16:09:29

Swing桌面應(yīng)用程序

2011-05-31 13:34:22

應(yīng)用開發(fā)iPad

2013-08-08 09:48:10

Web

2011-07-21 16:19:30

iOS Twitter

2012-09-24 09:31:28

應(yīng)用移植性云計算云平臺應(yīng)用程序

2018-12-11 11:41:14

物聯(lián)網(wǎng)應(yīng)用程序IOT

2011-03-31 13:15:18

BlackBerry

2011-12-06 10:10:59

云計算移動應(yīng)用

2011-02-22 10:23:43

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

秋霞av一区二区三区| 涩涩屋成人免费视频软件| 国产成人77亚洲精品www| 久久综合九色综合97婷婷| 日韩av理论片| 亚洲综合图片一区| jizz久久精品永久免费| 色婷婷亚洲婷婷| 中文字幕日韩一区二区三区不卡| 免费观看毛片网站| 日韩主播视频在线| 欧美成人国产va精品日本一级| 在线观看国产网站| 日韩黄色碟片| 午夜精品久久久久久久| 亚洲精品乱码久久久久久蜜桃91| 亚洲黄色在线观看视频| 日韩va欧美va亚洲va久久| 欧美激情乱人伦| 91精品久久久久久久久久久久| 国产精品va视频| 欧美日韩在线看| 欧美日韩一级在线| 伦理片一区二区三区| 国产精品一区二区不卡| 国产精品久久久久9999| 日本熟女一区二区| 9191国语精品高清在线| 亚洲欧美成人一区二区在线电影| 成人三级做爰av| 99热播精品免费| 欧美性猛交xxxx黑人猛交| 欧美美女黄色网| 日本三级视频在线播放| 久久免费国产精品| 九9re精品视频在线观看re6| 亚洲国产精品久久人人爱潘金莲| 久久国产乱子精品免费女| 456亚洲影院| www.天天色| 欧美日韩国产综合网| 久久精品国产免费观看| 亚洲高潮女人毛茸茸| 欧美禁忌电影| 精品无人区太爽高潮在线播放 | 久久狠狠久久综合桃花| 国产视频一区二区三区四区五区| 麻豆精品久久精品色综合| 欧亚精品中文字幕| √资源天堂中文在线| 一本色道久久综合| 亚洲18私人小影院| 日韩三级视频在线| 亚洲精品影院在线观看| 久久免费高清视频| 亚洲国产精品成人无久久精品| 欧美日韩18| 欧美精品制服第一页| 国产高潮流白浆| 欧美一区二区三区久久精品茉莉花 | 欧美 日韩 综合| 成人激情午夜影院| 国产v亚洲v天堂无码| 亚洲精品一区二区三区四区 | 添女人荫蒂视频| 国 产 黄 色 大 片| 精品一区二区三区蜜桃| 国产日韩中文字幕在线| 国产精品久久久久久久久久久久久久久久久久| 日本女优在线视频一区二区 | 国内不卡的一区二区三区中文字幕 | 久久精品电影网站| 国精品无码一区二区三区| 亚洲最大av| 欧美高清视频免费观看| 日本熟妇一区二区| 日韩**一区毛片| 成人黄色av网站| 人妻与黑人一区二区三区| 99热99精品| 色综合电影网| av在线免费网站| 精品久久久国产| 成人免费在线观看视频网站| 精品中文视频| 日韩精品欧美激情| 五月天婷婷丁香网| 一本到12不卡视频在线dvd| 久久久久久亚洲精品不卡| 日韩精品在线免费视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 91亚洲永久免费精品| 日韩专区第一页| 中文字幕精品三区| 国产aaa免费视频| 日本高清不卡一区二区三区视频| 欧美绝品在线观看成人午夜影视| 欧美一级片在线免费观看| 亚洲精品国产setv| 久久综合电影一区| 国产又大又黄又粗| 久久se精品一区二区| 国产伦精品一区二区三区高清 | 2020国产精品久久精品美国| 亚洲综合五月天| 韩国成人二区| 欧美电影一区二区三区| 亚洲自拍偷拍一区二区| 天天做天天爱天天爽综合网| 欧美在线一级视频| 精品人妻一区二区三区日产乱码| 国产亚洲欧美一区在线观看| 日本福利视频在线观看| 97欧美成人| 日韩激情视频在线播放| 天天综合天天做| 日韩成人av影视| 久久久精彩视频| 在线中文字幕视频观看| 欧美丝袜自拍制服另类| 鲁大师私人影院在线观看| 欧美日本不卡高清| 成人做爽爽免费视频| 国产露出视频在线观看| 精品动漫一区二区| 欧美xxxx日本和非洲| 欧美wwwww| 国产成人精品在线| 色视频免费在线观看| 亚洲精品综合在线| 九九九九九国产| 成人影视亚洲图片在线| 欧美亚洲视频在线观看| 欧美在线 | 亚洲| 一区二区在线电影| 999久久久精品视频| 日韩精品久久| 国产精品免费在线免费| 韩国中文字幕2020精品| 欧美视频在线免费看| 2一3sex性hd| 影音先锋日韩资源| 成人欧美一区二区三区黑人免费| 国产在线一区二区视频| 777午夜精品免费视频| 国产精品69久久久久孕妇欧美| 日韩精品午夜视频| 欧美一区二区福利| 日韩欧美另类一区二区| 亚洲欧洲偷拍精品| 色老头在线视频| 国产欧美综合在线观看第十页| 欧美污视频网站| 国产99久久精品一区二区300| 欧美专区福利在线| 可以在线观看的av| 欧美在线不卡视频| 日本黄色激情视频| 激情国产一区二区| 国产女人18毛片| 国产成人精品福利| 欧美最猛性xxxxx亚洲精品| 瑟瑟在线观看| 欧美伊人久久久久久午夜久久久久| 久久久久亚洲av无码a片| 日韩av电影一区| 综合视频在线观看| 亚洲精品在线a| 91国产美女视频| 国产日产精品久久久久久婷婷| 欧美吞精做爰啪啪高潮| 很污很黄的网站| 国产很黄免费观看久久| 日日碰狠狠添天天爽超碰97| 中文精品一区二区| 国产视频福利一区| 蜜臀av在线| 亚洲欧美激情另类校园| 伊人久久成人网| 亚洲黄一区二区三区| 欧美在线不卡区| 日韩一区二区三| 精品少妇一区二区三区免费观看| 欧美精品一区二区在线观看| 亚洲免费精彩视频| 久久综合伊人77777| 8x海外华人永久免费日韩内陆视频| 国产精品视频免费观看www| 欧美亚洲午夜视频在线观看| 国产视频123区| 国产成人在线观看免费网站| 欧美男女爱爱视频| jlzzjlzz亚洲女人| 亚洲影院污污.| 国模冰冰炮一区二区| 俺去啦;欧美日韩| 亚州男人的天堂| 69久久99精品久久久久婷婷| 久久久久性色av无码一区二区| 久久久夜色精品亚洲| 亚洲综合在线一区二区| 免费看男女www网站入口在线| 亚洲欧美日韩视频一区| 精品国产免费无码久久久| 欧美性少妇18aaaa视频| 美女的奶胸大爽爽大片| 中文字幕乱码日本亚洲一区二区 | 欧美连裤袜在线视频| 国产精品美女久久久久人| 4438全国成人免费| 污的网站在线观看| 中文字幕一区二区三区电影| 深夜福利在线观看直播| 一区二区三区在线免费播放| 欧美无人区码suv| 国产在线乱码一区二区三区| 国产精彩免费视频| 一区二区日韩免费看| 久久久无码中文字幕久...| 日本道不卡免费一区| 久久国产精品高清| 91在线一区| 亚洲999一在线观看www| jizz亚洲女人高潮大叫| 欧洲亚洲免费视频| f2c人成在线观看免费视频| 久久最新资源网| av网站在线播放| 亚洲人成免费电影| 亚洲 国产 欧美 日韩| 精品成人一区二区三区| 精品人妻久久久久一区二区三区| 欧美日韩精品一区二区三区四区| 加勒比在线一区| 欧美性猛交xxxx富婆弯腰| 日本免费观看视| 亚洲高清视频中文字幕| 久久免费视频6| 一区二区三区四区蜜桃| 亚洲 欧美 变态 另类 综合| 国产精品久久久一本精品| 久久久久亚洲av成人无码电影| 91片黄在线观看| 日本黄色免费观看| av一区二区久久| 亚洲一级av无码毛片精品| 成人午夜视频网站| yjizz视频| 成人免费看黄yyy456| 岛国精品一区二区三区| 成人动漫一区二区| 91视频在线免费| 99精品国产99久久久久久白柏 | 亚洲天堂手机在线| 欧美日韩色综合| 91福利免费视频| 91精品国产综合久久小美女| 99热这里只有精品99| 日韩一区国产二区欧美三区| 国产v在线观看| 精品国产sm最大网站免费看| 污污网站免费在线观看| 日韩精品免费在线| h网站在线免费观看| 色爱精品视频一区| 丝袜中文在线| 91国产中文字幕| 亚洲成av在线| 国产一区视频在线| 亚洲成人影音| 精品一区二区视频| 久久精品av| 大陆极品少妇内射aaaaaa| 亚洲国内欧美| 国产精品无码av无码| 国产一区二区三区免费播放| 成人啪啪18免费游戏链接| 91香蕉视频在线| 国产精品www爽爽爽| 亚洲男人天堂av| 日韩免费一级片| 欧美视频一区在线观看| 99精品视频在线播放免费| 亚洲精品国产美女| 成年人在线免费观看| 欧美日韩成人在线观看| 欧美大电影免费观看| 91精品在线观| 婷婷五月色综合香五月| 伊人久久青草| 国产精品三上| 在线播放免费视频| 99久久免费精品| 永久av免费网站| 欧美日韩在线视频一区| 一级黄色录像大片| 亚洲国产精品视频在线观看| www.成人.com| 97在线看福利| 成人免费观看49www在线观看| 精品综合久久| 欧美精品国产一区| 日韩av手机版| 99re成人精品视频| 欧美一级片在线视频| 欧美日韩综合视频| 好吊色一区二区三区| 中文字幕国产亚洲2019| 黄视频网站在线观看| 亚洲最大成人免费视频| 精品国产中文字幕第一页| www污在线观看| 狠狠色丁香久久婷婷综合丁香| 丰满圆润老女人hd| 亚洲国产欧美日韩另类综合 | a美女胸又www黄视频久久| 999福利视频| 日本黄色一区二区| 欧洲精品久久一区二区| 久久久精品美女| 国产一区二区三区四区五区3d| 精品国产一区二区三| 欧美午夜国产| 国产九九九视频| 中文字幕一区二区视频| 午夜久久久久久久久久影院| 亚洲精品美女久久| 国内小视频在线看| 亚洲xxxxx电影| 伊人久久大香线蕉精品组织观看| 91女神在线观看| 国产拍揄自揄精品视频麻豆| 91久久国产综合久久91| 日韩精品在线观看视频| а√天堂8资源中文在线| 成人综合av网| 韩国自拍一区| 欧美午夜精品一区二区| 艳妇臀荡乳欲伦亚洲一区| 国产高清在线观看视频| 美女av一区二区| 欧美视频二区欧美影视| 国产又粗又爽又黄的视频| 狠狠色丁香婷综合久久| 91杏吧porn蝌蚪| 精品久久久久久综合日本欧美| 18videosex性欧美麻豆| 亚洲va国产va天堂va久久| 欧美国产91| 稀缺小u女呦精品呦| 午夜视频在线观看一区二区| 神马久久久久久久久久| 51久久精品夜色国产麻豆| 日韩黄色网络| mm1313亚洲国产精品无码试看| 久久影院午夜片一区| 波多野结衣视频观看| 一本一道久久a久久精品逆3p| 91精品国产经典在线观看| 一区二区三区四区欧美日韩| 国产美女一区二区三区| 久久久久久久极品内射| 亚洲成av人影院在线观看| 天堂中文最新版在线中文| 人偷久久久久久久偷女厕| 六月丁香婷婷色狠狠久久| 四虎永久免费在线| 欧美精品一区二区三区在线| 在线最新版中文在线| 视频一区二区综合| 国产一区二区调教| 日本少妇久久久| 亚洲人成亚洲人成在线观看| 欧美在线se| 美脚丝袜脚交一区二区| 久久婷婷国产综合国色天香| 亚洲专区在线播放| 欧美精品videossex88| 亚洲午夜久久| 不卡中文字幕在线观看| 亚洲sss视频在线视频| 精品无吗乱吗av国产爱色| 91免费看片网站| 亚洲欧美日韩精品一区二区| 天天舔天天操天天干| 精品国产一区二区三区忘忧草| 爱情电影社保片一区| 国产欧美自拍视频| 91美女视频网站| 国产男女无套免费网站| 欧美重口另类videos人妖| 亚洲精品电影| 美女爆乳18禁www久久久久久| 在线观看91精品国产麻豆| 密臀av在线播放| 男女h黄动漫啪啪无遮挡软件| 久久综合一区二区| 999精品国产| 国产精品久久久久久久电影| 激情亚洲成人|