亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

基于Ajax用戶名驗證、服務條款加載、驗證碼生成的實現方法

2019-11-26 16:07:51
字體:
來源:轉載
供稿:網友

 Ajax(asynchronous javascript and xml)異步的javascript和xml.

    是為了解決傳統的web應用中"發送請求-等待響應"這種模式的弊端,(瀏覽器在發送完請求后,只能等待服務器的響應,用戶不能做其他的操作,瀏覽器發送完請求,會拋棄整個頁面,等待服務器返回新的頁面,也就是說,瀏覽器和服務器之間交互的數據量很大,不能做到按需獲取數據)而創建的技術,該技術的本質是:通過一個瀏覽器內置的一個對象(XmlHttpRequest)異步地向服務器發送請求.

    所謂異步指的是瀏覽器并沒有拋棄整個頁面,也就是不是通過表單提交的方式向服務器發送數據,服務器在處理完請求之后,返回數據給XmlHttpRequest對象,通過javascript可以獲取XmlHttpRequest中的數據.然后,使用該數據更新頁面,整個過程當中,用戶不用等待服務器的響應.

說明:網頁的異步傳輸技術.一種不用刷新整個頁面便可與服務器通訊的辦法,在等待網頁的傳輸過程中,用戶依然可以和系統進行交互,頁面不用刷新就可以更新內容合理的運用可以讓用戶感覺更好更方便,但也不要濫用

同步與異步

同步是指:發送方發出數據后,等接收方發回響應以后才發下一個數據包的通訊方式。  

Eg.同步:提交請求->等待服務器處理->處理完畢返回 這個期間客戶端瀏覽器不能干任何事異步是指:發送方發出數據后,不等接收方發回響應,接著發送下個數據包的通訊方式 

Eg.異步:請求通過事件觸發->服務器處理(這時瀏覽器仍然可以作其他事情)->處理完畢

Ajax的重要對象XMLHttpRequest

重要的Javascript對象,通過它提起對服務器端的請求,可以通過Javascript提起請求,如果要提起多個請求,需要多個XHR對象,請求的結果被預先定義好的方法處理

如何創建XmlHttpRequest對象 

復制代碼 代碼如下:

//獲取xmlHttpRequest對象,該對象由瀏覽器實現(該實現并沒有標準化),在創建該對象時,要區分瀏覽器.

function getXmlHttpRequest(){

         var xmlHttpRequest = null;

         if ((typeof XMLHttpRequest) != 'undefined')  {

               //非ie瀏覽器

              xmlHttpRequest = new XMLHttpRequest();

         }else {

               //ie瀏覽器

             xmlHttpRequest = new ActiveXObject('Microsoft.XMLHttp');

         }

         return xmlHttpRequest;

}

或者

function createXmlHttpRequest(){

        var xmlHttpRequest = null;

        if(window.ActiveXObject){

            xmlHttpRequest = new AvtiveXObject("Microsoft.XMLHTTP");

        }else if(window.XMLHttpRequest){

            xmlHttpRequest = new XMLHttpRequest();

        }

}






xmlHttpRequest對象的重要屬性.
復制代碼 代碼如下:

responseText: 獲取服務器響應的文本數據

responseXml:獲取服務器響應的xml數據

status:獲取服務器返回的狀態碼(比如200)

readyState: 獲取xmlHttpRequest與服務器通訊的狀態(0、1、2、3、4,分別描述不同的狀態).
(未初始化)   : 對象已建立,但是尚未初始化(尚未調用open方法)
(初始化)     : 對象已經建立,尚未調用send方法
(發送數據)   :   send方法已調用,但是當前的狀態以及http頭未知
(數據傳送中) :    已接受部分數據。
 (響應結束)  :  此時,可以通過responseText/responseXml獲取數據了。


xmlHttpRequest的返回數據獲取方式
復制代碼 代碼如下:

從服務器端接收數據的時候,那些數據必須以瀏覽器能夠理解的格式來發送。服務器端的編程語言一般以如下 3 種格式返回數據:
1.Text(又稱Html格式)
2.XML
3.JSON

個人使用Ajax實現的一個應用實例

系統截圖

 

系統說明:

系統結構圖

展示前臺頁regist.jsp

