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

基于Groovy 加速Google App Engine開發

開發 后端
在 Google App Engine 推出后,各類加速該引擎上應用程序開發的框架隨之涌現。使用 Groovy 編寫的 Gaelyk 框架就屬于其中之一,它的作用是簡化利用 Google App Engine 數據存儲的輕量級應用程序的開發。本文將介紹此框架。

本文是IBM developerworks上針對Java 2.0開發系列文章的***一篇,講述了一個基于Groovy的框架Gaelyk是如何加速在Google App Engine上的開發的。原文標題為《Java 開發 2.0: 針對 Google App Engine 的 Gaelyk》。

系列 將探討對于如今及未來的 Java 開發的發展起決定作用的各個技術方面。Java 開發 2.0 的前提開發速度將越來越快,這要歸功于開源領域中的創新以及硬件的商業化。您可以租借其他人的硬件平臺來托管自己的應用程序(主要使用開源庫、工具和框架來裝配),成本只包括獲取和維護自己的基礎設施。

本系列的***期 “使用 Google App Engine” 討論了免費租借 Google 的基礎設施來托管您的 Java 應用程序(不過會犧牲少許靈活性)的概念。在后續文章中,您了解了 App Engine 和 Amazon 的 EC2 之間的差異。上個月的文章 “通過 CouchDB 和 Groovy 的 RESTClient 實現 REST” 調查了關系數據庫的潛在替代方案:CouchDB。CouchDB 缺少模式以及其面向文檔的特性對您來說可能有點新鮮,但您已經目睹了 Google App Engine 實現的另一個無模式數據存儲。

本文又將回過頭來討論 Google App Engine。開源世界已經跳上了 App Engine 列車,針對該平臺的應用程序開發加速架構層出不窮。您將了解 Gaelyk 框架如何利用本系列已經介紹的許多技術來進一步簡化應用程序的開發。

輕量級是全新的趨勢

雖然 Google 的基礎設施大多是可以免費使用的(當存儲空間和帶寬達到 500MB,每月頁面訪問量達到大約 5 百萬次時便要收費),但它會在一定程度上犧牲一些靈活性。Google 的基礎設施支持 Java 技術,但這并不包括所有 的核心 Java 庫和相關開源庫。App Engine 是一個平臺 — 您需要基于它進行開發。但不足為奇的是,開源創新將幫助克服采用 Google App Engine 過程中的障礙。

Gaelyk 框架就是這種項目的一個典型,其目的是加速輕量級應用程序的開發,即使用 Groovy 開發的、適當利用模型-視圖-控制器 (MVC) 模式的應用程序。在 Groovy 的魔力下,Gaelyk 將為 App Engine 的 API 注入一些易用性因素。此外,您還可以將 Gaelyk 與針對 Eclipse 的 Google App Engine 插件結合使用。快速開發和部署 Google App Engine 應用程序將變得非常簡單。

 

通過 CouchDB 和 Groovy 的 RESTClient 實現 REST” 利用一個停車罰單系統演示了面向文檔的數據庫的特性。在本文中,我將繼續創建一個支持創建、更新和刪除停車罰單的 Web 應用程序。Google 持久性架構不是面向文檔的,但其無模式特性實現了一個更加靈活的模型。因此,Web 將盡可能準確地建立一個停車罰單模型,這需要獲取:

  • 警官姓名
  • 日期
  • 位置
  • 違規情況
  • 任何相關注釋

我保留位置為一個普通的文本框,因為一些人可以使用各種方式來表示違規發生的位置 — 比如在 Best Buy 的停車區 或者在 18 號街和 D 大街的拐角處。實際上,我不會嘗試描述一個特定格式,因為它不一定適合這個域。

首先,您需要安裝針對 Eclipse 的 Google App Engine 插件。您還需要從項目的網站下載 Gaelyk JAR 文件。記住這個下載的位置,因為您隨后需要將它移動到一個特定的目錄中。

Gaelyk 框架依賴于 Groovy,因此您還需要***的 Groovy 發行版:在撰寫本文時,它是一個簡單的 JAR 文件,即 groovy-all-1.6.5.jar。***,您需要通過 Google App Engine 管理面板創建一個應用程序 ID。(如果愿意,您可以重用在 “使用 Google App Engine” 中創建的應用程序 ID)。

