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

Servlet3中異步Servlet特性介紹

譯文
開發 前端
在Jave EE 6規范中,關于Servlet 3規范的相關功能增強,一直是讓大部分用戶忽略的,連直到最新的Spring MVC 3.2才支持Servlet 3的異步調用。這可能跟大部分用戶使用的JAVE EE容器依然是舊的有關系(如支持Servlet 3規范的需要Tomcat 7,但目前不少用戶還在使用Tomcat 6)。在本文中,將以實際的例子來講解下Servlet 3規范中對異步操作的支持。

在Jave EE 6規范中,關于Servlet 3規范的相關功能增強,一直是讓大部分用戶忽略的,連直到最新的Spring MVC 3.2才支持Servlet 3的異步調用。這可能跟大部分用戶使用的JAVE EE容器依然是舊的有關系(如支持Servlet 3規范的需要Tomcat 7,但目前不少用戶還在使用Tomcat 6)。

在本文中,將以實際的例子來講解下Servlet 3規范中對異步操作的支持。

首先要簡單了解,在Servlet 3中,已經支持使用注解的方式去進行Servlet的配置,這樣就不需要在web.xml中進行傳統的xml的配置了,最常用的注解是使用@WebServlet、@WebFilter、@WebInitParam,它們分別等價于傳統xml配置中的<Servlet>、<WebFilter>、<InitParam>,其他參數可參考Servlet 3中的規范說明。