復制代碼 代碼如下:

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>   
    <title>用戶注冊</title>
    <link href="css/regist.css" rel="stylesheet" type="text/css" />
      <script src="js/regist_ajax.js" type="text/javascript"></script>
  </head>

  <body onload="getRegistRuleTxt(),getCheckcode()">
   <form action="regist.do" onsubmit="return check(this);">
    <table border="1" bordercolor="gray" cellpadding="6" align="center">
        <tr>
            <td colspan="2">
             >> <font color="red">用戶注冊</font> 
             <font color="gray">[模塊說明:用戶名檢查、服務條款使用Ajax異步處理,驗證碼服務端生成]</font>
            </td>
        </tr>
        <tr>
            <td align="right" class="left">
                用戶名:
            </td>
            <td width="580">
                <input type="text" name="username" id="username" onblur="postValidate()" class="inpt"/>   
                   <span style="color:orange" id="checkMsg" > * 用戶名由字母、數字、下劃線組成.</span>
            </td>
        </tr>
        <tr>
            <td align="right" class="left">
                  密碼: 
            </td>
            <td>
                <input type="password" name="password" id="password" class="inpt">    
                <span style="color:orange" id="pwdMsg" > * 密碼長度6-8位,為了安全,應避免唯一格式.</span>
            </td>
        </tr>
        <tr>
            <td align="right" class="left" class="inpt">
                確認密碼:
            </td>
            <td>
                <input type="password" name="repassword" id="repassword" class="inpt">    
                <span style="color:orange" id="repwdMsg" > * 確認密碼,以保證您設置密碼時沒有手誤</span>
            </td>
        </tr>
            <tr>
            <td align="right" class="left" class="inpt">
                郵箱:
            </td>
            <td>
                <input type="text" id="email" name="email" class="inpt">    
                <span style="color:orange" id="emailMsg" > * 輸入您的常用郵箱,方便我們與您取得聯系.</span>

            </td>
        </tr>

        <tr>
            <td align="right" class="left" class="inpt">
                驗證碼:
            </td>
            <td>
                <input type="text" id="checkcode" class="inpt">    
                <img id="ckcodeimage" src="imgsrc" style="border:solid #92CEDB 1px "> <!-- 驗證碼 -->
                <a href="javascript:;"  onclick="getCheckcode()">看不清,換一張</a>
                <span style="color:orange" id="ckcodeMsg" > </span>
            </td>
        </tr>
        <tr>
            <td align="right" class="left">
                服務條款:
            </td>
            <td>
                <textarea rows="5" cols="48" style="margin-bottom:6px;margin-left:5px; color:gray" readonly="readonly" id="item" >
                </textarea>
            </td>
        </tr>

        <tr>
            <td align="right">
            </td>
            <td>
                 <input type="submit" value="同意條款并注冊" style="width: 140px; height: 30px;"/>
            </td>
        </tr>
    </table>
   <div class="rghts" align="center">
           Copyright (c) 2013 蘇若年( <a href="mailto:dennisit@163.com">聯系我們:dennisIT@163.com</a> )
        corporation All Rights Reserved.
   </div>
   </form>
  </body>
</html>


異步Ajax處理js
復制代碼 代碼如下:

var xmlHttpRequest = getXmlHttpRequest();

        /*
          創建獲取xmlHttpRequest對象的方法
         */
        function getXmlHttpRequest(){
            var xmlHttpRequest = null;
            if((typeof XMLHttpRequest) != 'undefined'){
                /*非IE瀏覽器創建XMLHttpRequest對象*/
                xmlHttpRequest = new XMLHttpRequest();
            }else{
                /*IE瀏覽器創建XMLHttpRequest對象*/
                xmlHttpRequest = new ActiveXObject('Microsoft.XMLHttp');
            }
            return xmlHttpRequest;
        }

        /*
         驗證碼響應事件
         */
        function getCheckcode(){
            var codeimage = document.getElementById("ckcodeimage");
            var url = "checkcode.do";
            codeimage.src=addTimestamp(url);
        }

        /*
           使用Ajax獲取服務條款
         */
        function getRegistRuleTxt(){
            var item = document.getElementById("item");

            var url = "rulesText.do";
            //解決get方式提交時的中文編碼問題,使用encodeURI(url).true表示采用異步方式發送請求,addTimestamp(url)防止瀏覽器緩存
            xmlHttpRequest.open("post",encodeURI(url),true);
            xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttpRequest.onreadystatechange=function(){
                if(xmlHttpRequest.readyState == 4){
                    if(xmlHttpRequest.status == 200){

                        var respText = xmlHttpRequest.responseText;
                        item.value=respText;
                    }else{
                        //系統錯誤.
                        item.value="system error";
                    }
                }else{
                        //顯示檢查中...
                        item.value="loading...";
                }
            };
            xmlHttpRequest.send(null);
        }

        /*
          采用get方式驗證
         */
        function getValidate(){
            var username = document.getElementById("username");
            var url = "validatename.do?username=" + username.value;
            //解決get方式提交時的中文編碼問題,使用encodeURI(url).true表示采用異步方式發送請求,addTimestamp(url)防止瀏覽器緩存
            xmlHttpRequest.open("get",encodeURI(addTimestamp(url)),true);
            //調用檢查返回狀態的方法
            xmlHttpRequest.onreadystatechange=callback;
            xmlHttpRequest.send(null);
        }

        /*
          采用post方式驗證
         */
         function postValidate(){
            var username = document.getElementById("username");
            var url = "validatename.do";
            //true表示采用異步的方法發送請求.默認就為true,請求方式可以為get、post、put、delete
            xmlHttpRequest.open('post',url,true);
            xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttpRequest.onreadystatechange=callback;
            //如果有多個參數,采用&符號鏈接鍵值對,escape用于解決中文問題
            xmlHttpRequest.send('username=' + escape(username.value));

         }

       
        /*
          監控狀態返回的方法
         */
        function callback(){
            if(xmlHttpRequest.readyState == 4){
                if(xmlHttpRequest.status == 200){
                    var respText = xmlHttpRequest.responseText;
                    innerHtmlMsg(respText);
                }else{
                    //系統錯誤.
                    innerHtmlMsg("error");
                }
            }else{
                    //顯示檢查中...
                    innerHtmlMsg("checking");
            }
        }

        /*
          增加時間戳,防止瀏覽器緩存,瀏覽器緩存只對get方法緩存
         */
        function addTimestamp(url){
            if(url.indexOf("?")!=-1){
                //如果有參數
                return url+"×tamp=" + new Date().valueOf();
            }else{
                //沒有參數
                return url+"?timestamp=" + new Date().valueOf();
            }
        }

       
        function innerHtmlMsg(message){
            var checkMsg = document.getElementById("checkMsg");
            if(message=='exists'){
                //用戶名存在
                checkMsg.innerHTML= "<font color='red'>* 對不起,該用戶名已經存在.</font>";
            }
            if(message=='noexists'){
                //用戶名可以用
                checkMsg.innerHTML= "<font color='green'>* 恭喜您,該用戶名可用.</font>";
            }
            if(message=='checking'){
                //系統檢查中
                checkMsg.innerHTML= "<font color='#0099aa'>* 系統正在進行數據檢查...</font>";
            }
            if(message=='error'){
                //系統出錯
                checkMsg.innerHTML= "<font color='red'>系統故障,請檢查網絡,或者<a href='#'>聯系我們</a></font>";
            }
        }

頁面樣式regist.css
復制代碼 代碼如下:

table {
        margin-top:70px;
        width:780px;
        border-collapse:collapse; /* 合并單元格之間的邊 */
        font-size:14px;
        border:1px solid gray; /*#92CEDB*/
        font:normal 12px/1.5em "宋體", Verdana, Lucida, Arial, Helvetica, sans-serif;

    } /* 定義表格的整體寬度以及邊框樣式,并且定義表格內所有文字的樣式 */
    .left{
        font-weight:500;
        color:#708899;
        padding-right:20px;
        background-color: #D6ECF5;
    }
    .inpt {
        border:solid #92CEDB 1px;
        width: 210px;
        height: 22px;
        margin-left: 10px;

    }
    .rghts{
        margin-top:20px;
        color:#708899;
        font-size:12px;
    }


Web.xml中的內容
復制代碼 代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <servlet>
    <servlet-name>UserServlet</servlet-name>
    <servlet-class>com.webapp.servlet.UserServlet</servlet-class>
    <init-param>
        <param-name>rulesfilepath</param-name>
        <param-value>/txt/item.txt</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>regist.jsp</welcome-file>
  </welcome-file-list>
</web-app>


驗證碼輸出工具類
復制代碼 代碼如下:

package com.webapp.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 *
 *  @version : 1.1
 * 
 *  @author  : 蘇若年    <a href="mailto:DennisIT@163.com">發送郵件</a>
 *   
 *  @since      : 1.0        創建時間:    2013-1-20        下午04:26:52
 *    
 *  @function: TODO
 *
 */

public class CheckCodeImageUtil {

    private static final String[] chars = { "0", "1", "2", "3", "4", "5", "6",
        "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I" };

    private static final int SIZE = 4;        //驗證碼上的字符個數
    private static final int LINES = 4;     //干擾線條數
    private static final int WIDTH = 110;    //驗證碼圖片寬
    private static final int HEIGHT = 40;    //驗證碼圖片高
    private static final int FONT_SIZE = 21;//驗證碼上字體大小

   
    /**
     * 產生驗證碼
     *
     * @return Map<驗證碼的值,驗證碼的圖片>
     *
     */
    public static Map<String,BufferedImage> creatCheckImage(){
        //保存產生驗證碼真實值的串
        StringBuffer buffer = new StringBuffer();   
        //自定義圖片對象
        BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);