接下來,在 Eclipse 中創建一個新的 Google Web Application Project,單擊 Next 按鈕并填入適當的信息。確保取消選中了 Use Google Web Toolkit 選項,如圖 1 所示,因為您不需要它:

圖 1. 在 Eclipse 中創建一個 Google Apps Project

在 Eclipse 對話框中創建一個新的 Google Apps Project

單擊 Finish 按鈕,您將建立好代碼基礎。

現在,將 Groovy 和 Gaelyk JAR 復制到新創建項目的 war/WEB-INF/lib 目錄中,如圖 2 所示:

圖 2. Gaelyk 的必需庫

新創建項目的 war/WEB-INF/lib 目錄,Groovy 和 Gaelyk JAR 已復制到其中

要配置 Gaelyk,您需要為 Google App Engine 提供一些額外的信息,方法是編輯 WEB-INF/appengine-web.xml 文件。將您的應用程序 ID 添加到此文件頂部的應用程序部分,并添加一些 XML,如清單 1 所示:

清單 1. 對 App Engine 配置的必要更新

				
<static-files>
 <exclude path="/WEB-INF/**.groovy" />
 <exclude path="**.gtpl" />
</static-files>

添加這些內容將防止 Google App Engine 靜態提供最終在使用 Gaelyk 時會創建的各種文件。如您所見,Gaelyk 將利用一個模板模型。因此,使用 .gtpl 擴展名的文件將類似于 JavaServer Pages (JSP) 并且將通過框架而非 App Engine 進行處理。

接下來,打開 web.xml 文件。該文件也可以在 WEB-INF 目錄中找到。它是標準的 Web 應用程序配置文件。(您將在初次訪問 App Engine 和 EC2 時操作此文件。)該文件需要將各種模式映射到特定的 servlet,因此根據清單 2 調整您的文件:

清單 2. 更新后的 web.xml 文件

				
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
 <servlet>
  <servlet-name>GroovletServlet</servlet-name>
  <servlet-class>groovyx.gaelyk.GaelykServlet</servlet-class>
 </servlet>
 <servlet>
  <servlet-name>TemplateServlet</servlet-name>
  <servlet-class>groovyx.gaelyk.GaelykTemplateServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>GroovletServlet</servlet-name>
  <url-pattern>*.groovy</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>TemplateServlet</servlet-name>
  <url-pattern>*.gtpl</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>index.gtpl</welcome-file>
 </welcome-file-list>
</web-app>

注意,web.xml 文件指定 welcome 文件為 index.gtpl;因此,將 Eclipse 插件為您生成的 index.html 文件重命名為 index.gtpl。(如果使用 Windows® 操作系統,則只需選擇文件并按下 F2。)

安置好適當的庫并正確配置了兩個 XML 文件之后,您可以驗證一切是否運行正常,這需要編輯 index.gtpl 文件讓它匹配清單 3 的內容:

清單 3. 一個簡單的 GTPL 文件

				
<html>
 <head><title>A Simple GTPL</title></head>
  <body>
   <b><% print "Hello Gaelyk!".replace(" ", " from ") %></b>
   <p>
   <ol>
    <% def wrd = "Groovy"
       wrd.each{ letter ->
    %>
    <li><%= letter %></li>
    <% } %>
   </ol>
   </p>
  </body>
</html>

#t#可以看到,Gaelyk 中的 GTPL 文件(或 Gaelyk/Groovy 模板)類似于 JSP: 您可以在 scriptlet 中添加行為(在本例中,添加的行為是 Groovy)。注意,稍后您也可以使用閉包和引用變量。

保存您的 index.gtpl 文件在 Eclipse 中選擇項目的基本目錄,單擊鼠標右鍵,選擇 Run As 并選擇包含藍色 G 徽標的 Web Application 選項,如圖 3 所示:

圖 3. 作為 Google Web 應用程序運行

選擇包含藍色 G 徽標的 Web Application 選項

默認情況下,此啟動程序將在端口 8080 上啟動一個本地 Jetty 實例。如果要更改端口,請選擇 Run Configurations 選項并通過插件提供的選項面板配置端口。

運行 Gaelyk Web 應用程序的本地實例之后,打開一個 Web 瀏覽器并訪問 http://localhost:8080。index.gtpl 的輸出應如圖 4 所示:

圖 4. Hello world!

index.gtpl 在 http://localhost:8080 中的輸出

非常簡單,不是嗎?

