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

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

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

    Asktalk

    天行健,君子以自強不息!
    posts - 21, comments - 79, trackbacks - 0, articles - 2
      BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

    2007年12月21日

     

    這是一個目前最好的一個開源分頁標簽的實現(xiàn)---extremeTable標簽。今天談談它的Limit的設計架構思想。

    這個設計很通用,經過作者的多次重構,現(xiàn)在extremeTable的架構非常漂亮。這個標簽現(xiàn)在缺點是有些參數(shù)對mvc控制器屏蔽了,應提供一致的對外接口。不過整體上設計還是很精致的,面向對象來處理 html元素,與spring非常的默契,非常便于開發(fā)和測試。

    類圖關系

    1, 工廠LimitFactory

    TableLimitFactoryAbstractLimitFactoryLimitFactory

    TableLimitFactory是最終實現(xiàn)的工廠,它extendsAbstractLimitFactory抽象類,AbstractLimitFactory implementsLimitFactory接口。

    TableLimitFactory主要是用來實例化,通過構造函數(shù)傳入參數(shù)。同時創(chuàng)建Registry來完成jsp頁面參數(shù)傳入Registry。當然還有一個功能就是從web.xml的配置文件讀取一些全局參數(shù)。首先讀取配置文件參數(shù),然后根據(jù)參數(shù)創(chuàng)建LimitRegistry對象。

    this.registry = new LimitRegistry(context, tableId, prefixWithTableId, state, stateAttr);

    AbstractLimitFactory主要是用來獲取jsp頁面上設置的參數(shù),比如分頁的信息(第幾頁,起始行,結束行,每頁顯示行數(shù),查詢條件,排序條件等),當然他是通過工具類Registry來實現(xiàn)。

    2, Limit

    TableLimitLimit。其主要作用是一個參數(shù)參數(shù)器,就是把Registry對象的參數(shù)傳入TableLimit,考慮到分層吧,TableLimit是該標簽和action通信的橋梁。就像我們的j2ee項目vodaostrutsview等數(shù)據(jù)傳輸工具。

    3, Preferences

    TablePropertiesProperties 主要是來實現(xiàn)從web.xml配置的文件中讀取配置的一些全局參數(shù)。

    InputStream input = this.getClass().getResourceAsStream(preferencesLocation);

    if (input != null) {

    properties.load(input);

    }

    其中preferencesLocation是路徑,在TableLimitFactory初始化時候,通過工具類TableModelUtils.getPreferencesLocation(context)獲取。

    這個設計也是大多數(shù)需要配置文件的系統(tǒng)常用的方法。

    4, Registry

    LimitRegistryAbstractRegistryRegistry

    這個體系結構和上面的工廠模式一樣,就是LimitRegistry主要是用來實例化,通過構造函數(shù)傳入參數(shù)。AbstractRegistry是實際實現(xiàn)類,獲取jsp表單提交的參數(shù),并提供getter方法供Limit來使用。Registry是一個接口。

    所以這設計模式,我們可以來學習,

    經典表述:抽象類接口

    類:初始化,定義構造函數(shù),傳入參數(shù)。

    抽象類:定義業(yè)務方法在此。

    接口:定義接口方法,這個不用多說。

    (作者:asktalk   來自 http://www.tkk7.com/askltak 原創(chuàng)文章,轉載請注明出處)

    posted @ 2007-12-26 16:17 Asktalk 閱讀(4612) | 評論 (5)編輯 收藏

     

    下面是從struts的角度來談談spring自帶的web框架的使用。
    當然,我們在配置
    web框架前,需要把spring配置好,這里就不多說了。

    1.web框架核心servletweb.xml中的配置。


     

     1<servlet>  
     2<servlet-name>Dispatcher</servlet-name>  
     3<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param>   
     4<param-name>contextConfigLocation</param-name>   <param-value>/WEB-INF/Config.xml</param-value>
     5  </init-param> 
     6</servlet>  
     7
     8<servlet-mapping>  
     9<servlet-name>Dispatcher</servlet-name>  
    10<url-pattern>*.do</url-pattern>
    11 </servlet-mapping>
    12

     

    如果沒有配置config.xml文件,那么其默認的配置文件為[ servlet-name ]-servlet.xml 。也就是我們這個配置的默認配置文件是Dispatcher-servlet.xml

    2.web框架的xml配置

    spring web框架與struts最大的不同就是spring web框架根據(jù)分工,把每一種功能都定義為一種組件,所以在開發(fā)過程中需要配置的東西就非常多;Spring中分為幾個角色:

    核心控制器,就是web框架的主 servlet

    業(yè)務控制器,也就是struts中的action對象;

    映射處理器,定義了訪問路徑如何與webxml中的bean相匹配,就是定義了一種策略;

    視圖和視圖解析器,視圖就是jstl,velocity,xslt等,視圖解析器定義了action最終導航頁面的策略;

    模型,就是struts MVC結構中的model

    Command對象,類似于struts中的formBean

    2.1 Spring web框架與struts框架的區(qū)別

    下面列出了一些。例如,

    Web框架要攔截*.do路徑,那么*.do如何與我們下面的bean匹配,就需要一個映射控制器。在struts中就是名字相同的匹配,不需要配置。

    action最后要導向到不同的頁面,在struts中我們用的是默認的不需要在xml文件中配置,在spring中就需要配置視圖解析器。

    下面代碼中,ActioncommandClass配置的就是類似于struts中的formBean對象。

     1<?xml version="1.0" encoding="UTF-8"?>
     2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
     3 "http://www.springframework.org/dtd/spring-beans.dtd">
     4<beans>
     5 <!--Definition of View Resolver -->
     6 <bean id="viewResolver"
     7  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     8  <property name="viewClass"> 
     9   <value>org.springframework.web.servlet.view.JstlView</value>
    10  </property>
    11  <property name="prefix">
    12   <value>/WEB-INF/view/</value>
    13  </property>
    14  <property name="suffix">
    15   <value>.jsp</value>
    16  </property>
    17 </bean>
    18  
    19<!—就是我們上面說的映射控制器 -->
    20 <!--Request Mapping -->
    21 <bean id="urlMapping"
    22  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    23  <property name="mappings">
    24   <props>
    25    <prop key="/login.do">LoginAction</prop>
    26   </props>
    27  </property>
    28 </bean>
    29 
    30<!---類似于struts的action配置-->
    31 <!---Action Definition-->
    32 <bean id="LoginAction"
    33  class="com.maxway.action.LoginAction">
    34  <property name="commandClass">
    35   <value>com.maxway.action.LoginInfo</value>
    36  </property>
    37  <property name="fail_view">
    38   <value>loginfail</value>
    39  </property>
    40  <property name="success_view">
    41   <value>main</value>
    42  </property>
    43 </bean>
    44</beans>
    45


     

    3.代碼的編寫

    Action不外乎繼承一些現(xiàn)成的類,來實現(xiàn)我們view部分的業(yè)務。
    作者:http://www.tkk7.com/asktalk

    posted @ 2007-12-25 02:23 Asktalk 閱讀(4324) | 評論 (0)編輯 收藏

     

    最近我一直在研究Eclipse的架構體系,下面我們就來看看Eclipse的啟動機制吧

    1Eclipse源代碼       
    eclipse-sourceBuild-srcIncluded-3.3.1.1.zip   
    版本:3.3.1.1        大小:95.058MB
    下載地址:http://download.eclipse.org/eclipse/downloads

    解壓后的目錄結構如下圖,通過執(zhí)行build.bat可以編譯出完整的Eclipse-sdk-3.3.1.1運行包,和我們網上下載的一樣。但是這個過程可能需要一個小時左右的時間,要有耐性哦。所有的插件工程目錄在plugins中,我們只需要導入現(xiàn)有工程即可把plugins下所有工程導入。

    下面我們就先來研究一下Eclipse最核心的部分,就是RCP部分必須的插件。下面我列出了Eclipse RCP需要的插件。

    將這些代碼解壓縮到一個空目錄里,然后導入到Source InsightProject里。     

    二、Eclipse啟動過程

    首先我們從Eclipse的啟動過程開始分析。

    1exe部分的引導

    eclipse.exeEclipse的啟動文件,是與平臺相關的可執(zhí)行文件。它的功能比較簡單,主要是加載startup.jar文件,代碼在Eclipse源代碼的eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip,對應多個平臺。對于win32平臺,你可以直接運行win32目錄下的build.bat文件來編譯得到它(需要安裝C編譯器)。

    2java代碼部分的執(zhí)行入口

    對于Eclipse 3.3.1.1版本來說,如果在eclipse目錄下沒有找到startup.jar,則直接執(zhí)行org.eclipse.equinox.launcher.Main.main方法。

    當然我們可以在eclipse目錄下定制我們自己的啟動引導包startup.jar,現(xiàn)在Eclipse 3.3.1.1好像已經不建議這樣做了。如果有這個包,那么這個包將是java代碼的執(zhí)行入口,你可以在命令行下運行java -jar startup.jar命令來啟動Eclipse。它的入口是org.eclipse.core.launcher.Main類,這個類最終執(zhí)行的還是org.eclipse.equinox.launcher.Main.main方法。它對應的源代碼在org.eclipse.equinox.launcher目錄下的Main.java。關于此文件的定制詳細信息請查看eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip中的eclipse.c的注解部分。

    我們從main函數(shù)往后跟蹤,找到basicRun方法,這個是啟動的主要部分。

        protectedvoid basicRun(String[] args) throws Exception {

            System.getProperties().put("eclipse.startTime", Long.toString(System.currentTimeMillis())); //$NON-NLS-1$

            commands = args;

            String[] passThruArgs = processCommandLine(args);

           

            if (!debug)

               // debug can be specified as system property as well

               debug = System.getProperty(PROP_DEBUG) != null;

            setupVMProperties();     //設置VM屬性

            processConfiguration();   //讀取configuration/config.ini配置文件

           

            // need to ensure that getInstallLocation is called at least once to initialize the value.

            // Do this AFTER processing the configuration to allow the configuration to set

            // the install location. 

            getInstallLocation();

            // locate boot plugin (may return -dev mode variations)

            URL[] bootPath = getBootPath(bootLocation);

            

            //Set up the JNI bridge. We need to know the install location to find the shared library

            setupJNI(bootPath);

           

            //ensure minimum Java version, do this after JNI is set up so that we can write an error message

            //with exitdata if we fail.

            if (!checkVersion(System.getProperty("java.version"), System.getProperty(PROP_REQUIRED_JAVA_VERSION))) //$NON-NLS-1$

                return;

           

            setSecurityPolicy(bootPath); //設置執(zhí)行權限

            // splash handling is done here, because the default case needs to know

            // the location of the boot plugin we are going to use

            handleSplash(bootPath);

            beforeFwkInvocation();

            invokeFramework(passThruArgs, bootPath);    //啟動Eclipse內核

        }

    posted @ 2007-12-22 16:33 Asktalk 閱讀(4905) | 評論 (3)編輯 收藏

    先列出這些開源項目,隨后對其實現(xiàn)過程深入分析。

    1,Hibernate Synchronizer Eclipse Plugin   最近更新在2006.04.26
          http://hibernatesynch.sourceforge.net/   
          源代碼::pserver:anonymous@hibernatesynch.cvs.sourceforge.net:/cvsroot/hibernatesynch   
          HibernateSynchronizer3   為新項目,支持Eclipse3
          HibernateSynchronizer     為舊項目,支持Eclipse2 

          本插件使用方法:http://dev2dev.bea.com.cn/bbsdoc/20060124187.html
         可以生成hibernate的所有配置文件和dao。基本流程是 hibernate.cfg.xml->xxx.hbm.xml->po and dao

    2,  SqlExplorer    最近更新 2007.09.08
         http://www.sqlexplorer.org/index.php
         http://sourceforge.net/projects/eclipsesql
         源代碼::pserver:anonymous@eclipsesql.cvs.sourceforge.net:/cvsroot/eclipsesql
         與myEclipse的數(shù)據(jù)庫管理工具相近。

    3,GmailClipse 一個Eclipse RCP 
         http://sourceforge.net/projects/gmclipse/
         源代碼::pserver:anonymous@gmclipse.cvs.sourceforge.net:/cvsroot/gmclipse    源代碼為空,沒有共享
         像hotmail一樣的郵件客戶端收發(fā)系統(tǒng)。其源代碼對于學習RCP有很大的幫助。

    4,  SpringIde    spring官方的IDE工具。
          源代碼:http://springide.org/project/browser/trunk

    5, Hibernate tools   hibernate官方IDE工具。
           官方介紹:http://www.hibernate.org/268.html 
           源代碼svn: http://anonhibernate.labs.jboss.com/branches/Branch_3_2/HibernateExt 

    6,   Html解析工具 HTML Parser
          官方網址:http://htmlparser.sourceforge.net/
         

         
         

    posted @ 2007-12-22 00:43 Asktalk 閱讀(1174) | 評論 (0)編輯 收藏

    有很多朋友雖然安裝好了mysql但卻不知如何使用它。在這篇文章中我們就從連接MYSQL、修改密碼、增加用戶等方面來學習一些MYSQL的常用命令。

    一、連接MYSQL。

    格式: mysql -h主機地址 -u用戶名 -p用戶密碼

    1、例1:連接到本機上的MYSQL。

    首先在打開DOS窗口,然后進入目錄 mysqlbin,再鍵入命令mysql -uroot -p,回車后提示你輸密碼,如果剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車即可進入到MYSQL中了,MYSQL的提示符是:mysql>

    2、例2:連接到遠程主機上的MYSQL。假設遠程主機的IP為:110.110.110.110,用戶名為root,密碼為abcd123。則鍵入以下命令:

    mysql -h110.110.110.110 -uroot -pabcd123

    (注:u與root可以不用加空格,其它也一樣)

    3、退出MYSQL命令: exit (回車)

    二、修改密碼。

    格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼

    1、例1:給root加個密碼ab12。首先在DOS下進入目錄mysqlbin,然后鍵入以下命令

    mysqladmin -uroot -password ab12

    注:因為開始時root沒有密碼,所以-p舊密碼一項就可以省略了。

    2、例2:再將root的密碼改為djg345。

    mysqladmin -uroot -pab12 password djg345

    三、增加新用戶。
    (注意:和上面不同,下面的因為是MYSQL環(huán)境中的命令,所以后面都帶一個分號作為命令結束符)

    格式:grant select on 數(shù)據(jù)庫.*  to  用戶名@登錄主機  identified by  \"密碼\"

    例1、增加一個用戶test1密碼為abc,讓他可以在任何主機上登錄,并對所有數(shù)據(jù)庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入MYSQL,然后鍵入以下命令:

    grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\";

    但例1增加的用戶是十分危險的,你想如某個人知道test1的密碼,那么他就可以在internet上的任何一臺電腦上登錄你的mysql數(shù)據(jù)庫并對你的數(shù)據(jù)可以為所欲為了,解決辦法見例2。

    例2、增加一個用戶test2密碼為abc,讓他只可以在localhost上登錄,并可以對數(shù)據(jù)庫mydb進行查詢、插入、修改、刪除的操作(localhost指本地主機,即MYSQL數(shù)據(jù)庫所在的那臺主機),這樣用戶即使用知道test2的密碼,他也無法從internet上直接訪問數(shù)據(jù)庫,只能通過MYSQL主機上的web頁來訪問了。

    grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\";

    如果你不想test2有密碼,可以再打一個命令將密碼消掉。

    grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\";



    在上篇我們講了登錄、增加用戶、密碼更改等問題。下篇我們來看看MYSQL中有關數(shù)據(jù)庫方面的操作。注意:你必須首先登錄到MYSQL中,以下操作都是在MYSQL的提示符下進行的,而且每個命令以分號結束。

    一、操作技巧

    1、如果你打命令時,回車后發(fā)現(xiàn)忘記加分號,你無須重打一遍命令,只要打個分號回車就可以了。也就是說你可以把一個完整的命令分成幾行來打,完后用分號作結束標志就OK。

    2、你可以使用光標上下鍵調出以前的命令。但以前我用過的一個MYSQL舊版本不支持。我現(xiàn)在用的是mysql-3.23.27-beta-win。

    二、顯示命令

    1、顯示數(shù)據(jù)庫列表。

    show databases;

    剛開始時才兩個數(shù)據(jù)庫:mysql和test。mysql庫很重要它里面有MYSQL的系統(tǒng)信息,我們改密碼和新增用戶,實際上就是用這個庫進行操作。

    2、顯示庫中的數(shù)據(jù)表:

    use mysql; //打開庫,學過FOXBASE的一定不會陌生吧

    show tables;

    3、顯示數(shù)據(jù)表的結構:

    describe 表名;

    4、建庫:

    create database 庫名;

    5、建表:

    use 庫名;

    create table 表名 (字段設定列表);

    6、刪庫和刪表:

    drop database 庫名;

    drop table 表名;

    7、將表中記錄清空:

    delete from 表名;

    8、顯示表中的記錄:

    select * from 表名;

    從文本文件執(zhí)行SQL語句

    三、一個建庫和建表以及插入數(shù)據(jù)的實例

    drop database if exists school; //如果存在SCHOOL則刪除 
    create database school; //建立庫SCHOOL
    use school; //打開庫SCHOOL
    create table teacher //建立表TEACHER
    (
    id int(3) auto_increment not null primary key,
    name char(10) not null,
    address varchar(50) default '深圳',
    year date
    ); //建表結束
    //以下為插入字段
    insert into teacher values('','glchengang','深圳一中','1976-10-10');
    insert into teacher values('','jack','深圳一中','1975-12-23');

    注:在建表中(1)將ID設為長度為3的數(shù)字字段:int(3)并讓它每個記錄自動加一:auto_increment并不能為空:not null而且讓他成為主字段primary key(2)將NAME設為長度為10的字符字段(3)將ADDRESS設為長度50的字符字段,而且缺省值為深圳。varchar和char有什么區(qū)別呢,只有等以后的文章再說了。(4)將YEAR設為日期字段。

    如果你在mysql提示符鍵入上面的命令也可以,但不方便調試。你可以將以上命令原樣寫入一個文本文件中假設為school.sql,然后復制到c:\\下,并在DOS狀態(tài)進入目錄\\mysql\\bin,然后鍵入以下命令:

    mysql -uroot -p密碼 < c:\\school.sql

    如果成功,空出一行無任何顯示;如有錯誤,會有提示。(以上命令已經調試,你只要將//的注釋去掉即可使用)。

    四、將文本數(shù)據(jù)轉到數(shù)據(jù)庫中

    1、文本數(shù)據(jù)應符合的格式:字段數(shù)據(jù)之間用tab鍵隔開,null值用\\n來代替.

    例:

    3 rose 深圳二中 1976-10-10

    4 mike 深圳一中 1975-12-23

    2、數(shù)據(jù)傳入命令 load data local infile \"文件名\" into table 表名;

    注意:你最好將文件復制到\\mysql\\bin目錄下,并且要先用use命令打表所在的庫。

    五、備份數(shù)據(jù)庫:(命令在DOS的\\mysql\\bin目錄下執(zhí)行)

    mysqldump --opt school>school.bbb

    注釋:將數(shù)據(jù)庫school備份到school.bbb文件,school.bbb是一個文本文件,文件名任取,打開看看你會有新發(fā)現(xiàn)。

    后記:其實MYSQL的對數(shù)據(jù)庫的操作與其它的SQL類數(shù)據(jù)庫大同小異,您最好找本將SQL的書看看。我在這里只介紹一些基本的,其實我也就只懂這些了,呵呵。最好的MYSQL教程還是"晏子"譯的"MYSQL中文參考手冊"不僅免費每個相關網站都有下載,而且它是最權威的。可惜不是象\"PHP4中文手冊\"那樣是chm的格式,在查找函數(shù)命令的時候不太方便。

    posted @ 2007-12-21 01:50 Asktalk 閱讀(878) | 評論 (0)編輯 收藏

    InnoDB和MyISAM是在使用MySQL最常用的兩個表類型,各有優(yōu)缺點,視具體應用而定。下面是已知的兩者之間的差別,僅供參考。

    innodb
    InnoDB 給 MySQL 提供了具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行鎖(locking on row level),提供與 Oracle 類型一致的不加鎖讀取(non-locking read in SELECTs)。這些特性均提高了多用戶并發(fā)操作的性能表現(xiàn)。在InnoDB表中不需要擴大鎖定(lock escalation),因為 InnoDB 的列鎖定(row level locks)適宜非常小的空間。InnoDB 是 MySQL 上第一個提供外鍵約束(FOREIGN KEY constraints)的表引擎。

    InnoDB 的設計目標是處理大容量數(shù)據(jù)庫系統(tǒng),它的 CPU 利用率是其它基于磁盤的關系數(shù)據(jù)庫引擎所不能比的。在技術上,InnoDB 是一套放在 MySQL 后臺的完整數(shù)據(jù)庫系統(tǒng),InnoDB 在主內存中建立其專用的緩沖池用于高速緩沖數(shù)據(jù)和索引。 InnoDB 把數(shù)據(jù)和索引存放在表空間里,可能包含多個文件,這與其它的不一樣,舉例來說,在 MyISAM 中,表被存放在單獨的文件中。InnoDB 表的大小只受限于操作系統(tǒng)的文件大小,一般為 2 GB。

    在 http://www.innodb.com/ 上可以找到 InnoDB 最新的信息。InnoDB 手冊的最新版本總是被放置在那里,并且在那里可以得到 InnoDB 的商業(yè)許可(order commercial licenses)以及支持。

    InnoDB 現(xiàn)在(2001年十月)在一些大的需高性能的數(shù)據(jù)庫站點上被使用。著名的 Internet 新聞站點 Slashdot.org 就是使用的 InnoDB。 Mytrix, Inc. 在 InnoDB 表上存儲了超過 1 TB 的數(shù)據(jù),而且另外的一個站點在 InnoDB 表上處理著平均每秒 800 次的插入/更新的負載。

    MyISAM
    MyISAM 是MySQL缺省存貯引擎 .

    每張MyISAM 桌被存放在盤在三個文件 。frm 文件存放表格定義。 數(shù)據(jù)文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。

    以下是一些細節(jié)和具體實現(xiàn)的差別:

    1.InnoDB不支持FULLTEXT類型的索引。
    2.InnoDB 中不保存表的具體行數(shù),也就是說,執(zhí)行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。
    3.對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。
    4.DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
    5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數(shù)據(jù)后再改成InnoDB表,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用。

    另外,InnoDB表的行鎖也不是絕對的,如果在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like “%aaa%”

    任何一種表都不是萬能的,只用恰當?shù)尼槍I(yè)務類型來選擇合適的表類型,才能最大的發(fā)揮MySQL的性能優(yōu)勢。

     

     

    posted @ 2007-12-21 01:09 Asktalk 閱讀(2898) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲熟女综合色一区二区三区| 日韩午夜理论免费TV影院 | 亚洲AV无码专区国产乱码4SE | 国产精品偷伦视频观看免费 | 亚洲国产精品尤物YW在线观看| 男女拍拍拍免费视频网站| 亚洲美女aⅴ久久久91| 国产大片91精品免费看3| 波多野结衣免费一区视频 | 久久不见久久见中文字幕免费 | 亚洲一本一道一区二区三区| 在线精品亚洲一区二区小说| 曰批视频免费30分钟成人| 日韩a毛片免费观看| 亚洲天堂电影在线观看| 亚洲AV永久无码精品一区二区国产| 99re6在线视频精品免费下载| 女bbbbxxxx另类亚洲| 亚洲美女在线观看播放| 亚洲免费在线观看| 免费福利网站在线观看| 波多野结衣免费一区视频 | 亚洲av无码av在线播放| 亚洲一区免费观看| 国产亚洲老熟女视频| 成年女人喷潮毛片免费播放| 无码国产精品一区二区免费16| 羞羞网站在线免费观看| 亚洲精品第一综合99久久| 亚洲人成影院在线| 亚洲精品无码成人AAA片| 国产免费啪嗒啪嗒视频看看| 69堂人成无码免费视频果冻传媒| 中文字幕av无码不卡免费| 国产成人亚洲精品无码AV大片| 亚洲AV成人噜噜无码网站| 久久亚洲中文字幕精品有坂深雪| 狠狠亚洲狠狠欧洲2019| 亚洲AV永久无码精品一区二区国产| 成人午夜大片免费7777| 真人做人试看60分钟免费视频|