        Map<String,BufferedImage> map = new HashMap<String,BufferedImage>();

        Graphics graphics = image.getGraphics();
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, WIDTH, HEIGHT);
        Random random = new Random();

        //畫隨機字符
        for(int i=0; i<SIZE; i++){
            //隨即獲取定義字符集中的一個元素
            int rand = random.nextInt(chars.length);
            graphics.setColor(randomColor());
            graphics.setFont(new Font(null,Font.BOLD+Font.ITALIC,FONT_SIZE));
            graphics.drawString(chars[rand],(i)*WIDTH/SIZE+8 , HEIGHT/2+10);
            buffer.append(chars[rand]); //將生成的字符串存入到buffer中,將來獲取時用于跟用戶輸入的值比較
        }
        //畫干擾線
        for(int i=1;i<=LINES;i++){
            graphics.setColor(randomColor());
            graphics.drawLine(random.nextInt(WIDTH), random.nextInt(HEIGHT), random.nextInt(WIDTH),random.nextInt(HEIGHT));
            if(i==LINES){
                graphics.setFont(new Font(null,Font.ITALIC,13));
                graphics.setColor(Color.GRAY);
                graphics.drawString("蘇若年工作室", 5,15);

            }
        }
        map.put(buffer.toString(), image);
        return map;
    }

    /**
     * 隨即產生顏色
     * @return
     */
    public static Color randomColor(){
        Random random = new Random();
        Color color = new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
        return color;
    }
}


Servlet處理類
復制代碼 代碼如下:

package com.webapp.servlet;

import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.imageio.plugins.common.ImageUtil;
import com.webapp.util.CheckCodeImageUtil;

public class UserServlet extends HttpServlet {