#p#

簡單的持久性

罰單系統非常簡單。它提供了一個 Web 表單,可用于創建罰單以及在列表中查看、刪除和編輯罰單。我首先將通過 Gaelyk 模板創建一個簡單的 HTML 表單,并將它命名為 createticket.gtpl。如圖 5 所示,這個表單將嘗試捕獲與各停車罰單相關的數據:

圖 5. 一個簡單的罰單表單

一個簡單的空白罰單表單

表單將提交給一個 groovlet;相應地,在項目的 WEB-INF 目錄中創建一個 groovy 文件夾。您的 groovlet 將存放在此處。(您在 “使用 Google App Engine” 中也完成了此操作。創建罰單(create-ticket)表單將提交給一個 createticket.groovy 文件。在新創建的 groovy 目錄中創建此文件。

毫無疑問,您可以在 Gaelyk 中使用 JDO 和 Java Persistence API (JPA) 代碼,但是也可以采用另外一種方法來與底層數據存儲交互:即使用 Google 的 Entity 對象。Gaelyk 團隊已憑借一些 Groovy 魔力簡化了持久對象的操作,從而增強了 Entity 對象。

在本例中,我希望獲取通過 createticket.gtpl 頁面提交的表單元素,并在系統中創建一個新罰單。通過使用 Entity 類,我不需要定義一個類似于 POJO 的對象來表示罰單(就像我在 “使用 Google App Engine” 中創建 Triathlon JDO 對象時所做的一樣)。我可以采用 Groovy 的方式建立一個罰單模型,并毫不費力地保存它。

因此,我可以通過 Gaelyk 的 params 對象(Grails 也以某種形式提供了此對象)獲取由表單提交的參數,并創建一個 Entity 實例,如清單 4 所示:

清單 4. 創建一個 Entity

				
def formatter = new SimpleDateFormat("MM/dd/yyyy")
def offensedate = formatter.parse("${params.of_month}/${params.of_day}/${params.of_year}")

def ticket = new Entity("ticket")
ticket.officer = params.officer
ticket.license = params.plate
ticket.issuseDate = offensedate
ticket.location = params.location
ticket.notes = params.notes
ticket.offense = params.offense

注意,ticket 變量是 Entity 的一個實例。"ticket" String 表示的就是這種實體。它可以非常便捷地搜索罰單。接下來,我將自動為與罰單相關的 Entity 實例分配屬性值。現在,ticket.officer 表示通過 Web 頁面表單提交的 officer 參數的值。由于該表單包含三個日期字段,我也使用 SimpleDateFormat 創建一個日期實例,并將該值設置為 issueDate

至此,我已經創建一個用于表示罰單的對象。現在,我要做的就是使用以下代碼保存它:

ticket.save()

現在,我已經持久化了一個罰單,我將把用戶定向到一個可查看罰單的頁面。這也非常簡單。我只需要定向到 view-ticket Groovlet(以便處理):

redirect "viewticket.groovy?id=${ticket.key.id}"

如您所見,我已經創建了一個名稱為 id 的參數,并將它設置為已保存罰單(由 Google App Engine 生成)實例的鍵。可見,create-ticket Groovlet 非常簡明和強大 — 這得益于 Gaelyk。

簡易視圖

在上一個示例中,當我創建了 ticket 實例之后,我繼續將請求重定向到另一個 Groovlet — 它可以簡化罰單的查看過程。在此 Groovlet 中,我編寫了一個 Google App Engine “read”。傳遞的 id 將用于查找新創建的實例。在本例中,我將使用 Google 的 KeyFactory,它用于創建 Google 的 Key 對象的實例。然后,Key 將用于通過 datastoreService 查找相應的罰單實例,而 Gaelyk 已將它們添加到框架中的任何 Groovlet 實例中,如清單 5 所示:

清單 5. 查看 Entity

				
import com.google.appengine.api.datastore.KeyFactory

if (params["id"]) {
 def id = Long.parseLong(params["id"])
 try {
   def key = KeyFactory.createKey("ticket", id)
   def ticket = datastoreService.get(key)

   request.setAttribute "ticket", ticket

   forward "viewticket.gtpl"

   } catch (Throwable t) {
    //forward to some error page...
   }
} else {
 forward "index.gtpl"
}

找到相應的 ticket 之后,罰單將被添加到 HTTP request 對象(它已經出現在 Groovlet 中),然后將處理轉交給 viewticket.gtpl 頁面。與 Web 應用程序中的任何其他 JSP 一樣,這個 Web 頁面將顯示與傳入罰單相關的相應屬性。

從清單 6 中可以看出,Gaelyk 支持 includes。也就是說,在您的 .gtpl 文件中,您可以包括其他文件,就像普通 JSP 文件一樣。同樣,所有 .gtpl 文件都有一個 HTTP Request 對象的實例可用(通過 request 變量)。

清單 6. 查看 Entity GTPL

				
<% include "/WEB-INF/includes/header.gtpl" %>

<% def ticket = request.getAttribute("ticket") %>

<div class="info">
 <h2>Parking Ticket</h2>
 </div>

<table>
<tr>
	<th>Issuing Officer</th>
	<th>Vehicle Plate</th>
	<th>Date</th>
	<th>Offense</th>
	<th>Location</th>
	<th>Notes</th>
  </tr>
 <tr>
	<td>${ticket.officer} </td>
	<td>${ticket.license}</td>
	<td>${ticket.issuseDate}</td>
	<td>${ticket.offense}</td>
	<td>${ticket.location}</td>
	<td>${ticket.notes}</td>
  </tr>
 </table>

<% include "/WEB-INF/includes/footer.gtpl" %>

至此,您或許可以發現 Gaelyk 使得在 Google App Engine 上創建輕量級 Web 應用程序輕而易舉。并且,操作 App Engine 的持久庫也變得再簡單不過。您在操作 Entity 時使用的低級 API 確實需要花一些時間習慣。查詢需要一些思考(在某些方面類似于使用 CouchDB 執行查詢)。舉例來說,查看已創建罰單的列表需要一些如清單 7 所示的代碼:

清單 7. 查看一組 Entity

				
import com.google.appengine.api.datastore.Query
import static com.google.appengine.api.datastore.FetchOptions.Builder.withLimit

try {
 def query = new Query("ticket")
 query.addSort("issuseDate", Query.SortDirection.DESCENDING)
 def preparedQuery = datastoreService.prepare(query)
 def tickets = preparedQuery.asList( withLimit(10) )

 request.setAttribute "tickets", tickets
forward "index.gtpl"
} catch (Throwable t) {
 forward "index.gtpl"
}

清單 7 使用了 App Engine 的 Query 對象。如您所見,您可以為查詢添加類似于排序的特性,甚至還能限制返回結果的方式。不需要使用 SQL,但需要確保數據已存儲并且可以檢索,只存在少許不同。

#t#如 “使用 Google App Engine” 所述,部署到云的過程也非常簡單。通過插件,只需要單擊 Deploy App Engine Project,其余的事情就由 Google 來完成了。事實上,您可以 下載 本文的代碼來完成此操作。代碼將填入一些間隔,因此我無法在一篇文章列出所有代碼。舉例來說,我實現了刪除罰單的功能,并且用戶與罰單之間的交互也稍有增強,因此您可以或多或少感受到 Gaelyk 的效果。

快速開發更加輕松

受到開源技術支持的云和無模式數據存儲無疑是未來 Java 開發中的一部分。兩者的采用門檻都較低;在本文的示例中,硬件和軟件都是免費的。并且,一旦 Google 開始收費,那么肯定要自力更生 — 每月 5 百萬的點擊率是巨大的流量。Gaelyk 框架加快了 Web 開發的步伐。Java 開發始終在日臻完善,不是嗎?

責任編輯:yangsai 來源: IBMDW
相關推薦

2009-04-14 11:01:33

GoogleApp EngineGroovy

2009-04-13 15:48:54

Google AppJavaSun

2009-09-10 10:11:44

Google App Java開發2.0

2009-05-22 14:52:33

App Engine免費配額

2009-04-08 16:47:11

GoogleApp EngineJava

2009-08-11 11:23:41

什么是GAEGoogle App

2009-04-09 08:54:07

App EnginegoogleJava

2011-09-06 14:53:01

Google App

2009-02-16 09:11:42

Google App SDKGQL

2009-10-16 09:08:59

App Engine

2009-09-02 11:34:09

Google App

2011-09-15 10:29:13

架構

2013-07-30 12:29:19

Google App Google技術Engine

2009-09-08 09:45:23

App Engine性

2009-04-09 09:53:43

GoogleAppEngineJava

2010-12-01 10:49:52

Google App

2009-08-07 13:53:14

App Engine

2012-08-01 14:12:45

IBMdW

2009-04-16 09:59:16

Google App PHPJava

2009-05-14 09:47:30

GoogleApp EngineJava SDK
點贊
收藏

51CTO技術棧公眾號

亚洲免费成人在线视频| 亚洲精品乱码久久久久久蜜桃91| 欧美一级特黄高清视频| 精品欧美视频| 精品福利在线看| 日本精品免费| 国产99对白在线播放| 国产一区导航| 久久艳片www.17c.com| 色哟哟视频在线| 99精品在免费线偷拍| 亚洲综合区在线| 日本一区二区在线视频| 国产999久久久| 丝袜诱惑制服诱惑色一区在线观看| 日韩在线视频播放| 欧美色图亚洲激情| 欧美.com| 欧美三级电影精品| 777精品久无码人妻蜜桃| 色欧美激情视频在线| 国产精品77777| 国产精品嫩草影院久久久| 日本熟妇毛茸茸丰满| 欧美一区二区三| 亚洲高清在线观看| 日本55丰满熟妇厨房伦| 日本精品在线中文字幕| 亚洲mv大片欧洲mv大片精品| 自拍偷拍亚洲色图欧美| 成年在线观看免费人视频| 成人免费精品视频| 亚洲影院在线看| 波多野结衣一二区| 一级成人国产| 欧美激情在线有限公司| 亚洲视频重口味| 狠狠操综合网| 精品亚洲一区二区三区在线播放| 操人视频免费看| 欧美成人家庭影院| 色婷婷国产精品| 成人午夜精品久久久久久久蜜臀| 在线中文字幕电影| 亚洲图片你懂的| 婷婷四月色综合| 免费人成黄页在线观看忧物| 99久久99久久久精品齐齐| 97超级在线观看免费高清完整版电视剧| 国产污视频网站| 久久动漫亚洲| 欧美综合激情网| 综合网在线观看| 蜜乳av另类精品一区二区| 97国产成人精品视频| 久久久久人妻一区精品色欧美| 欧美成人日韩| 欧美激情一级欧美精品| 免费无码毛片一区二区app| 香蕉av一区二区| 久久久精品2019中文字幕神马| 91社区视频在线观看| 成人精品视频| 色婷婷综合久久久久中文字幕1| 国产精品www爽爽爽| av影片在线一区| 中文字幕久热精品在线视频| 一级二级黄色片| 999久久久精品国产| www.亚洲成人| 欧美日韩激情在线观看| 国产真实久久| 欧美专区在线观看| 国产三级理论片| 精品一区二区国语对白| av资源站久久亚洲| 性插视频在线观看| 日本一区二区三区久久久久久久久不| 一区二区三区在线观看www| 黄色动漫在线| 亚洲高清视频中文字幕| 欧美日韩第二页| 四虎国产精品成人免费影视| 日韩一二三区视频| 在线天堂www在线国语对白| 一呦二呦三呦国产精品| 中文字幕亚洲一区二区三区五十路| 美国黑人一级大黄| 亚洲精品小说| 2023亚洲男人天堂| 亚洲天堂久久久久| 成人福利视频在线看| 欧美视频观看一区| 国产日产一区二区| 狠狠色噜噜狠狠狠狠97| 麻豆一区二区三区视频| 成人av影音| 亚洲人精品午夜在线观看| 久久精品在线观看视频| 亚洲国产91| 国产精品久久婷婷六月丁香| 99国产在线播放| 久久这里都是精品| 中国女人做爰视频| 国精产品一区一区三区四川| 日韩精品中文字幕一区二区三区| 在线免费观看日韩av| 亚洲草久电影| 国产91久久婷婷一区二区| 成人激情四射网| 欧美国产日韩一二三区| 99色这里只有精品| 日韩av黄色| 亚洲美女精品久久| 四虎永久在线精品| 国产在线日韩欧美| 日韩中文一区二区三区| 538视频在线| 欧美精品久久久久久久久老牛影院| 少妇户外露出[11p]| 亚洲精品小说| 成人激情视频在线| 大片免费播放在线视频| 天天免费综合色| 亚欧美一区二区三区| 欧美日韩老妇| 日本韩国在线不卡| 黄色aaa毛片| 亚洲欧美韩国综合色| 91极品视频在线观看| 亚洲精品国产精品粉嫩| 国内伊人久久久久久网站视频| 国产三级伦理片| 中文字幕的久久| 超碰影院在线观看| 一区二区三区日本久久久| 久久免费国产精品1| japanese国产| 亚洲欧美区自拍先锋| 久久久久xxxx| 青青草国产免费一区二区下载| 欧亚精品在线观看| 亚洲av片在线观看| 欧美日韩国产一中文字不卡 | 亚洲免费在线| 国产欧美日韩综合精品二区| 男女在线视频| 精品久久久久久久久久久久久久久| 日韩一区二区不卡视频| 极品少妇xxxx精品少妇| 亚洲欧美日韩精品在线| 97精品国产99久久久久久免费| 亚洲人在线视频| 日韩精选在线观看| 中文在线一区二区| 九九热免费在线观看| 五月精品视频| 成人自拍偷拍| 国产美女精品写真福利视频| 亚洲精品mp4| 中文字幕在线欧美| 91一区二区在线| 污污视频网站免费观看| 国产区精品区| 91色p视频在线| 女子免费在线观看视频www| 精品国产污污免费网站入口| 国产对白videos麻豆高潮| 91最新地址在线播放| 国产a级片免费观看| 色乱码一区二区三区网站| 成人午夜高潮视频| 女同视频在线观看| 亚洲欧美国产一本综合首页| 中文字幕第31页| 亚洲精品水蜜桃| 波多野结衣有码| 丝袜国产日韩另类美女| 综合视频在线观看| 97se亚洲| 国产成人在线一区| 黄网站免费在线播放| 精品国产一区二区三区av性色| 国产区在线观看视频| 国产欧美视频在线观看| 99精品视频免费版的特色功能| 91久久黄色| 亚洲v国产v在线观看| 精品国产一区二区三区2021| 午夜精品久久久久久久99黑人| 国产在线网站| 日韩欧美另类在线| 亚洲成熟少妇视频在线观看| 最近日韩中文字幕| 精品人妻一区二区三区日产乱码卜| 视频一区二区三区在线| 强开小嫩苞一区二区三区网站| 林ゆな中文字幕一区二区| 国产国语刺激对白av不卡| 手机电影在线观看| 亚洲欧美综合精品久久成人| a毛片在线免费观看| 色婷婷香蕉在线一区二区| 欧美日韩一级大片| 欧美激情在线一区二区| 午夜视频在线观看国产| 国产一区欧美日韩| 精品久久久久久无码国产| 欧美日韩亚洲一区三区 | 欧美一区二区三| 国产精品推荐精品| 国产精品igao视频网网址不卡日韩| 51久久精品夜色国产麻豆| 免费人成在线观看播放视频| 日韩av网站电影| 性一交一乱一透一a级| 欧美日韩中文精品| 三级视频在线观看| 亚洲图片欧美色图| 色婷婷在线视频观看| 国产蜜臀97一区二区三区 | 国产亚洲精品久| 美女扒开腿免费视频| 国产主播一区二区| 99sesese| 日韩精品成人一区二区三区| 女人天堂av手机在线| 欧美激情精品久久久六区热门| 午夜精品一区二区三区四区| 色天下一区二区三区| 国产成人精品福利一区二区三区 | 在线观看欧美日本| 日本中文在线播放| 亚洲成人tv网| 久久久久久久99| 亚洲午夜精品在线| 久久久久久福利| 亚洲一区二区三区四区在线| 日本高清不卡免费| 1区2区3区精品视频| 在线观看天堂av| 国产精品久久久久久久久免费樱桃 | 欧美大片拔萝卜| www.午夜激情| 日韩色在线观看| 99这里有精品视频| 日韩丝袜美女视频| 国产xxxxxx| 欧美成人性福生活免费看| 精品人妻一区二区三区日产乱码| 欧美一区二视频| av中文字幕免费在线观看| 日韩视频一区二区在线观看| 超碰免费在线97| 亚洲第一页在线| 天天色综合久久| 精品视频在线观看日韩| 免费在线观看污视频| 国产亚洲免费的视频看| 69久久精品| 伦理中文字幕亚洲| 91超碰在线| 欧美性受xxxx白人性爽| 浪潮色综合久久天堂| 国产精品久久精品| 天天综合91| 99国产高清| 日韩高清成人在线| 日韩精品一线二线三线| 日韩在线观看一区 | 丝袜美腿美女被狂躁在线观看| 日韩在线国产精品| 在线观看小视频| 26uuu日韩精品一区二区| 欧美日韩123区| 亚洲精品免费av| 国产主播性色av福利精品一区| 开心色怡人综合网站| 成人3d精品动漫精品一二三| 男人天堂成人网| 一区二区亚洲| 国产福利一区视频| 国产在线乱码一区二区三区| 人妻无码中文久久久久专区| 国产日产精品1区| 日韩欧美综合视频| 大桥未久av一区二区三区| 中文字幕在线观看免费| 日韩精品在线一区| 大片免费播放在线视频| 色综合久久88色综合天天看泰| 中国字幕a在线看韩国电影| 国产日韩欧美中文| 牛牛视频精品一区二区不卡| 日韩中文字幕av在线| 欧美成人嫩草网站| 爱情岛论坛成人| 国产精品香蕉一区二区三区| 成人午夜剧场视频网站| 亚洲美女少妇撒尿| 四虎影院在线免费播放| 精品欧美乱码久久久久久1区2区| 国产视频精品久久| 久久欧美在线电影| 国产成人久久精品一区二区三区| 久久99精品久久久久子伦| 无需播放器亚洲| 国产精品69页| 波多野结衣在线aⅴ中文字幕不卡| 国产大屁股喷水视频在线观看| 懂色av中文一区二区三区天美| 一区二区日韩在线观看| 精品香蕉在线观看视频一| 1区2区在线观看| 国产精品视频地址| 亚洲黄页网站| 成品人视频ww入口| 韩国一区二区在线观看| 亚洲色成人网站www永久四虎 | 成人免费视频免费观看| 天堂а√在线中文在线鲁大师| 色综合天天性综合| 熟妇高潮一区二区三区| 久久99精品视频一区97| 日本成人在线网站| 亚洲国产一区二区三区在线播| 亚洲一区国产| 妖精视频一区二区| 亚洲电影激情视频网站| 亚洲国产精品18久久久久久| 日韩视频免费在线观看| 国产欧美自拍| 亚洲欧洲日韩综合二区| 日本亚洲天堂网| 中文幕无线码中文字蜜桃| 精品久久中文字幕| 熟妇人妻中文av无码| 欧美劲爆第一页| 91欧美日韩在线| 日本一本中文字幕| 国产成人av电影在线| 免费网站观看www在线观| 日韩一级欧美一级| 少妇视频在线| 成人av免费看| 亚洲美洲欧洲综合国产一区| 亚洲色图欧美日韩| 亚洲成人免费av| 日韩一级在线播放| 69视频在线免费观看| 亚洲a级精品| 丰满少妇在线观看| 国产精品理伦片| 国产精品无码一区二区桃花视频| 久久精品99久久久香蕉| 国产一区二区三区黄网站| 国产香蕉一区二区三区| 高清国产一区二区| 日韩免费在线视频观看| 日韩精品一区二区视频| 三上悠亚亚洲一区| 亚洲欧洲日夜超级视频| 国产一区二区三区视频在线播放| 欧美爱爱小视频| 精品国产乱码久久久久久牛牛| 搞黄网站在线看| 久久精品ww人人做人人爽| 日韩和欧美一区二区| 久久久久久久久久97| 日韩欧美自拍偷拍| 成人免费观看在线观看| 欧美日韩精品不卡| 国内精品伊人久久久久影院对白| 国产a免费视频| 亚洲精品中文字| 韩国成人动漫| 亚洲一区不卡在线| 高清不卡在线观看av| 国产精品久久久久久久久久精爆| 影音先锋欧美精品| 在线精品视频一区| 任你操这里只有精品| 自拍偷拍欧美激情| 天天干天天插天天操| 国产精品爽爽爽| 国产综合色产| 日本成人午夜影院| 精品国产免费久久| 成人国产精品一区二区免费麻豆| www插插插无码免费视频网站| 久久综合色天天久久综合图片| 一区不卡在线观看| 91国偷自产一区二区三区的观看方式| 欧美一站二站| 逼特逼视频在线观看| 欧美伊人久久大香线蕉综合69| 欧美理论电影| 亚洲一区在线直播| wwww国产精品欧美| 国产草草影院ccyycom|