<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    模擬Google首頁(dwr實(shí)現(xiàn)ajax)

    上周末聽了在用友工作的兩個學(xué)長的一個小講座,雖然時間不長,但還是有些收獲的,其中一個開發(fā)部的經(jīng)理就提到了一些小的技術(shù)點(diǎn),其中就包括dwr,回家后上網(wǎng)查了查相關(guān)資料,了解到dwr是一個java開源框架,它的誕生就是為了降低開發(fā)ajax的難度,原理類似于在javascript中調(diào)用java類,于是就使用dwr技術(shù)模擬Google首頁做了個練習(xí)。由于正直全國哀悼日,頁面效果與各大網(wǎng)站相同,采用灰色樣式,在這里祝愿遭受災(zāi)難的親人們早日重建家園。

    運(yùn)行效果如圖:

    后臺數(shù)據(jù)庫為Oracle:

    --創(chuàng)建查詢信息表
    create table searchInfo
    (
      id 
    number not null primary key,--編號
      content varchar2(100not null,--查詢內(nèi)容
      count number not null--查詢次數(shù)
    )
    --創(chuàng)建序列
    create sequence seq_searchInfo;
    --創(chuàng)建插入數(shù)據(jù)的存儲過程
    create or replace procedure proc_add(vContent varchar2,vResult out varchar2)
    as
      vCount 
    number;
    begin
      
    select count(*into vCount from searchInfo where content = vContent;
      
    if vCount = 0 then
        
    insert into searchInfo values(seq_searchInfo.Nextval,vContent,1);
      
    else
        
    update searchInfo set count = count + 1 where content = vContent;
      
    end if;
      vResult :
    = 'success';
      exception 
        
    when others then
          vResult :
    = 'fail';
    end;
    首先需要把dwr.jar導(dǎo)入到WEB-INF\lib目錄下,然后在web.xml文件中配置DWRServlet
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    >

        
    <servlet>
            
    <servlet-name>dwr-invoker</servlet-name>
            
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
            
    <init-param>
                
    <param-name>debug</param-name>
                
    <param-value>true</param-value>
            
    </init-param>
        
    </servlet>
        
    <servlet>
            
    <description>
                This is the description of my J2EE component
            
    </description>
            
    <display-name>
                This is the display name of my J2EE component
            
    </display-name>
            
    <servlet-name>ServletX</servlet-name>
            
    <servlet-class>control.ServletX</servlet-class>
        
    </servlet>

        
    <servlet-mapping>
            
    <servlet-name>dwr-invoker</servlet-name>
            
    <url-pattern>/dwr/*</url-pattern>
        
    </servlet-mapping>
        
    <servlet-mapping>
            
    <servlet-name>ServletX</servlet-name>
            
    <url-pattern>/ServletX</url-pattern>
        
    </servlet-mapping>
    </web-app>
    接著需要在WEB-INF\lib目錄下創(chuàng)建dwr.xml文件,并對javascript要調(diào)用的類進(jìn)行聲明并公開方法,當(dāng)然默認(rèn)公開全部方法,需要提到的是,若類方法的參數(shù)或返回值為Bean,則還需要使用convert標(biāo)簽
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
    <dwr>
        
    <allow>
            
    <create creator="new" javascript="history">
                
    <param name="class" value="operation.OperSearchInfo" />
                
    <include method="getHistory" />
            
    </create>
            
    <convert converter="bean" match="entity.SearchInfo">
                
    <param name="include" value="content,count" />
            
    </convert>
        
    </allow>
    </dwr>
    兩個xml文件配置好后,可以在地址欄中輸入http://localhost:9527/工程名/dwr進(jìn)行測試,若測試成功,將顯示可用的類及其方法
    創(chuàng)建控制器ServletX.java,本例中只是判斷用戶的搜索操作是否成功,并以控制臺的形式輸出
    package control;

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import operation.*;

    public class ServletX extends HttpServlet {

        
    private static final long serialVersionUID = 1L;

        
    public ServletX() {
            
    super();
        }


        
    public void destroy() {
            
    super.destroy(); // Just puts "destroy" string in log
            
    // Put your code here
        }


        
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                
    throws ServletException, IOException {
            String model 
    = request.getParameter("model");
            
    if(model.equals("search")){
                String content 
    = Translation.transCode(request.getParameter("content"));
                OperSearchInfo obj 
    = new OperSearchInfo();
                
    if(obj.search(content)){
                    System.out.println(
    "success");
                }
    else{
                    System.out.println(
    "fail");
                }

            }

        }


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


        
    public void init() throws ServletException {
            
    // Put your code here
        }

    }

    創(chuàng)建與數(shù)據(jù)庫表對應(yīng)的實(shí)體Bean,SearchInfo.java文件
    package entity;

    /**
     * 搜索信息表實(shí)體
     * 
    @author 非凡DZ
     *
     
    */

    public class SearchInfo {
        
    private int id;//編號
        private String content;//查詢內(nèi)容
        private int count;//查詢次數(shù)
        
        
    public String getContent() {
            
    return content;
        }

        
    public void setContent(String content) {
            
    this.content = content;
        }

        
    public int getCount() {
            
    return count;
        }

        
    public void setCount(int count) {
            
    this.count = count;
        }

        
    public int getId() {
            
    return id;
        }

        
    public void setId(int id) {
            
    this.id = id;
        }

    }

    創(chuàng)建對數(shù)據(jù)庫表searchInfo進(jìn)行操作的類OperSearchInfo.java及方法
    package operation;

    import java.sql.*;
    import java.util.*;
    import db.DataBase;
    import entity.SearchInfo;
    /**
     * 該類包含對searchInfo表所有操作
     * 
    @author 非凡DZ
     *
     
    */

    public class OperSearchInfo {
        
        
    /**
         * 用戶點(diǎn)擊搜索按鈕后執(zhí)行
         * 
    @param content
         * 
    @return
         
    */

        
    public boolean search(String content){
            
    boolean flag = false;
            DataBase db 
    = new DataBase();
            Connection con 
    = db.getConnection();
            CallableStatement cs 
    = null;
            
    try{
                cs 
    = con.prepareCall("{call proc_add(?,?)}");
                cs.setString(
    1, content);
                cs.registerOutParameter(
    2, java.sql.Types.CHAR);
                cs.execute();
                
    if(cs.getString(2).equals("success")){
                    flag 
    = true;
                }

            }
    catch(Exception e){
                System.out.println(
    "proc異常"+e.getMessage());
                e.printStackTrace();
            }
    finally{
                
    try{
                    con.close();
                }
    catch(Exception ex){
                    System.out.println(
    "關(guān)閉連接異常"+ex.getMessage());
                    ex.printStackTrace();
                }

            }

            
    return flag;
        }

        
        
    /**
         * 獲得與界面文本框中信息相似的前10條信息
         * 
    @param content 界面文本框中的數(shù)據(jù)
         * 
    @return 相似信息
         
    */

        
    public ArrayList getHistory(String content){
            DataBase db 
    = new DataBase();
            Connection con 
    = db.getConnection();
            ResultSet rs 
    = null;
            ArrayList
    <SearchInfo> aryResult = new ArrayList<SearchInfo>();
            String sql 
    = "select content,count from searchInfo where content"
                
    +" like ? and rownum <= 10 order by count desc";
            
    try{
                
    if(!content.equals("")){
                    PreparedStatement pstn 
    = con.prepareStatement(sql);
                    pstn.setString(
    1, content+"%");
                    rs 
    = pstn.executeQuery();
                    
    while(rs.next()){
                        SearchInfo info 
    = new SearchInfo();
                        info.setContent(rs.getString(
    1));
                        info.setCount(rs.getInt(
    2));
                        aryResult.add(info);
                    }

                }

            }
    catch(Exception e){
                System.out.println(
    "獲得歷史查詢信息異常"+e.getMessage());
                e.printStackTrace();
            }
    finally{
                
    try{
                    con.close();
                }
    catch(Exception ex){
                    System.out.println(
    "關(guān)閉連接異常"+ex.getMessage());
                    ex.printStackTrace();
                }

            }

            
    return aryResult;
        }

    }

    Translation類用于處理數(shù)據(jù)傳輸?shù)木幋a問題
    package operation;

    import java.io.*;

    /**
     * 該類用于解決編碼問題
     * 
    @author 非凡DZ
     *
     
    */

    public class Translation {
      
    public Translation() {
      }


      
    public static String transCode(String str){
          String temp 
    = null;
          
    if(str == null){
              temp 
    = "";
          }

          
    try {
              temp 
    = new String(str.getBytes("iso8859-1"), "utf-8");
          }
     catch (UnsupportedEncodingException ex) {
          }

          
    return temp;
      }

    }

    DataBase用于獲得數(shù)據(jù)庫連接
    package db;

    import java.sql.*;
    /**
     * 該類用于獲取數(shù)據(jù)庫連接
     * 
    @author 非凡DZ
     *
     
    */

    public class DataBase {
        
    private Connection con;
        
    private String driver = "oracle.jdbc.driver.OracleDriver";
        
    private String url = "jdbc:oracle:thin:@localhost:1521:daizhenghenry";
        
    private String uid = "daizheng";
        
    private String pwd = "daizheng";
        
        
    public Connection getConnection(){
            
    try{
                Class.forName(driver);
                con 
    = DriverManager.getConnection(url, uid, pwd);
            }
    catch(Exception e){
                System.out.println(
    "連接異常"+e.getMessage());
                e.printStackTrace();
            }

            
    return con;
        }

    }

    最后是jsp頁面
    <%@ page language="java" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        
    <head>
            
    <title>模擬搜索引擎</title>
            
    <style type="text/css">
            html 
            
    {
                filter
    :progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
            
    }
     
        
    </style>
            
    <script type='text/javascript' src='/ajaxTest/dwr/interface/history.js'></script>
            
    <script type='text/javascript' src='/ajaxTest/dwr/engine.js'></script>
            
    <script type='text/javascript' src='/ajaxTest/dwr/util.js'></script>
            
    <script language="javascript">
            
    /*處理用戶相關(guān)搜索*/
            
    function change(data){
                
    //得到表格中的行數(shù)
                var count = document.getElementById('tab').rows.length;
                
    //如果表中存在行,將所有行刪除
                if(count >0){
                    
    for(var i=count-1;i>=0;i--){
                        document.getElementById('tab').deleteRow(i);
                    }

                }

                
    //如果存在相關(guān)搜索記錄        
                if(data.length > 0){
                    document.getElementById('Related').style.display 
    = '';
                    document.getElementById('x').style.display 
    = '';
                    
    for(var i=0;i<data.length;i++){
                        
    var objTr = document.getElementById('tab').insertRow();
                        
    var objTd1 = objTr.insertCell(0);
                        objTd1.innerHTML 
    = "<input readonly type='text' "
                        
    +"size='35' name='txtHistory' style='border:none;background:#FFFFFF'"
                        
    +" value='"+data[i].content+"' onmouseover='overChangeColor(this)'"
                        
    +" onmouseleave='leaveChangeColor(this)' "
                        
    +"onclick='clickHistory(this)'>";
                        
    var objTd2 = objTr.insertCell(1);
                        objTd2.innerHTML 
    = "<input type='text' name='result' readonly"
                        
    +" size='15' style='border:none;background:#FFFFFF;text-align:right'"
                        
    +" value='"+data[i].count+"結(jié)果"+"' align='right'/>";
                        objTd2.align 
    = 'right';
                    }

                }
    else{
                    document.getElementById('Related').style.display 
    = 'none';
                }

            }

            
    /*關(guān)閉歷史查詢記錄*/
            
    function myClose(){
                document.getElementById('Related').style.display 
    = 'none';
            }

            
    /*鼠標(biāo)在相關(guān)搜索內(nèi)容上方時執(zhí)行*/
            
    function overChangeColor(object){
                
    var histories = document.getElementsByName('txtHistory');
                
    for(var i=0;i<histories.length;i++){
                
    //如果當(dāng)前鼠標(biāo)停留在某一行上
                    if(histories[i].style.background == '#ccffcc'){
                        histories[i].style.background 
    = '#FFFFFF';
                        
    var tdObj1 = histories[i].parentElement;//td
                        var trObj1 = tdObj1.parentElement;//tr
                        var childObj1 = trObj1.childNodes(1);
                        
    var x1 = childObj1.childNodes(0);
                        x1.style.background 
    = '#FFFFFF';
                        
    break;
                    }

                }

                object.style.background 
    = '#CCFFCC';
                
    var tdObj = object.parentElement;//td
                var trObj = tdObj.parentElement;//tr
                var childObj = trObj.childNodes(1);
                
    var x = childObj.childNodes(0);
                x.style.background 
    = '#CCFFCC';
            }

            
    /*鼠標(biāo)離開相關(guān)搜索內(nèi)容上方時執(zhí)行*/
            
    function leaveChangeColor(object){
                object.style.background 
    = '#FFFFFF';
                
    var tdObj = object.parentElement;//td
                var trObj = tdObj.parentElement;//tr
                var childObj = trObj.childNodes(1);//td
                var x = childObj.childNodes(0);//input
                x.style.background = '#FFFFFF';
            }

            
    /*鼠標(biāo)點(diǎn)擊相關(guān)搜索內(nèi)容時執(zhí)行*/
            
    function clickHistory(object){
                document.frm.content.value 
    = object.value;
                document.getElementById('Related').style.display 
    = 'none';
                frm.submit();
            }

            
    /*用戶在搜索框中按鍵事件處理*/
            
    function keySelectHistory(){
                
    var nKeyCode = window.event.keyCode;
                
    if(nKeyCode == 38 || nKeyCode == 40){
                    
    var count = document.getElementById('tab').rows.length;
                    
    var tempRowId;//記錄鼠標(biāo)懸浮所在行
                    var flag = false;//標(biāo)識是否有已經(jīng)變色的行
                    if(count > 0 && (nKeyCode == 38 || nKeyCode == 40)){//如果存在相關(guān)搜索信息
                        var histories = document.getElementsByName('txtHistory');
                        
    for(var i=0;i<histories.length;i++){
                            
    //如果當(dāng)前鼠標(biāo)停留在某一行上
                            if(histories[i].style.background == '#ccffcc'){
                                tempRowId 
    = i;
                                flag 
    = true;
                                
    break;
                            }

                        }

                        
    if(!flag){
                            tempRowId 
    = 0;
                        }

                        
    if(nKeyCode == 38){//向上鍵
                            if(tempRowId > 0){
                                leaveChangeColor(histories[tempRowId]);
                                overChangeColor(histories[tempRowId 
    - 1]);
                                document.frm.content.value 
    = (histories[tempRowId - 1]).value;
                            }
    else{
                                leaveChangeColor(histories[
    0]);
                                overChangeColor(histories[count 
    - 1]);
                                document.frm.content.value 
    = (histories[count - 1]).value;
                            }

                            
                        }
    else if(nKeyCode == 40){//向下鍵
                            if(tempRowId == 0 && histories[0].style.background != '#ccffcc'){
                                overChangeColor(histories[
    0]);
                                document.frm.content.value 
    = histories[0].value;
                            }
    else if(tempRowId < count -1){
                                leaveChangeColor(histories[tempRowId]);
                                overChangeColor(histories[tempRowId 
    + 1]);
                                document.frm.content.value 
    = (histories[tempRowId + 1]).value;
                            }
    else{
                                leaveChangeColor(histories[tempRowId]);
                                overChangeColor(histories[
    0]);
                                document.frm.content.value 
    = histories[0].value;
                            }

                        }

                    }

                }
    else{//搜索框內(nèi)容發(fā)生改變時(手動使其變化,而非通過上下鍵)
                    var str = document.frm.content.value;
                    history.getHistory(str,change);
                }

            }

        
    </script>
        
    </head>
        
    <body>
            
    <b>模擬搜索引擎</b>
            
    <br />
            
    <form action="ServletX" name="frm" method="post">
                
    <img alt="逝者安息,生者堅(jiān)強(qiáng)" src="images\daonian.gif" />
                
    <br />
                
    <br />
                
    <input type="hidden" name="model" value="search" />
                
    <input type="text" size="55" name="content"
                    onkeyup
    ="keySelectHistory()" />
                
    <input type="submit" value="搜索" />
                
    <div id="Related"
                    style
    ="border:1px solid #f990033;display:'none';width:335;">
                    
    <table id="tab" cellpadding="0" border="0" cellspacing="0">
                    
    </table>
                    
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    
    <id="x" href='javascript:;' onclick='myClose()'
                        
    style="display:none">關(guān)閉</a>
                
    </div>
            
    </form>
        
    </body>
    </html>
    盡情享受dwr為我們開發(fā)ajax帶來的暢爽吧!

    posted on 2008-05-21 18:37 非凡DZ 閱讀(3847) 評論(15)  編輯  收藏 所屬分類: J2EE

    評論

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-05-21 18:59 天天基金網(wǎng)

    不錯,學(xué)習(xí)中~~~~  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax)[未登錄] 2008-05-21 21:45 wst302

    學(xué)習(xí),dwr倒是經(jīng)常用,主要看看下拉框的顯示  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-05-22 18:33 wenlin

    iso8859-1 有這個編碼么?
    好像是 iso-8859-1 吧  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-05-22 21:08 銀河使者

    study  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-05-24 17:49 sh

    這么簡單一個需求被你實(shí)現(xiàn)的如此復(fù)雜,也算是一種學(xué)習(xí)了。。。  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-05-24 18:57 非凡DZ

    當(dāng)初在動態(tài)創(chuàng)建<tr>時,是想直接寫<tr>對象的事件來實(shí)現(xiàn)鼠標(biāo)懸浮來著,可就是沒效果,到現(xiàn)在還有點(diǎn)不明白,所以只好采用通過文本框的事件再向上找對象的方式來實(shí)現(xiàn),除了這點(diǎn)確實(shí)是復(fù)雜了點(diǎn),其他地方還真沒想到哪里復(fù)雜了,還請這位朋友明示阿 呵呵  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-05-27 09:54 zhouyanhui

    挺好的! 支持!  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-06-03 09:24 zyhxl66

    初學(xué)dwr 你的這幾個js
    /ajaxTest/dwr/interface/history.js
    /ajaxTest/dwr/engine.js
    /ajaxTest/dwr/util.js
    是哪的,從哪里可以得到!  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-06-03 09:55 非凡DZ

    在你對dwr.xml配置完成后,進(jìn)入測試頁面,頁面上就有這幾個路徑,你直接復(fù)制到你想應(yīng)用的頁面就行了  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-06-05 13:33 zyhxl66

    我訪問測試地址后 http://localhost:8001/zyhxl66/dwr/index.html
    頁面上出現(xiàn)這些
    Classes known to DWR:
    Other Links
    Up to top level of web app.
    沒有出現(xiàn)你所說的那幾個js   回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-06-05 13:54 非凡DZ

    測試頁到這層即可 http://localhost:8001/zyhxl66/dwr
    不用再向下了 頁面會出現(xiàn)所有你公開的可供javascript調(diào)用的方法
    <script type='text/javascript' src='/ajaxTest/dwr/engine.js'></script>
    <script type='text/javascript' src='/ajaxTest/dwr/util.js'></script>
    除了這兩項(xiàng) 都是你定義的 你想在哪個頁面用什么方法 你就根據(jù)實(shí)際情況選擇就行了
      回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-06-05 14:30 zyhxl66

    好像是我程序少 jar包 你有qq msn 嗎 我的 106054541 zyhbrave@hotmail.com
      回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2008-08-30 21:36 桃花島主

    我是一個初學(xué)者,感謝樓主,正是我想要的,我也學(xué)到了東西啦.  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2009-06-24 17:36 123

    1222  回復(fù)  更多評論   

    # re: 模擬Google首頁(dwr實(shí)現(xiàn)ajax) 2009-09-02 09:14 ss

    好貼 大家頂起來  回復(fù)  更多評論   


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2008年6月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(2)

    隨筆分類(19)

    隨筆檔案(19)

    友情鏈接

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲午夜福利精品无码| 日本在线高清免费爱做网站| 日韩一级免费视频| 亚洲午夜精品久久久久久app | 日韩免费高清视频| 亚洲欧洲免费无码| 啦啦啦www免费视频| 麻豆亚洲AV成人无码久久精品 | 日韩电影免费在线| 亚洲爆乳成av人在线视菜奈实| 精品少妇人妻AV免费久久洗澡| 亚洲男人的天堂网站| 又粗又大又硬又爽的免费视频| 免费看一级一级人妻片| 国产精品亚洲w码日韩中文| 三级网站在线免费观看| 亚洲国产成人私人影院| 国产乱码免费卡1卡二卡3卡| 亚洲色偷偷综合亚洲AV伊人蜜桃| 小小影视日本动漫观看免费| 污污视频免费观看网站| 情人伊人久久综合亚洲| 57pao国产成视频免费播放| 亚洲愉拍一区二区三区| 日韩精品亚洲专区在线观看| 日韩精品无码免费专区网站| 亚洲Av无码一区二区二三区| 免费又黄又硬又爽大片| 日本免费高清视频| 亚洲视频无码高清在线| 亚洲第一区在线观看| 久久久久国产精品免费看| 在线a亚洲老鸭窝天堂av高清| 国产一区二区免费在线| 久久国产精品成人免费| 色偷偷女男人的天堂亚洲网| 亚洲成a人在线看天堂无码| 99久久人妻精品免费一区| 亚洲成a人无码亚洲成av无码| 亚洲无人区午夜福利码高清完整版| 亚洲视频免费在线看|