    private List<String> userList;
    private String txtFilePath = null;

   
    public void init() throws ServletException {
        txtFilePath = this.getInitParameter("rulesfilepath");
        //模擬數據庫
        userList = new Vector<String>();
        userList.add("zhangsan");
        userList.add("lisi");
        userList.add("wangwu");
        userList.add("zhaoliu");
    }

   
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

   
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String uri = request.getRequestURI();
        String path = uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf("."));

        if(path.equals("/validatename")){
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //模擬系統產生異常測試
            /*if(1==2){
                throw new ServletException("some error");
            }*/
            String username = request.getParameter("username");
            System.out.println("username:" + username);
            //模擬用戶數據查詢
            boolean exist = userList.contains(username);
            if(exist){
                response.getWriter().print("exists");
            }else{
                response.getWriter().print("noexists");
            }
        }

        if(path.equals("/rulesText")){
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            String filePath = this.getServletContext().getRealPath(txtFilePath);
            File file = new File(filePath);
            StringBuffer buffer  = new StringBuffer();
            try {
                BufferedReader reader = new BufferedReader(new FileReader(file));
                String tmp = "";
                while((tmp = reader.readLine())!=null){
                    buffer.append(new String(tmp.getBytes("gbk"),"utf8")).append("/n");
                }
                reader.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            if(buffer.toString().trim()!=null){
                response.getWriter().print(buffer.toString());
            }
        }

        if(path.equals("/checkcode")){
            response.setContentType("image/jpeg");
            Map<String, BufferedImage> map = CheckCodeImageUtil.creatCheckImage();
            String key =  (String)map.keySet().iterator().next();
            request.getSession().setAttribute("code",key);
            System.out.println("checkcode = " + request.getSession().getAttribute("code"));
            BufferedImage image = map.get(key);
            ImageIO.write(image, "jpeg", response.getOutputStream());

        }

    }

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美制服另类日韩| 91sao在线观看国产| 91九色国产社区在线观看| 日韩电影大全免费观看2023年上| 亚洲精品电影在线观看| 欧美性猛交99久久久久99按摩| 日韩最新av在线| 亚洲www视频| 欧美壮男野外gaytube| 亚洲乱码一区av黑人高潮| 亚洲三级av在线| 国产精品女主播视频| 欧美成人四级hd版| 尤物九九久久国产精品的分类| 亚洲美女精品成人在线视频| 亚洲精品有码在线| 日韩在线视频观看| 亚洲网站在线观看| 国产精品伦子伦免费视频| 日韩精品一区二区视频| 国产一区二区三区久久精品| 亚洲国产欧美一区| 97热在线精品视频在线观看| 中文字幕日韩av综合精品| 国产精品日韩欧美大师| 国产91精品久久久久久久| 亚洲欧美日韩国产成人| 久久91亚洲精品中文字幕奶水| 国产91精品久久久久久久| 国产主播在线一区| 亚洲a级在线观看| 欧美国产精品人人做人人爱| 久久国产精品久久国产精品| 欧洲成人午夜免费大片| 国产精品99久久久久久www| 成人激情电影一区二区| 成人两性免费视频| 欧洲成人免费aa| 国产精品第100页| 国产成人精品在线播放| 91av在线精品| 亚洲开心激情网| 国外成人在线播放| 亚洲视频免费一区| 欧美成人精品激情在线观看| 欧美午夜精品伦理| 久久精品一本久久99精品| 欧美—级高清免费播放| 在线视频国产日韩| 欧美激情啊啊啊| 日韩精品视频在线观看网址| 国产精品国产亚洲伊人久久| 亚洲精品v欧美精品v日韩精品| 国产精品久久久久久久久男| 国产精品久久久久久久久久久久久| 欧美在线视频免费播放| 亚洲成年人在线播放| 亚洲天堂第二页| 日韩欧美亚洲一二三区| 色综合色综合久久综合频道88| 日韩免费观看av| 国产精品九九久久久久久久| 亚洲美女精品久久| 中文字幕在线视频日韩| 91色琪琪电影亚洲精品久久| 日韩精品极品视频| 欧美一区视频在线| 国产精品成人va在线观看| 亚洲欧美国内爽妇网| 日韩精品在线视频美女| 奇米成人av国产一区二区三区| 伊是香蕉大人久久| 亚洲第一av在线| 欧美性生交大片免费| 国产男人精品视频| 欧美精品少妇videofree| 日本亚洲欧美成人| 亚洲香蕉成视频在线观看| 日韩福利伦理影院免费| 久久手机免费视频| 国产香蕉精品视频一区二区三区| 日韩一区二区久久久| 日韩av电影在线播放| 日韩一区二区精品视频| 九九热这里只有精品免费看| 精品视频在线导航| 欧美精品在线观看| 97在线视频免费播放| 国产视频精品久久久| 成人精品在线视频| 色偷偷88888欧美精品久久久| 国产精品盗摄久久久| 亚洲精品av在线播放| 在线视频欧美日韩精品| 日韩精品中文字幕在线播放| 少妇高潮久久久久久潘金莲| 成人av色在线观看| 久久精品视频播放| 日韩在线观看免费网站| 欧洲成人在线视频| 中文字幕自拍vr一区二区三区| 国产成人精品在线| 精品偷拍一区二区三区在线看| 国产丝袜精品第一页| 97久久超碰福利国产精品…| 国产精品ⅴa在线观看h| 欧美丰满少妇xxxx| 欧美激情一区二区三区成人| 亚洲精品电影网在线观看| 日韩中文在线中文网在线观看| 欧美小视频在线| 国产精品成av人在线视午夜片| 一区二区三区久久精品| 亚洲国模精品一区| 欧美日韩中文字幕日韩欧美| www高清在线视频日韩欧美| 亚洲欧美日韩国产中文专区| 久久久人成影片一区二区三区观看| 91精品国产高清久久久久久| 亚洲国产日韩欧美在线动漫| 欧美在线欧美在线| 精品久久久中文| 亚洲国产精品国自产拍av秋霞| 日韩亚洲成人av在线| 国产精品福利久久久| 日韩欧美国产成人| 国产精品香蕉国产| 性欧美在线看片a免费观看| 中文字幕日韩精品有码视频| 久久天堂av综合合色| 欧美诱惑福利视频| 国产亚洲xxx| 九九久久精品一区| 欧美极品少妇与黑人| 正在播放欧美视频| 国产成人在线视频| 国产精品成人va在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 国产精品99久久久久久白浆小说| 久久久午夜视频| 色综久久综合桃花网| 国产亚洲a∨片在线观看| 91色琪琪电影亚洲精品久久| 日韩69视频在线观看| 欧美性猛交xxxx免费看久久久| 日本精品中文字幕| 中文字幕久热精品视频在线| 日韩免费av片在线观看| 亚洲va国产va天堂va久久| 97婷婷大伊香蕉精品视频| 日韩在线资源网| 亚洲男人天堂九九视频| 欧美日韩中文字幕日韩欧美| 精品亚洲一区二区三区| 精品国产乱码久久久久久天美| 亚洲夜晚福利在线观看| 欧美日本高清一区| 2019中文字幕在线观看| 久久久精品视频在线观看| 国产精品久久久久久久天堂| 国产97在线视频| 欧美在线视频免费播放| 国产69精品久久久久久| 国产玖玖精品视频|