下面我們開始了解下,如果不使用異步特性的一個例子,代碼如下:

  1. @WebServlet("/LongRunningServlet")  
  2. public class LongRunningServlet extends HttpServlet {  
  3.     private static final long serialVersionUID = 1L;  
  4.   
  5.     protected void doGet(HttpServletRequest request,  
  6.             HttpServletResponse response) throws ServletException, IOException {  
  7.         long startTime = System.currentTimeMillis();  
  8.         System.out.println("LongRunningServlet Start::Name="  
  9.                 + Thread.currentThread().getName() + "::ID="  
  10.                 + Thread.currentThread().getId());  
  11.   
  12.         String time = request.getParameter("time");  
  13.         int secs = Integer.valueOf(time);  
  14.         //如果超過10秒,默認用10秒  
  15.         if (secs > 10000)  
  16.             secs = 10000;  
  17.   
  18.         longProcessing(secs);  
  19.   
  20.         PrintWriter out = response.getWriter();  
  21.         long endTime = System.currentTimeMillis();  
  22.         out.write("Processing done for " + secs + " milliseconds!!");  
  23.         System.out.println("LongRunningServlet Start::Name="  
  24.                 + Thread.currentThread().getName() + "::ID="  
  25.                 + Thread.currentThread().getId() + "::Time Taken="  
  26.                 + (endTime - startTime) + " ms.");  
  27.     }  
  28.   
  29.     private void longProcessing(int secs) {  
  30.               //故意讓線程睡眠       
  31.         try {  
  32.             Thread.sleep(secs);  
  33.         } catch (InterruptedException e) {  
  34.             e.printStackTrace();  
  35.         }  
  36.     }  
  37.   

 運行上面的例子,輸入

http://localhost:8080/AsyncServletExample/LongRunningServlet?time=8000,則可以看到輸出為:

LongRunningServlet Start::Name=http-bio-8080-exec-34::ID=103

1. LongRunningServlet Start::Name=http-bio-8080-exec-34::ID=103::Time Taken=8002 ms.

  可以觀察到,在主線程啟動后,servlet線程為了處理longProcessing的請求,足足等待了8秒,最后才輸出結果進行響應,這樣對于高并發的應用來說這是很大的瓶頸,因為必須要同步等到待處理的方法完成后,Servlet容器中的線程才能繼續接收其他請求,在此之前,Servlet線程一直處于阻塞狀態。

  在Servlet 3.0規范前,是有一些相關的解決方案的,比如常見的就是使用一個單獨的工作線程(worker thread)去處理這些耗費時間的工作,而Servlet 容器中的線程在把工作交給工作線程處理后則馬上回收到Servlet容器中去。比如Tomcat的Comet、WebLogic的的FutureResponseServlet和WebSphere的Asynchronous Request Dispatcher都是這類型的解決方案。

   但只這些方案的弊端是沒辦法很容易地在不修改代碼的情況下遷移到其他Servlet容器中,這就是Servlet 3中要定義異步Servlet的原因所在。

  下面我們通過例子來說明異步Servlet的實現方法:

1、 首先設置servlet要支持異步屬性,這個只需要設置asyncSupported屬性為true就可以了。

2、 因為實際上的工作是委托給另外的線程的,我們應該實現一個線程池,這個可以通過使用Executors框架去實現(具體參考http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor一文),并且使用Servlet Context listener去初始化線程池。

3、 我們需要通過ServletRequest.startAsync()方法獲得AsyncContext的實例。AsyncContext提供了方法去獲得ServletRequest和ServletResponse的對象引用。它也能使用dispatch()方法去將請求forward到其他資源。

4、 我們將實現Runnable接口,并且在其實現方法中處理各種耗時的任務,然后使用AsyncContext對象去將請求dispatch到其他資源中去或者使用ServletResponse對象輸出。一旦處理完畢,將調用AsyncContext.complete()方法去讓容器知道異步處理已經結束。

5、 我們還可以在AsyncContext對象增加AsyncListener的實現類以實現相關的徽調方法,可以使用這個去提供將錯誤信息返回給用戶(如超時或其他出錯信息),也可以做一些資源清理的工作。

  我們來看下完成后例子的工程結構圖如下:

 

 

#p#

下面我們看下實現了ServletContextListener類的監聽類代碼:

  1.   AppContextListener.java 
  2. package com.journaldev.servlet.async; 
  3.  
  4. import java.util.concurrent.ArrayBlockingQueue; 
  5. import java.util.concurrent.ThreadPoolExecutor; 
  6. import java.util.concurrent.TimeUnit; 
  7.  
  8. import javax.servlet.ServletContextEvent; 
  9. import javax.servlet.ServletContextListener; 
  10. import javax.servlet.annotation.WebListener; 
  11.  
  12. @WebListener 
  13. public class AppContextListener implements ServletContextListener { 
  14.  
  15. public void contextInitialized(ServletContextEvent servletContextEvent) { 
  16.  
  17. // 創建線程池 
  18. ThreadPoolExecutor executor = new ThreadPoolExecutor(100, 200, 50000L, 
  19. TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(100)); 
  20. servletContextEvent.getServletContext().setAttribute("executor", 
  21. executor); 
  22.  
  23.  
  24. public void contextDestroyed(ServletContextEvent servletContextEvent) { 
  25. ThreadPoolExecutor executor = (ThreadPoolExecutor) servletContextEvent 
  26. .getServletContext().getAttribute("executor"); 
  27. executor.shutdown(); 
  28.  

然后是worker線程的實現代碼,如下:

  1. AsyncRequestProcessor.java 
  2. package com.journaldev.servlet.async; 
  3.  
  4. import java.io.IOException; 
  5. import java.io.PrintWriter; 
  6.  
  7. import javax.servlet.AsyncContext; 
  8.  
  9. public class AsyncRequestProcessor implements Runnable { 
  10.  
  11.     private AsyncContext asyncContext; 
  12.     private int secs; 
  13.  
  14.     public AsyncRequestProcessor() { 
  15.     } 
  16.  
  17.     public AsyncRequestProcessor(AsyncContext asyncCtx, int secs) { 
  18.         this.asyncContext = asyncCtx
  19.         this.secs = secs; 
  20.     } 
  21.  
  22.     @Override 
  23.     public void run() { 
  24.         System.out.println("Async Supported? " 
  25.                 + asyncContext.getRequest().isAsyncSupported()); 
  26.         longProcessing(secs); 
  27.         try { 
  28.             PrintWriter out = asyncContext.getResponse().getWriter(); 
  29.             out.write("Processing done for " + secs + " milliseconds!!"); 
  30.         } catch (IOException e) { 
  31.             e.printStackTrace(); 
  32.         } 
  33.         //完成異步線程處理 
  34.         asyncContext.complete(); 
  35.     } 
  36.  
  37.     private void longProcessing(int secs) { 
  38.         // 休眠指定的時間 
  39.         try { 
  40.             Thread.sleep(secs); 
  41.         } catch (InterruptedException e) { 
  42.             e.printStackTrace(); 
  43.         } 
  44.     } 

請在這里注意AsyncContext的使用方法,以及當完成異步調用時必須調用asyncContext.complete()方法。

現在看下AsyncListener類的實現

  1. package com.journaldev.servlet.async; 
  2.  
  3. import java.io.IOException; 
  4. import java.io.PrintWriter; 
  5.  
  6. import javax.servlet.AsyncEvent; 
  7. import javax.servlet.AsyncListener; 
  8. import javax.servlet.ServletResponse; 
  9. import javax.servlet.annotation.WebListener; 
  10.  
  11. @WebListener 
  12. public class AppAsyncListener implements AsyncListener { 
  13.  
  14.     @Override 
  15.     public void onComplete(AsyncEvent asyncEvent) throws IOException { 
  16.         System.out.println("AppAsyncListener onComplete"); 
  17.         // 在這里可以做一些資源清理工作 
  18.     } 
  19.  
  20.     @Override 
  21.     public void onError(AsyncEvent asyncEvent) throws IOException { 
  22.         System.out.println("AppAsyncListener onError"); 
  23.         //這里可以拋出錯誤信息 
  24.     } 
  25.  
  26.     @Override 
  27.     public void onStartAsync(AsyncEvent asyncEvent) throws IOException { 
  28.         System.out.println("AppAsyncListener onStartAsync"); 
  29.         //可以記錄相關日志 
  30.     } 
  31.  
  32.     @Override 
  33.     public void onTimeout(AsyncEvent asyncEvent) throws IOException { 
  34.         System.out.println("AppAsyncListener onTimeout"); 
  35.         ServletResponse response = asyncEvent.getAsyncContext().getResponse(); 
  36.         PrintWriter out = response.getWriter(); 
  37.         out.write("TimeOut Error in Processing"); 
  38.     } 
  39.  
  40. }  

其中請注意可以監聽onTimeout事件的使用,可以有效地返回給用戶端出錯的信息。最后來重新改寫下前文提到的測試Servlet的代碼如下:

#p#

  1. AsyncLongRunningServlet.java 
  2. package com.journaldev.servlet.async; 
  3.  
  4. import java.io.IOException; 
  5. import java.util.concurrent.ThreadPoolExecutor; 
  6.  
  7. import javax.servlet.AsyncContext; 
  8. import javax.servlet.ServletException; 
  9. import javax.servlet.annotation.WebServlet; 
  10. import javax.servlet.http.HttpServlet; 
  11. import javax.servlet.http.HttpServletRequest; 
  12. import javax.servlet.http.HttpServletResponse; 
  13.  
  14. @WebServlet(urlPatterns = "/AsyncLongRunningServlet"asyncSupported = true
  15. public class AsyncLongRunningServlet extends HttpServlet { 
  16.     private static final long serialVersionUID = 1L
  17.  
  18.     protected void doGet(HttpServletRequest request, 
  19.             HttpServletResponse response) throws ServletException, IOException { 
  20.         long startTime = System.currentTimeMillis(); 
  21.         System.out.println("AsyncLongRunningServlet Start::Name=" 
  22.                 + Thread.currentThread().getName() + "::ID=" 
  23.                 + Thread.currentThread().getId()); 
  24.  
  25.         request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true); 
  26.  
  27.         String time = request.getParameter("time"); 
  28.         int secs = Integer.valueOf(time); 
  29.         // 如果超過10秒則設置為10秒 
  30.         if (secs > 10000) 
  31.             secs = 10000
  32.  
  33.         AsyncContext asyncCtx = request.startAsync(); 
  34.         asyncCtx.addListener(new AppAsyncListener()); 
  35.         asyncCtx.setTimeout(9000); 
  36.  
  37.         ThreadPoolExecutor executor = (ThreadPoolExecutor) request 
  38.                 .getServletContext().getAttribute("executor"); 
  39.  
  40.         executor.execute(new AsyncRequestProcessor(asyncCtx, secs)); 
  41.         long endTime = System.currentTimeMillis(); 
  42.         System.out.println("AsyncLongRunningServlet End::Name=" 
  43.                 + Thread.currentThread().getName() + "::ID=" 
  44.                 + Thread.currentThread().getId() + "::Time Taken=" 
  45.                 + (endTime - startTime) + " ms."); 
  46.     } 
  47.  

下面運行這個Servlet程序,輸入:

http://localhost:8080/AsyncServletExample/AsyncLongRunningServlet?time=8000,運行結果為:

AsyncLongRunningServlet Start::Name=http-bio-8080-exec-50::ID=124

AsyncLongRunningServlet End::Name=http-bio-8080-exec-50::ID=124::Time Taken=1 ms.

Async Supported? true

AppAsyncListener onComplete

但如果我們運行一個time=9999的輸入,則運行結果為:

AsyncLongRunningServlet Start::Name=http-bio-8080-exec-44::ID=117

AsyncLongRunningServlet End::Name=http-bio-8080-exec-44::ID=117::Time Taken=1 ms.

Async Supported? true

AppAsyncListener onTimeout

AppAsyncListener onError

AppAsyncListener onComplete

Exception in thread "pool-5-thread-6" java.lang.IllegalStateException: The request associated with the AsyncContext has already completed processing.

at org.apache.catalina.core.AsyncContextImpl.check(AsyncContextImpl.java:439)

at org.apache.catalina.core.AsyncContextImpl.getResponse(AsyncContextImpl.java:197)

at com.journaldev.servlet.async.AsyncRequestProcessor.run(AsyncRequestProcessor.java:27)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)

at java.lang.Thread.run(Thread.java:680)

可以看到,Servlet主線程很快執行完畢并且所有的處理額外的工作都是在另外一個線程中處理的,不存在阻塞問題。

 原文鏈接:http://www.javacodegeeks.com/2013/08/async-servlet-feature-of-servlet-3.html

責任編輯:陳四芳 來源: 51CTO
相關推薦

2009-07-09 11:27:59

Servlet容器

2009-07-08 09:35:53

Java ServleServlet 3.0

2009-07-07 10:08:49

Future Resp

2009-07-09 13:39:52

Servlet Con

2009-07-09 10:49:56

Servlet和JSP

2024-12-10 00:00:30

ServletTomcat異步

2009-07-09 13:04:37

Servlet接口

2009-07-07 09:41:02

異步ServletAJAX

2010-01-14 09:15:07

Java EE 6Servlet 3.0異步處理

2009-07-08 11:17:10

Servlet容器Servlet Con

2009-07-09 13:23:44

Servlet 2.4

2009-07-07 15:24:49

Http Servle

2009-07-07 09:51:49

Servlet實例

2021-06-02 10:39:59

ServletWebFluxSpringMVC

2009-07-07 17:32:31

HTTP Servle

2009-07-03 11:21:43

Servlet和JSPJSP路徑

2009-07-07 16:05:15

Servlet和Jav

2010-04-30 09:19:05

Servlet 3.0

2009-07-08 15:59:55

doFilter方法

2009-07-08 14:01:47

Servlet容器
點贊
收藏

51CTO技術棧公眾號

午夜电影一区| 九色在线免费| 亚洲国产一区二区三区在线| 亚洲天堂手机版| 香蕉视频国产精品| 精品美女一区二区三区| 国产网站免费在线观看| 国产私拍精品| 国产91精品久久久久久久网曝门| 九九热99久久久国产盗摄| 国产女主播在线播放| 丝袜美腿诱惑一区二区三区| 亚洲欧美偷拍卡通变态| 精品欧美一区二区精品久久| 一二三区中文字幕| 午夜亚洲视频| 欧美成人激情图片网| 人人妻人人藻人人爽欧美一区| 欧美色片在线观看| 午夜视频久久久久久| 亚洲免费久久| 四虎影视在线播放| 国产精品一区一区| 国产精品美女免费| 日韩美女视频网站| 欧美一区视频| 色黄久久久久久| 熟妇高潮精品一区二区三区| 欧美久久亚洲| 欧美日韩国产小视频在线观看| 无罩大乳的熟妇正在播放| 成人在线播放免费观看| 中文字幕av免费专区久久| 国产在线播放一区二区| av免费观看网址| 美女性感视频久久| 日韩免费观看av| 午夜偷拍福利视频| 欧美激情一区| 久久精品亚洲94久久精品| 欧美偷拍一区二区三区| 午夜先锋成人动漫在线| 亚洲成**性毛茸茸| 亚洲欧美天堂在线| 久久不卡日韩美女| 欧美性大战xxxxx久久久| 自慰无码一区二区三区| 91高清视频在线观看| 亚洲综合色丁香婷婷六月图片| 最新视频 - x88av| 日韩精品黄色| 亚洲欧美中日韩| 亚洲一区三区电影在线观看| 成人av毛片| 国产欧美精品区一区二区三区| 久精品国产欧美| 天堂资源中文在线| 99久久99久久久精品齐齐| 国产无套精品一区二区| 日韩一区免费视频| 99精品视频一区| 久久一区二区三区欧美亚洲| 四虎在线免费看| 国产亚洲精品资源在线26u| 欧美日韩免费高清| 国产精品秘入口| 国产精品丝袜在线| 影音先锋在线亚洲| 26uuu亚洲电影在线观看| 亚洲综合色噜噜狠狠| 国产男女免费视频| 涩涩视频在线播放| 91黄视频在线| 不卡中文字幕在线观看| 秋霞影院一区| 亚洲精品二三区| 久久成人激情视频| 99成人在线视频| 欧美华人在线视频| 成年人免费看毛片| 石原莉奈在线亚洲二区| 国产在线播放91| 成人av一区二区三区在线观看| 丁香激情综合国产| 久久综合九色欧美狠狠| 最新97超碰在线| 亚洲精品成人在线| 久久精品国产sm调教网站演员| 不卡av播放| 欧美疯狂做受xxxx富婆| 成人免费看片载| 免费视频一区三区| 久久精品在线播放| 日本在线免费观看| 日韩电影在线一区二区三区| 亚洲综合在线播放| 美女做暖暖视频免费在线观看全部网址91 | 伊人网免费视频| 国产成人av电影在线播放| 欧美动漫一区二区| 久久久久久国产精品免费无遮挡| 亚洲成人免费视频| 9l视频白拍9色9l视频| 国产精品2023| 最近中文字幕2019免费| 1级黄色大片儿| 精品一区免费av| 久久亚洲高清| 手机av免费在线| 欧美三级中文字幕在线观看| 国产精品扒开腿做爽爽爽a片唱戏| 国内精品久久久久久99蜜桃| 欧美极品少妇xxxxⅹ裸体艺术 | 大黄网站在线观看| 欧美乱妇15p| 大又大又粗又硬又爽少妇毛片| 中出一区二区| 国产精品一区二区三区免费视频| 污视频在线免费观看| 亚洲精品亚洲人成人网在线播放| 成人羞羞国产免费网站| 精品三级在线观看视频| 久久成人国产精品| 在线观看国产一区二区三区| 久久综合999| 欧美精品自拍视频| 久久9999免费视频| 色婷婷综合成人av| 中文字幕 国产精品| 97久久久精品综合88久久| 91视频成人免费| 日韩综合av| 中文字幕亚洲字幕| 成年人晚上看的视频| 99九九99九九九视频精品| 欧美a级免费视频| 精品麻豆剧传媒av国产九九九| 中文字幕av一区二区三区谷原希美| 久久精品国产成人av| 成人精品在线视频观看| 国产一级片91| 日本高清久久| 欧美床上激情在线观看| 国产草草影院ccyycom| 成人欧美一区二区三区白人| 成人性生交免费看| 日韩久久精品网| 国产在线播放91| 日p在线观看| 欧美男生操女生| 国产精品99久久久久久成人| 久久99精品久久久久久动态图| 视频一区视频二区视频三区高| 日韩av超清在线观看| 影音先锋日韩有码| 中文字幕观看视频| 国产精品免费免费| 在线免费黄色网| 亚洲欧美亚洲| 国产视频不卡| 亚洲黄色免费看| 亚洲欧美激情一区| 中文字幕 亚洲视频| 国产精品不卡一区二区三区| 免费一区二区三区在线观看 | 久久久久国产精品麻豆ai换脸 | 亚洲激情视频一区| 91在线porny国产在线看| 国产91美女视频| 教室别恋欧美无删减版| 国产美女被下药99| 成年人网站在线| 精品第一国产综合精品aⅴ| 亚洲黄色三级视频| 国产女人18毛片水真多成人如厕| 在线观看国产一级片| 欧美欧美全黄| 久久综合一区二区三区| 福利视频亚洲| 欧美精品中文字幕一区| 人人妻人人澡人人爽精品日本| 欧美性色19p| 国产人与禽zoz0性伦| 国产69精品久久久久777| 国产视频一视频二| 色婷婷色综合| 国产精品日韩一区二区| 久久久成人av毛片免费观看| 欧美大尺度激情区在线播放| 日色在线视频| 欧美片网站yy| 久久国产精品系列| 国产精品久久久久久久久免费桃花| 免费黄色在线播放| 狂野欧美一区| 国产精品无码电影在线观看| 免费看日本一区二区| 99热在线国产| 电影亚洲一区| 久久久亚洲影院| 色三级在线观看| 亚洲经典中文字幕| 国产精品午夜福利| 色香色香欲天天天影视综合网| 天堂а√在线中文在线鲁大师| 不卡区在线中文字幕| 国产探花在线看| 亚洲在线黄色| 成人免费性视频| 久久五月天小说| 久久综合入口| 农村少妇一区二区三区四区五区| 91九色单男在线观看| 经典三级一区二区| 性亚洲最疯狂xxxx高清| 成人免费网站在线观看视频| 国产一区二区免费| 天堂av电影在线观看| 欧美大片一区二区| 91亚洲视频在线观看| 色婷婷久久久亚洲一区二区三区 | 欧美老女人第四色| 一级一片免费看| 天天av天天翘天天综合网色鬼国产| 日韩av手机在线免费观看| 欧美国产乱子伦 | 亚洲男人电影天堂| 国产视频三区四区| 久久免费偷拍视频| 青青草视频播放| 成人国产在线观看| 免费观看黄网站| 国产一区二区三区久久久 | 免费视频成人| 国产精品久久久久久久久久新婚 | 亚洲高清不卡| 国产情侣第一页| 欧美视频久久| 久久精品xxx| 精品1区2区3区4区| 欧美中文字幕在线观看视频| 综合激情一区| 男人添女人下部视频免费| 欧美久色视频| 嫩草影院中文字幕| 欧美日韩国产色综合一二三四| 精品一区二区成人免费视频| 久久久久久久久国产一区| 亚洲精品影院| 色婷婷色综合| 一区二区三区四区免费观看| 亚洲九九视频| 妞干网在线播放| 日韩午夜免费| 日本一本二本在线观看| 免费看亚洲片| 男人搞女人网站| 精品伊人久久久久7777人| 亚洲天堂一区二区在线观看| 国产黑丝在线一区二区三区| 台湾佬美性中文| 99国产精品久久久久| 国产人妻人伦精品1国产丝袜 | 国产极品美女在线| 亚洲精品国产成人久久av盗摄 | 久久久精品网| 国产精品一区二区羞羞答答| 久久成人免费电影| 色哟哟网站在线观看| 99精品视频在线观看免费| 无码一区二区三区在线| 中日韩免费视频中文字幕| 91在线播放观看| 狠狠综合久久av一区二区小说| 日韩黄色片网站| 欧美一三区三区四区免费在线看| 人妻精品无码一区二区| 亚洲欧美一区二区三区四区| 99reav在线| 久久久久国产精品一区| 免费电影日韩网站| 91精品啪aⅴ在线观看国产| 岛国成人av| 性欧美大战久久久久久久免费观看 | 在线播放国产一区中文字幕剧情欧美 | 久激情内射婷内射蜜桃| 日韩成人午夜电影| 一级淫片在线观看| 99国产精品视频免费观看| 国产又粗又猛又爽又黄的视频小说| 一区二区不卡在线播放 | 日本不卡二区| 欧美在线三级| 国产免费视频传媒| 国产福利视频一区二区三区| 久久av无码精品人妻系列试探| 亚洲精品中文在线观看| 日韩不卡高清视频| 337p日本欧洲亚洲大胆精品| 日本美女在线中文版| 97色在线视频| 久久久91麻豆精品国产一区| 清纯唯美一区二区三区| 午夜久久久久| 欧美wwwwwww| 久久一日本道色综合| 久久免费视频99| 欧美人体做爰大胆视频| 久草在线免费福利资源| 欧美精品videos| 全球中文成人在线| 欧美激情一区二区三区在线视频 | 国产刺激高潮av| 色偷偷888欧美精品久久久| 乡村艳史在线观看| a级国产乱理论片在线观看99| 日本不卡免费一区| 18禁免费无码无遮挡不卡网站| 国产精品888| 中文字幕观看av| 欧美亚洲国产一区二区三区va| 性猛交xxxx| 久久久久亚洲精品国产| 麻豆精品一区| 中文字幕99| 秋霞午夜鲁丝一区二区老狼| 无码人妻精品一区二区三区温州| 亚洲国产中文字幕| aaa一区二区| 久久视频在线直播| 久久精品嫩草影院| 四虎一区二区| 日韩av在线发布| 国产精品久久久久无码av色戒| 午夜视频在线观看一区二区 | 久久综合给合| 五月天色婷婷综合| 紧缚捆绑精品一区二区| www.xx日本| 欧美人xxxx| 国产1区在线| 亚洲淫片在线视频| 一区二区三区四区日韩| 91网址在线观看精品| 亚洲男同性恋视频| www.色视频| 久久久久久久久久国产精品| 91精品短视频| heyzo亚洲| 久久久久久毛片| 国产精品午夜一区二区| 夜夜嗨av一区二区三区四区 | 国产免费一区| 最新国产拍偷乱拍精品| 好男人香蕉影院| 欧美性xxxx18| eeuss影院www在线播放| 国产噜噜噜噜噜久久久久久久久 | 在线观看高清免费视频| 欧美激情在线观看视频免费| 中文字幕免费视频观看| 日韩在线视频网站| 精品三级国产| 亚洲 欧美 日韩 国产综合 在线 | 日韩免费电影一区| 成人bbav| 色一情一乱一伦一区二区三区 | 日本乱人伦aⅴ精品| 色开心亚洲综合| 动漫一区二区在线| 亚洲一区区二区| 国产又粗又长免费视频| 日韩小视频在线观看专区| 98色花堂精品视频在线观看| 欧美精品v日韩精品v国产精品| 免费高清在线一区| 久草网站在线观看| 日韩电影在线观看永久视频免费网站| 中文字幕这里只有精品| 一区二区日本| 成人黄色综合网站| 蜜臀尤物一区二区三区直播| 久久精品国产69国产精品亚洲| 国产精品久av福利在线观看| 激情网站五月天| 亚洲日穴在线视频| 天天干视频在线观看| 国产精品日韩在线观看| 欧美性色综合| 91激情视频在线观看| 日韩欧美电影一区| 国产另类xxxxhd高清| 成年在线观看视频| 国产日韩一级二级三级| 亚洲精品一区二区三区蜜桃 | 国产黄视频在线| 亚洲天堂免费在线观看视频| 亚洲欧美日韩免费| 91影视免费在线观看| 久久午夜影视|