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

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

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

    posts - 165, comments - 198, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    引用
    http://blog.joycode.com/joe/archive/2005/09/06/63068.aspx
    http://www.itlearner.com/article/2006/3325.shtml


    使用方法:js


    //獲得Cookie解碼后的值
    function?GetCookieVal(offset){
    ????
    var?endstr?=?document.cookie.indexOf?(";",?offset);
    ????
    if?(endstr?==?-1)
    ????endstr?
    =?document.cookie.length;
    ????
    return?unescape(document.cookie.substring(offset,?endstr));
    }

    //設(shè)定Cookie值
    function?SetCookie(name,?value){
    ????
    var?expdate?=?new?Date();
    ????
    var?argv?=?SetCookie.arguments;
    ????
    var?argc?=?SetCookie.arguments.length;
    ????
    var?expires?=?(argc?>?2)???argv[2]?:?null;
    ????
    var?path?=?(argc?>?3)???argv[3]?:?null;
    ????
    var?domain?=?(argc?>?4)???argv[4]?:?null;
    ????
    var?secure?=?(argc?>?5)???argv[5]?:?false;
    ????
    if(expires!=null)?expdate.setTime(expdate.getTime()?+?(?expires?*?1000?));
    ????document.cookie?
    =?name?+?"="?+?escape?(value)?+((expires?==?null)???""?:?(";?expires="+?expdate.toGMTString()))
    ????
    +((path?==?null)???""?:?(";?path="?+?path))?+((domain?==?null)???""?:?(";?domain="?+?domain))
    ????
    +((secure?==?true)???";?secure"?:?"");
    }

    //刪除Cookie
    function?DelCookie(name){
    ????
    var?exp?=?new?Date();
    ????exp.setTime?(exp.getTime()?
    -?1);
    ????
    var?cval?=?GetCookie?(name);
    ????document.cookie?
    =?name?+?"="?+?cval?+?";?expires="+?exp.toGMTString();
    }

    //獲得Cookie的原始值
    function?GetCookie(name){
    ????
    var?arg?=?name?+?"=";
    ????
    var?alen?=?arg.length;
    ????
    var?clen?=?document.cookie.length;
    ????
    var?i?=?0;
    ????
    while?(i?<?clen)
    ????{
    ????????
    var?j?=?i?+?alen;
    ????????
    if?(document.cookie.substring(i,?j)?==?arg)
    ????????
    return?GetCookieVal?(j);
    ????????i?
    =?document.cookie.indexOf("?",?i)?+?1;
    ????????
    if?(i?==?0)?break;
    ????}
    ????
    return?null;
    }

    jsunit
    <!DOCTYPE?html?
    ??PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?
    ??"http://www.w3.org/TR/html4/loose.dtd"
    >
    <html>
    <head>
    <meta?http-equiv="Content-Type"?content="text/html;?charset=BIG5">
    <title>x</title>
    <script?type="text/javascript"?src="test.js"></script>
    <script?type="text/javascript"?src="lib/jsUnitCore.js"></script>
    <script?type="text/javascript">
    ????
    ????
    ????
    function?testValidArgs()?{?//?測試的函式要以test名稱作為開頭
    ????????SetCookie('li','gg');
    ????????assertEquals(
    "cookie?get?err",?'gg',?GetCookie('li')?);
    ????????assertEquals(
    "cookie?getVal?err",?'li=gg',?GetCookieVal('li')?);
    ????????
    ????????
    ????????DelCookie(
    "li");
    ????????assertEquals(
    "cookie del err ",null,?GetCookie('li')?);
    ????????
    ????????
    ????}

    ????
    ????
    </script>
    </head>
    <body>
    </body>
    </html>

    運行 Jsunit-> testRunner.html 通過測試


    posted @ 2007-11-28 17:13 G_G 閱讀(421) | 評論 (0)編輯 收藏

    環(huán)境:
    ???? private ?SessionFactory?sessionFactory;

    ????
    protected ? void ?setUp()? throws ?Exception?{
    ????????
    super .setUp();
    ????????
    // 利用java反射得到?HibernateSessionFactory?->
    ????????
    // private??static?org.hibernate.SessionFactory?sessionFactory;
    ????????
    // 要模擬?并發(fā)?要?HibernateSessionFactory?得出的?有?threadLocal?不行?
    ????????
    // 要?
    ????????HibernateSessionFactory.currentSession();
    ????????HibernateSessionFactory.closeSession();
    ????????Field?field?
    = ?HibernateSessionFactory. class .getDeclaredField( " sessionFactory " );
    ????????field.setAccessible(
    true );
    ????????sessionFactory?
    = ?(SessionFactory)?field.get(HibernateSessionFactory. class );
    ????}

    ????
    protected ? void ?tearDown()? throws ?Exception?{
    ????????
    super .tearDown();
    ????}

    悲觀鎖:
    ???? /** ?悲觀鎖問題?線程模擬?并發(fā)?
    ?????*?Table?->?T1oo(id,name)
    ?????*?????+----+------+
    ?????*????|?id?|?name?|
    ?????*????+----+------+
    ?????*????|??4?|?xx1??|
    ?????*????+----+------+
    ?????
    */
    ????
    public ? void ?ctestLock()? throws ?Exception?{
    ????????
    // ?insert?test?Data 測試數(shù)據(jù)
    ????????Session?seInsert? = ?sessionFactory.openSession();
    ????????Transaction?tr?
    = ?seInsert.beginTransaction();
    ????????T1oo?testUse?
    = ?testUse? = ? new ?T1oo();
    ????????testUse.setName(
    " liukaiyi_test " );
    ????????seInsert.save(testUse);
    ????????tr.commit();
    ????????System.out.println(?
    " **************Test?Use?Bean?:?insert******************* " ?);
    ????????seInsert.close();
    ????????Integer?testId?
    = ?testUse.getId();
    ????????
    ??????? //并發(fā)模擬
    ????????Session?session1?
    = ?sessionFactory.openSession();
    ????????Session?session2?
    = ?sessionFactory.openSession();
    ????????
    ????????
    final ?Transaction?tr1? = ?session1.beginTransaction();
    ????????Transaction?tr2?
    = ?session2.beginTransaction();
    ????????
    ????????Query?qu1?
    = ?session1.createQuery( " ?from?T1oo?t1oo?where?t1oo.name='liukaiyi_test' " );
    ????????Query?qu2?
    = ?session2.createQuery( " ?from?T1oo?t1oo?where?t1oo.name='liukaiyi_test' " );
    ????????
    ??????? //加悲觀鎖
    ????????qu1.setLockMode(
    " t1oo " ,LockMode.UPGRADE);
    ????????
    final ?Object?bean1? = ?qu1.uniqueResult();
    ????????Object?bean2?
    = ?qu2.uniqueResult();

    ????????T1oo?t1oo2?
    = ?(T1oo)bean2;
    ????????
    ????????t1oo2.setName(
    " run1 " );
    ????????
    ????????
    new ?Thread(
    ????????????????
    new ?Runnable(){
    ????????????????????
    public ? void ?run()??{
    ????????????????????????
    try ?{
    ????????????????????????????System.out.println(?
    " ********解鎖準備********* " ?);
    ????????????????????????????Thread.sleep(
    10 * 1000 );
    ????????????????????????????T1oo?t1oo1?
    = ?(T1oo)bean1;
    ????????????????????????????t1oo1.setName(
    " run2 " );
    ????????????????????????????tr1.commit();
    ????????????????????????????System.out.println(?
    " ********解鎖成功t********* " ?);
    ????????????????????????}?
    catch ?(InterruptedException?e)?{e.printStackTrace();}
    ????????????????????}
    ????????????????}
    ????????).start();

    ???????
    / /這里會 等待十秒后 tr1解鎖 /
    ????????tr2.commit();
    ????????
    ????????session1.close();
    ????????session2.close();
    ????????
    ????????
    ????????
    // ?delete?Test?Date 刪除測試數(shù)據(jù)
    ????????Session?seDelete? = ?sessionFactory.openSession();
    ????????Transaction?trD?
    = ?seDelete.beginTransaction();
    ????????Object?obj?
    = ?seDelete.createQuery( " ?from?T1oo?t?where?t.id=:id? " ).
    ????????????????????????setInteger(
    " id " ,testId.intValue()).
    ????????????????????????uniqueResult();
    ????????seDelete.delete(obj);
    ????????trD.commit();
    ????????System.out.println(?
    " **************Test?Use?Bean?:?delete************** " ?);
    ????????seDelete.close();
    ????}

    樂觀鎖:
    ???? /** ?樂觀鎖問題
    ?????*?Table?->?T1oo(id,name)
    ?????*?T2oo.hbn.xml?<class>?+>?optimistic-lock="version"
    ?????*?id下面?+>?<version?name="version"?type="integer"?column="version"?/>
    ?????*????+---------+---------+------+
    ?????*????|?Field???|?Type????|?Null?|
    ?????*????+---------+---------+------+
    ?????*????|?id??????|?int(11)?|??????|
    ?????*????|?avg?????|?int(11)?|??????|
    ?????*????|?aid?????|?int(11)?|?YES??|
    ?????*????|?version?|?int(11)?|?YES??|
    ?????*????+---------+---------+------+
    ?????*??注意:要在數(shù)據(jù)庫中多加一列?
    ?????*??mysql>?alter?table?T2OO?add?version?int;
    ?????
    */
    ????
    public ? void ?testOpLock() throws ?Exception{
    ??????? //添加測試數(shù)據(jù)
    ????????Session?session?
    = ?sessionFactory.openSession();
    ????????Transaction?trI?
    = ?session.beginTransaction();
    ????????Connection?conn?
    = ?session.connection();
    ????????T2oo?t2oo?
    = ? new ?T2oo();
    ????????T1oo?t1oo?
    = new ?T1oo( " t1ooOpLock " );
    ????????t1oo.setT2ooSet(
    new ?HashSet());
    ????????t2oo.setAvg(
    new ?Integer( 23 ));????
    ????????t2oo.setT1oo(t1oo);
    ????????t1oo.getT2ooSet().add(t2oo);
    ????????session.save(t2oo);
    ????????trI.commit();
    ????????session.clear();
    ????????session.close();

    ??????? //并發(fā)模擬
    ????????Session?se1?
    = ?sessionFactory.openSession();
    ????????Session?se2?
    = ?sessionFactory.openSession();
    ????????
    ????????Transaction?tr1?
    = ?se1.beginTransaction();
    ????????Transaction?tr2?
    = ?se2.beginTransaction();
    ???????
    ????????T1oo?obj1?
    = ?(T1oo)se1.load(T1oo. class , new ?Integer( 1 ));
    ????????T1oo?obj2?
    = ?(T1oo)se2.load(T1oo. class , new ?Integer( 1 ));
    ????????
    ????????((T2oo)obj1.getT2ooSet().iterator().next()).setAvg(
    new ?Integer( 9 ));
    ????????((T2oo)obj2.getT2ooSet().iterator().next()).setAvg(
    new ?Integer( 10 ));
    ????????????????
    ????????tr1.commit();
    ????????
    ????????
    try ?{
    ????????????tr2.commit();
    ????????}?
    catch ?(Exception?e)?{
    ????????????se2.clear();
    ????????????tr2.commit();
    ????????????
    // tr2報錯
    ????????} finally {
    ????????????se1.close();
    ????????????se2.close();
    ????????}
    ????????
    ????????
    ??????? //測試數(shù)據(jù)刪除
    ????????Session?dele?
    = ?sessionFactory.openSession();
    ????????Transaction?tr?
    = ?dele.beginTransaction();
    ????????dele.delete(obj1);
    ????????tr.commit();
    ????????dele.close();
    ????????
    ????????HibernateSessionFactory.closeSession();
    ????}

    posted @ 2007-11-26 18:57 G_G 閱讀(1100) | 評論 (0)編輯 收藏

    inverse 使用
    說明約定-如:
    1.表屬性 :T1oo->id,name
    ??? ?? ?? T2oo->id,avg,aid(
    外鍵 ),version

    2.代碼過程是:Save->t1oo對象(T1oo 外鍵 T2oo)
    ??? ??? T1oo t1oo = new T1oo();
    ??? ??? t1oo.setName("xx");??? ???
    ??? ??? t1oo.setT2ooSet(new HashSet());
    ??? ??? T2oo t2oo2 = new T2oo(24);
    ??? ??? //t2oo2.setT1oo(t1oo); (在下面的本用例表中的第3屬性 )
    ??? ??? t1oo.getT2ooSet().add(t2oo2);
    (在下面的本用例表中的第2屬性 )
    ??? ??? session.save(t1oo);

    3.本例表使用:
    T1oo.hbm.xml ->
    ??????? <set name="t2ooSet" inverse="true" cascade = "all"? >
    (在下面的本用例表中的第1,2屬性 )
    ??????????? <key column="aid"/>
    ??????????? <one-to-many class="T2oo"/>
    ??????? </set>
    T2oo.hbm.xml ->
    ??? ??? <many-to-one name="t1oo" column="aid"? class="T1oo" cascade="all" />
    (在下面的本用例表中的第1,2屬性 )
    結(jié)合上面說明得表為:
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | true? | all?? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? false?? |
    | t2oo? |?????? | all?? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+


    4.執(zhí)行 Hibernate語句
    ??? Hibernate: insert into t1oo (name, id) values (?, ?)
    ??? Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    5.結(jié)果為:
    mysql> select * from t2oo;
    +----+-----+------+---------+
    | id | avg | aid? | version |
    +----+-----+------+---------+
    |? 2 |? 24 | NULL |?????? 0 | //主要就是看 aid屬性
    +----+-----+------+---------+
    1 row in set (0.00 sec)


    mysql> select * from t1oo; //
    因為 T1oo總是可以 Save 下面就不再提了
    +----+------+
    | id | name |
    +----+------+
    |? 2 | xx?? |
    +----+------+
    1 row in set (0.00 sec)

    可改項:

    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | 可改4 | 可改2? |?? ??? ?? |????????? |
    +-------+-------+-------+?????????? |?? 可改1? |
    | t2oo? |?????? | 可改3 |??? ?????? |????????? |
    +-------+-------+-------+----------+----------+



    主本:
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | true? | all?? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? true??? |
    | t2oo? |?????? | all?? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    mysql> select * from t2oo;
    +----+-----+------+---------+
    | id | avg | aid? | version |
    +----+-----+------+---------+
    |? 1 |? 24 |??? 1 |?????? 0 |
    +----+-----+------+---------+
    1 row in set (0.00 sec)


    改1
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | true? | all?? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? false?? |
    | t2oo? |?????? | all?? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    mysql> select * from t2oo;
    +----+-----+------+---------+
    | id | avg | aid? | version |
    +----+-----+------+---------+
    |? 1 |? 24 | NULL|?????? 0 |
    +----+-----+------+---------+
    1 row in set (0.00 sec)

    改2
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | true? |?????? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? true??? |
    | t2oo? |?????? | all?? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Empty set (0.00 sec)

    改2? 改1
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | true? |?????? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? false?? |
    | t2oo? |?????? | all?? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Empty set (0.00 sec)


    改3
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | true? | all?? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? true??? |
    | t2oo? |?????? |?????? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    mysql> select * from t2oo;
    +----+-----+------+---------+
    | id | avg | aid? | version |
    +----+-----+------+---------+
    |? 1 |? 24 |??? 1 |?????? 0 |
    +----+-----+------+---------+
    1 row in set (0.00 sec)

    改3 改2
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | true? |?????? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? true??? |
    | t2oo? |?????? |?????? |??? ? ? ? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Empty set (0.00 sec)


    改3 改1
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | true? | all?? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? false?? |
    | t2oo? |?????? |?????? |??? ? ? ? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    mysql> select * from t2oo;
    +----+-----+------+---------+
    | id | avg | aid? | version |
    +----+-----+------+---------+
    |? 1 |? 24 | NULL |?????? 0 |
    +----+-----+------+---------+
    1 row in set (0.00 sec)

    改3 改2 改1
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | true? |?????? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? false?? |
    | t2oo? |?????? |?????? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Empty set (0.00 sec)

    改4
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | false | all?? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? true??? |
    | t2oo? |?????? | all?? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    Hibernate: update t2oo set aid=? where id=?
    mysql> select * from t2oo;
    +----+-----+------+---------+
    | id | avg | aid? | version |
    +----+-----+------+---------+
    |? 1 |? 24 |??? 1 |?????? 0 |
    +----+-----+------+---------+
    1 row in set (0.02 sec)

    改4 改1
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | false | all?? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? false?? |
    | t2oo? |?????? | all?? |??? ? ? ? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    Hibernate: update t2oo set aid=? where id=?
    mysql> select * from t2oo;
    +----+-----+------+---------+
    | id | avg | aid? | version |
    +----+-----+------+---------+
    |? 1 |? 24 |??? 1 |?????? 0 |
    +----+-----+------+---------+
    1 row in set (0.00 sec)

    改4 改2
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | false | ? ? ? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? true??? |
    | t2oo? |?????? | all?? |??? ? ? ? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: update t2oo set aid=? where id=?
    Empty set (0.00 sec)

    改4 改3
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | false | all?? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? true??? |
    | t2oo? |?????? |?????? |??? ? ? ? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    Hibernate: update t2oo set aid=? where id=?
    mysql> select * from t2oo;
    +----+-----+------+---------+
    | id | avg | aid? | version |
    +----+-----+------+---------+
    |? 1 |? 24 |??? 1 |?????? 0 |
    +----+-----+------+---------+
    1 row in set (0.00 sec)

    改4 改3 改2

    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | false |?????? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? true??? |
    | t2oo? |?????? |?????? |??? ? ? ? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: update t2oo set aid=? where id=?
    Empty set (0.00 sec)

    改4 改1 改2
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | false |?????? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? false?? |
    | t2oo? |?????? | all?? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: update t2oo set aid=? where id=?
    Empty set (0.00 sec)


    改4 改1 改3
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | false |? all? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? false?? |
    | t2oo? |?????? |?????? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    Hibernate: update t2oo set aid=? where id=?
    mysql> select * from t2oo;
    +----+-----+------+---------+
    | id | avg | aid? | version |
    +----+-----+------+---------+
    |? 1 |? 24 |??? 1 |?????? 0 |
    +----+-----+------+---------+
    1 row in set (0.02 sec)

    改4 改3 改2 改1
    +-------+-------+-------+----------+----------+
    |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
    +-------+-------+-------+----------+----------+
    | t1oo? | false |?????? |?? ??? ?? |????????? |
    +-------+-------+-------+? true??? |? false?? |
    | t2oo? |?????? |?????? |??? ????? |????????? |
    +-------+-------+-------+----------+----------+
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: update t2oo set aid=? where id=?
    Empty set (0.00 sec)






    posted @ 2007-11-16 19:20 G_G 閱讀(1732) | 評論 (2)編輯 收藏

    緩存問題:
    ???? /** ?使用?Query.executeUpdate()?緩存中數(shù)據(jù)不同步?解決辦法
    ?????*??Table?->?T1oo(id,name)
    ?????*?Table?->?T2oo(id,avg,aid)
    ?????*?外鍵?T1oo.id->T2oo.aid
    ?????*??Session.createQuery("delete?T1oo")?->??Query.executeUpdate()?
    ????
    */
    ????
    public ? void ?testExecuteUpdate(){
    ????????System.out.println(
    " \r\n\r\n********************ExecuteUpdate************************ " );
    ????????T1oo?t1oo?
    = ? new ?T1oo();
    ????????t1oo.setName(
    " liukaiyi " );
    ????????
    ????????HibernateSessionFactory.closeSession();
    ????????
    ????????Session?session?
    = ?HibernateSessionFactory.currentSession();
    ????Transaction?tr1?
    = ?session.beginTransaction();
    ????????
    // t1?成為?持久狀態(tài)?一級緩存中?加載
    ????????session.saveOrUpdate(t1oo);?
    ????????
    // 直接一條語句刪除T1oo,緩存無法同步
    ????????
    // 一級緩存中還有?t1
    ????????Query?qu? = ?session.createQuery( " delete?T1oo " );
    ????????
    try ?{
    ????????????qu.executeUpdate();
    ????????}?
    catch ?(Exception?e)?{????
    ????????????System.out.println(
    " //err:?有級聯(lián)?單使用?delete?T1oo?還要delete?T2oo.aid?=?T1oo.id// " );
    ????????????List?list?
    = ?session.createQuery( " from?T1oo " ).list();
    ????????????
    for (Iterator?it = list.iterator();it.hasNext();){
    ????????????????Query?t2qu?
    = ?session.createQuery( " delete?T2oo??where?aid=:id " );
    ????????????????t2qu.setInteger(
    " id " ,?((T1oo)it.next()).getId().intValue());
    ????????????????t2qu.executeUpdate();????????????????
    ????????????}
    ????????????qu.executeUpdate();
    ????????}
    ????????
    ????????tr1.commit();
    ????????
    ????Transaction?tr2?
    = ?session.beginTransaction();
    ????????
    // 這直接通過一級緩存中加載t2,但DB中以沒有此條數(shù)據(jù)
    ????????t1oo? = ?(T1oo)session.load(T1oo. class ,t1oo.getId());
    ????????t1oo.setName(
    " google " );
    ????????
    try ?{
    ????????????tr2.commit();????
    ????????}?
    catch ?(Exception?e)?{
    ????????????System.out.println(
    " //err:?update(t1oo)->DB?中數(shù)據(jù)庫中沒有?t1oo?// " );
    ????????}
    ????????

    ????????System.out.println(
    " ?一級緩存清空前? " + ?session.get(T1oo. class ,t1oo.getId())?);
    ????????session.evict(t1oo);
    ????????System.out.println(
    " ?一級緩存清空后? " + ?session.get(T1oo. class ,t1oo.getId())?);
    ????????
    ????????
    // 不把t1oo?id?為空,否則當在saveOrUpdate時候就會以為是游離態(tài)?update了
    ????????t1oo.setId( null );
    ????????
    // id=null?insert?調(diào)用
    ????????session.saveOrUpdate(t1oo);????????
    ????????tr2.commit();
    ????????
    ????Transaction?tr3?
    = ?session.beginTransaction();
    ????????session.delete(t1oo);
    ????????tr3.commit();
    ????????
    ????????session.close();
    ????????HibernateSessionFactory.closeSession();
    ????????
    ????}
    結(jié)果是:
    ********************ExecuteUpdate************************
    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.

    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: delete from t1oo
    //err: 有級聯(lián) 單使用 delete T1oo 還要delete T2oo.aid = T1oo.id//
    Hibernate: select t1oo0_.id as id, t1oo0_.name as name0_ from t1oo t1oo0_
    Hibernate: delete from t2oo where aid=?
    Hibernate: delete from t2oo where aid=?
    Hibernate: delete from t2oo where aid=?
    Hibernate: delete from t1oo
    Hibernate: update t1oo set name=? where id=?
    //err: update(t1oo)->DB 中數(shù)據(jù)庫中沒有 t1oo //
    ?一級緩存清空前 hbn.bean.T1oo@287
    Hibernate: select t1oo0_.id as id0_, t1oo0_.name as name0_0_ from t1oo t1oo0_ where t1oo0_.id=?
    ?一級緩存清空后 null
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: delete from t1oo where id=?


    Get Load 區(qū)別 :
    ?
    ????/**?Get?Load?區(qū)別?(在commit前要?session.flush())
    ?????*?Table?->?T1oo(id,name)
    ?????*?1.如果未能發(fā)現(xiàn)符合條件的記錄,get方法返回null,而load方法會拋出異常
    ?????*?2.Load方法可返回實體的代理類實例,而get方法永遠直接返回實體類。
    ?????*?3.load方法可以充分利用內(nèi)部緩存和二級緩存中的現(xiàn)有數(shù)據(jù),而get方法則僅僅在內(nèi)部緩存中進行數(shù)據(jù)查找,
    ?????*?????????????如沒有發(fā)現(xiàn)對應(yīng)數(shù)據(jù),將越過二級緩存,直接調(diào)用SQL完成數(shù)據(jù)讀取。?
    ?????
    */
    ????
    public?void?testGetLoad()?throws?Exception?{
    ????????System.out.println(
    "\r\n\r\n********************Get<>Load************************");
    ????????Session?session?
    =?HibernateSessionFactory.currentSession();
    ????
    //??數(shù)據(jù)準備
    ????????T1oo?t1oo?=?new?T1oo();
    ????????t1oo.setName(
    "liu");
    ????Transaction?t1?
    =?session.beginTransaction();
    ????????session.saveOrUpdate(t1oo);
    ????????
    //?為什么這會錯?
    ????????
    //session.evict(t1oo);
    ????????
    //session.flush();
    ????????t1.commit();
    ????????session.evict(t1oo);
    ????
    ????Transaction?t2?
    =?session.beginTransaction();
    ????????System.out.println(
    "一級緩存是否有t1oo(load)->"+session.contains(t1oo));?
    ????????
    //這時候t1oo為?CGlib生成的代理類
    ????????t1oo?=?(T1oo)session.load(T1oo.class,t1oo.getId());
    ????????System.out.println(
    "?延遲加載出現(xiàn):select..?t1oo0_.id=??表的其他屬性加載?");
    ????????t1oo.setName(
    "load?list");
    ????????
    //后在?update
    ????????t2.commit();
    ????????session.evict(t1oo);
    ????????
    ????Transaction?t3?
    =?session.beginTransaction();
    ????????System.out.println(
    "一級緩存是否有t1oo(get)->"+session.contains(t1oo));?
    ????????
    //這時候t1oo為?CGlib生成的代理類
    ????????t1oo?=?(T1oo)session.get(T1oo.class,t1oo.getId());
    ????????System.out.println(
    "?沒有延遲加載出現(xiàn)");
    ????????t1oo.setName(
    "get?list");
    ????????
    //后在?update
    ????????t3.commit();????
    ????????session.evict(t1oo);
    ????????
    ????Transaction?tr3?
    =?session.beginTransaction();
    ????????session.delete(t1oo);
    ????????tr3.commit();
    ????????
    ????????session.close();
    ????????HibernateSessionFactory.closeSession();
    ????????
    ????}
    結(jié)果
    ********************Get<>Load************************
    Hibernate: insert into t1oo (name, id) values (?, ?)
    一級緩存是否有t1oo(load)->false
    ?延遲加載出現(xiàn):select.. t1oo0_.id=? 表的其他屬性加載
    Hibernate: select t1oo0_.id as id0_, t1oo0_.name as name0_0_ from t1oo t1oo0_ where t1oo0_.id=?
    Hibernate: update t1oo set name=? where id=?
    一級緩存是否有t1oo(get)->false
    Hibernate: select t1oo0_.id as id0_, t1oo0_.name as name0_0_ from t1oo t1oo0_ where t1oo0_.id=?
    ?沒有延遲加載出現(xiàn)
    Hibernate: update t1oo set name=? where id=?
    Hibernate: select t2ooset0_.aid as aid1_, t2ooset0_.id as id1_, t2ooset0_.id as id0_, t2ooset0_.avg as avg1_0_, t2ooset0_.aid as aid1_0_ from t2oo t2ooset0_ where t2ooset0_.aid=?
    Hibernate: delete from t1oo where id=?


    Set 集合的識別

    ????/**?Set?集合的識別
    ?????*?Table?->?T1oo(id,name)
    ?????*?Table?->?T2oo(id,avg,aid)
    ?????*?外鍵?T1oo.id->T2oo.aid
    ?????*?T1oo??<set?name="t2ooSet"?inverse="false"?cascade?=?"all"??>
    ?????*?T2oo??<many-to-one?name="t1oo"?column="aid"?class="T1oo"?/>
    ?????*?cascade='insert'?是一定要的
    ?????*?????當?T1oo沒有?inverse="true"?主動權(quán)的時候,要雙項關(guān)聯(lián)
    ?????*?????t1oo.getT2ooSet().add(t2oo1);
    ?????*????t1oo.getT2ooSet().add(t2oo2);
    ?????*????t2oo1.setT1oo(t1oo);
    ?????*????t2oo2.setT1oo(t1oo);
    ?????*??要不后sql為:
    ?????*??Hibernate:?insert?into?t2oo?(avg,?aid,?id)?values?(?,??,??)
    ?????*????Hibernate:?insert?into?t2oo?(avg,?aid,?id)?values?(?,??,??)
    ?????*????+----+-----+------+
    ?????*????|?id?|?avg?|?aid??|
    ?????*????+----+-----+------+
    ?????*????|??1?|??24?|?NULL?|
    ?????*????|??2?|??23?|?NULL?|
    ?????*????+----+-----+------+
    ?????*????當?T1oo有?inverse="false"主動權(quán)的時候
    ?????*??t1oo.getT2ooSet().add(t2oo1);
    ?????*????t1oo.getT2ooSet().add(t2oo2);
    ?????*??Sql語句為:
    ?????*??Hibernate:?insert?into?t1oo?(name,?id)?values?(?,??)
    ?????*????Hibernate:?insert?into?t2oo?(avg,?aid,?id)?values?(?,??,??)
    ?????*????Hibernate:?insert?into?t2oo?(avg,?aid,?id)?values?(?,??,??)
    ?????*????Hibernate:?update?t2oo?set?aid=??where?id=?
    ?????*????Hibernate:?update?t2oo?set?aid=??where?id=?
    ?????*????|??3?|??24?|???12?|
    ?????*????|??4?|??23?|???12?|
    ?????*????+----+-----+------+
    ????
    */
    ????
    public?void?testSet(){
    ????????System.out.println(
    "\r\n\r\n********************Set************************");
    ????????T1oo?t1oo?
    =?new?T1oo();
    ????????t1oo.setName(
    "list");
    ????????
    ????????T2oo?t2oo1?
    =?new?T2oo();?t2oo1.setAvg(new?Integer(23));
    ????????T2oo?t2oo2?
    =?new?T2oo();?t2oo2.setAvg(new?Integer(24));
    ????????
    ????????
    ????????Session?session?
    =?HibernateSessionFactory.currentSession();
    ????????Transaction?tr1?
    =?session.beginTransaction();
    ????????session.save(t1oo);
    ????????t1oo?
    =?(T1oo)?session.load(T1oo.class,t1oo.getId());

    ????????t1oo.setT2ooSet(
    new?HashSet())?;
    ????????t1oo.getT2ooSet().add(t2oo1);
    ????????t1oo.getT2ooSet().add(t2oo2);
    ?????????
    ????????System.out.println(?t1oo.getT2ooSet().size()
    +""?);????????
    ????????tr1.commit();
    ????????
    ????????System.out.println();
    ????????T2oo?t2oo3?
    =?new?T2oo();?t2oo3.setAvg(new?Integer(25));
    ????????T1oo?t1oo2?
    =?new?T1oo();?t1oo2.setName("mz");
    ????????t2oo3.setT1oo(t1oo2);
    ????????
    ????????Transaction?tr2?
    =?session.beginTransaction();
    ????????session.save(t2oo3);
    ????????
    try?{
    ????????????tr2.commit();????
    ????????}?
    catch?(Exception?e)?{
    ????????????System.out.println(
    "//err:?沒有主動權(quán)?cascade?=?'all'?不可以級聯(lián)save?t1oo???//");
    ????????}
    ????????session.close();
    ????????HibernateSessionFactory.closeSession();
    ????}
    ???

    結(jié)果是:
    ********************Set************************
    2
    Hibernate: insert into t1oo (name, id) values (?, ?)
    Hibernate: insert into t2oo (avg, aid, id) values (?, ?, ?)
    Hibernate: insert into t2oo (avg, aid, id) values (?, ?, ?)
    Hibernate: update t2oo set aid=? where id=?
    Hibernate: update t2oo set aid=? where id=?

    //err: 沒有主動權(quán) cascade = 'all' 不可以級聯(lián)save t1oo?? //


    posted @ 2007-11-12 16:29 G_G 閱讀(2075) | 評論 (3)編輯 收藏

    學習:http://visualjquery.com/1.1.2.html
    DOM
    Attributes

    1.attr(key, value)
    $("img").attr("title", "xx");
    也是對屬性的添加但可以動態(tài)
    eg:??? 在每次給title時 動態(tài)了開始
    <img title="pic" /><img title="pic" /><img title="pic" />
    通過$("img").attr("title", function(index) { return this.title + (i + 1); });
    <img title="pic1" /><img title="pic2" /><img title="pic3" />

    2.? html 內(nèi)容取、賦值
    取??<div><input/></div>? ->>??$("div").html(); ->>? 結(jié)果:<input/>
    賦? $("div").html("<b>new stuff</b>"); ->><div><b>new stuff</b></div>
    通過這 ajax 就很簡單了。^_^

    Manipulation
    1.位置調(diào)換 after, append、before
    $("p").after("<b>Hello</b>");??? <p>后 添加 <b>..
    $("p").after( $("#foo")[0] );? 把id為foo的標簽移動到<p>后

    $("input[@name='butt1']").clone().prependTo("form"); //clone in form

    posted @ 2007-11-09 10:34 G_G 閱讀(321) | 評論 (0)編輯 收藏

    參考:
    ??? http://visualjquery.com/1.1.2.html

    1.定位
    $(?'xx'?)
      $("p[a]").hide();
    $("p:eq(0)").show();
    $("div:visible").hide();
    $("ul/li")
    /* valid too: $("ul > li") */
    $("p.foo[a]");
    $("input[@name=bar]").val();
    $("input[@type=radio][@checked]")


    2.事件添加
    ?? <a href="#" name="li" >Link</a>

    ?? $(document).ready(
    function()?{
    ???????? $(
    "a").click(function()?{????????????????????
    ?????????????? $("div").hide(); //跌代不可見 <a>

    ????? });
    ??? });

    3.頁面 javascript 輸入(和jsp的 out.print(...))$(html)
    $("<div?id='div1'><font?color='red''>Hello</font></div>").appendTo("body");

    4.寫css
    $(document.body).css(?"background",?"black"?);

    5.包含定位
    <p>one</p> <div><p>two</p></div> <div>three</div>

    $(
    "div?>?p") //定位two <p>two</p>

    6.范圍定位
    <body>
    ????????
    <form>
    ????????????
    <input?type="button"?value="哈哈"/>
    ????????
    </form>
    </body>

    $("input:button",?document.forms[0])[0].setAttribute("value","google");
    ? $("div", xml.responseXML) 等

    7.表達試定位
    $("p[@name='p1']").hide();//hide不要?$(..)[0]

    $("input[@name='butt1']:button",?document.forms[0])[0].setAttribute("value","google");

    8.$(..).fun.. 添加方法
    ????????<form>
    ????????????
    <input?name="butt1"?type="button"?value="google"/>
    ????????
    </form>
    ????????
    <script>
    ????????????????
    ????????jQuery.fn.extend({
    ??????????check:?
    function()?{
    ????????????alert('check');
    ??????????}
    ????????});
    ????????$(
    "input[@name='butt1']:button",?document.forms[0]).check();
    ????????
    </script>


    jQuery.extend({
    min: function(a, b) { return a < b ? a : b; },
    max: function(a, b) { return a > b ? a : b; }
    });


    9.
    $.noConflict()
    ????<body>
    ????????
    <form>
    ????????????
    <input?name="butt1"?type="button"?value="google"/>
    ????????
    </form>
    ????????
    <a?href="#"?temp_href="#"?name="li"?>Link</a>
    ????????
    <script>
    ????????????????
    ?????
    var?$j?=?jQuery.noConflict();??
    ???????
    ?????
    //?Use?jQuery?via?$j()??
    ?????$j(document).ready(function(){??
    ????????$(
    "a").click(function()?{???
    ???????????????$j(document.forms[
    0]).hide();??
    ???????????});
    ?????});?
    ????????
    </script>
    ????
    </body>

    10. $ 一般方法
    //each(fn)
    $("img").each(function(i){
    ??this.src?=?"test"?+?i?+?".jpg";
    });
    <img/><img/>
    <img?src="test0.jpg"/><img?src="test1.jpg"/>


    $("p").eq(1) //后1個
    $("p").lt(1) //正取 1 開始

    $("img").get();//全取
    $("img").get(0); //順序取 0開始
    $("p").gt(0) //反取從0開始

    $("*").index( $('#foo')[0] )
    <div id="foobar"><b></b><span id="foo"></span></div>
    返回結(jié)果 2

    $("img").length; //總長度
    $("img").size();







    posted @ 2007-11-08 17:12 G_G 閱讀(491) | 評論 (1)編輯 收藏

    直接看代碼..
    dom4j 的一般使用都在里面了
    /lib/dom4j-1.6.1.jar
    /lib/jaxen-1.1-beta-6.jar
    package?useDom4j.test.supper;

    import?java.io.File;
    import?java.io.FileOutputStream;
    import?java.io.IOException;
    import?java.io.InputStream;
    import?java.io.OutputStream;
    import?java.net.URL;
    import?java.util.Iterator;
    import?java.util.List;
    import?java.util.regex.Matcher;
    import?java.util.regex.Pattern;

    import?javax.xml.parsers.DocumentBuilder;
    import?javax.xml.parsers.DocumentBuilderFactory;

    import?junit.framework.TestCase;

    import?org.dom4j.Document;
    import?org.dom4j.DocumentFactory;
    import?org.dom4j.DocumentHelper;
    import?org.dom4j.Element;
    import?org.dom4j.Node;
    import?org.dom4j.QName;
    import?org.dom4j.Visitor;
    import?org.dom4j.VisitorSupport;
    import?org.dom4j.XPath;
    import?org.dom4j.io.DOMReader;
    import?org.dom4j.io.HTMLWriter;
    import?org.dom4j.io.OutputFormat;
    import?org.dom4j.io.SAXReader;
    import?org.dom4j.io.XMLWriter;


    public?class?useDom4jTest?extends?TestCase?{

    ????
    //use?all
    ????private?String?path?;
    ????
    private?ClassLoader?clo;
    ????
    //?file?path?->?bin?
    ????private?String?classPath?;
    ????
    //use?save?
    ????static?private?Document?doc;
    ????
    private?String?filese;

    ????
    protected?void?setUp()?throws?Exception?{
    ????????
    super.setUp();
    ????????path?
    =?"useDom4j/test/config/test.xml";
    ????????clo?
    =?this.getClass().getClassLoader();
    ????????classPath?
    =?System.getProperty("java.class.path").split(";")[0]???;
    ????????filese?
    =?System.getProperty("file.separator");
    ????}

    ????
    protected?void?tearDown()?throws?Exception?{
    ????????
    super.tearDown();
    ????}

    ????
    ????
    public?void?testRead()throws?Exception{
    ????????SAXReader?sax?
    =?new?SAXReader();
    ????????
    //File?read
    ????????Document?docF?=??sax.read(
    ????????????????
    new?File(clo.getResource(path).getFile())
    ????????????????????);
    ????????assertNotNull(
    "is?File?saxReader?err",docF);
    ????????
    ????????
    //InPutStream?read?
    ????????Document?docI?=?sax.read(?clo.getResourceAsStream(path)?);
    ????????assertNotNull(
    "is?InPutStream?saxReader?err",docI);
    ????????
    ????????
    //URL?read?
    ????????Document?docU?=?sax.read(?clo.getResource(path)?);
    ????????assertNotNull(
    "is?Url?saxReader?err",docU);
    ????????
    ????}
    ????
    ????
    /**?converts?a?W3C?DOM?document?into?a?dom4j?document?*/
    ????
    public?void?testConversion()?throws?Exception{
    ??????????DocumentBuilderFactory?domfac
    =DocumentBuilderFactory.newInstance();
    ??????????DocumentBuilder?dombuilder
    =domfac.newDocumentBuilder();
    ??????????InputStream?input?
    =??clo.getResourceAsStream(path)?;
    ??????????org.w3c.dom.Document?doc3c?
    =?dombuilder.parse(?input?);
    ??????????DOMReader?xmlReader?
    =?new?DOMReader();
    ??????????assertEquals(?
    "?Conversion?:?W3C?DOM->?dom4j?DOM?err",
    ??????????????????xmlReader.read(doc3c)?
    instanceof?Document,true?);
    ??????}
    ??????
    ????
    public?void?testCreate()throws?Exception{
    ??????????DocumentFactory?factory?
    =?DocumentFactory.getInstance();
    ??????????doc?
    =?factory.createDocument();
    ????????
    //root?Create
    ??????????Element?root?=?doc.addElement("testElement");
    ??????????assertNotNull(
    "is?root?Create?err",root);
    ??????????
    ???????????Element?author2?
    =?root.addElement(?"author"?)
    ??????????????.addAttribute(?
    "name",?"Toby"?)
    ??????????????.addAttribute(?
    "location",?"Germany"?)
    ??????????????.addText(?
    "Tobias?Rademacher"?);

    ????????????Element?author1?
    =?root.addElement(?"author"?)
    ??????????????.addAttribute(?
    "name",?"James"?)
    ??????????????.addAttribute(?
    "location",?"UK"?)
    ??????????????.addText(?
    "James?Strachan"?);
    ????????????
    ????????????
    //Test?Create?
    ????????????
    //use?XPath?->jaxen-xxx.jar??
    ????????????assertEquals("create?Element?author2?err",
    ????????????????????doc.selectSingleNode(
    "/testElement/author[@name='Toby']").getText()
    ????????????????????,
    "Tobias?Rademacher");
    ????????????assertEquals(
    "create?Element?author1?err",
    ????????????????????doc.selectSingleNode(
    "/testElement/author[@location='UK']/@name").getText()
    ????????????????????,
    "James");
    ????}



    ?????
    public?void?testPrintingHTML()throws?Exception{
    ???????????String?testSaveXml?
    =?"useDom4j/test/config/testHtml.html";
    ???????????
    ???????????testSaveXml?
    =?classPath+filese+testSaveXml;
    ??????????
    ???????????File?file?
    =?getFile(testSaveXml);
    ???????????
    //Save?file.html?
    ???????????HTMLWriter?writer?=?new?HTMLWriter(new?FileOutputStream(?file?));
    ???????????writer.write(
    new?SAXReader().read(?clo.getResource(path)?));
    ???????????writer.flush();
    ?????}
    ????
    ????
    public?void?testIterator(){
    ????????Element?root?
    =?this.doc.getRootElement();
    ????????
    ????????
    //Iterator
    ????????Iterator?elementIterator?=?root.elementIterator();
    ????????
    while(elementIterator.hasNext()){
    ??????????Element?element?
    =?(Element)elementIterator.next();
    ??????????assertNotNull(
    "not?attr?name",?element.selectSingleNode("./@name")?);
    ??????????assertNotNull(
    "not?attr?location",?element.selectSingleNode("./@location")?);
    ??????????assertNotNull(
    "not?Text?",?element.selectSingleNode(".").getText()?);
    ????????}
    ????????
    ????????
    //for?->?./XX
    ????????for?(?int?i?=?0,?size?=?root.nodeCount();?i?<?size;?i++?)?{
    ????????????Node?node?
    =?root.node(i);
    ????????????
    if?(?node?instanceof?Element?)?{
    ??????????????Element?element?
    =?(Element)node;
    ??????????????assertNotNull(
    "not?attr?name",?element.selectSingleNode("./@name")?);
    ????????????????assertNotNull(
    "not?attr?location",?element.selectSingleNode("./@location")?);
    ????????????????assertNotNull(
    "not?Text?",?element.selectSingleNode(".").getText()?);
    ????????????}
    ????????}
    ????????
    ????????
    //List?
    ????????List?elements?=?root.elements();
    ????????
    int?size?=?elements.size()?;
    ????????
    if?(?size?>?4?)?{
    ??????????elements.subList(?
    3,?4?).clear();
    ??????????assertEquals(
    "List?is?not?clear",size-elements.size()==1,true);
    ????????}

    ????}
    ????
    ????
    /**?use?test.xml?test
    ?????????xpath?->?/project/organization/
    ?????????<organization>
    ?????????????<name>MetaStuff?Ltd.</name>
    ?????????????<url>
    http://sourceforge.net/projects/dom4j</url>
    ?????????????<logo>
    http://sourceforge.net/sflogo.php?group_id=16035</logo>
    ??????????</organization>?
    ??????????
    ??????????xpath?->?/project/dependencies/dependency[groupId='msv']
    ????????????<dependency>
    ??????????????<groupId>msv</groupId>
    ??????????????<artifactId>xsdlib</artifactId>
    ??????????????<version>20030807</version>
    ??????????????<url>
    https://msv.dev.java.net/</url>
    ????????????</dependency>
    ????
    */
    ????
    public?void?testXpath()throws?Exception{
    ????????XPath?xpathSelector?
    =?DocumentHelper.createXPath("/project/organization/*");
    ????????Document?docT?
    =?new?SAXReader().read(?clo.getResourceAsStream(path)?);
    ????????List?results?
    =?xpathSelector.selectNodes(docT);
    ????????
    for?(?Iterator?iter?=?results.iterator();?iter.hasNext();?)?{
    ??????????Element?element?
    =?(Element)?iter.next();
    ??????????
    if(element.getName().equals("name")){
    ??????????????assertEquals(
    "name?err",?element.getText().equals("MetaStuff?Ltd."),true);
    ??????????}
    ??????????
    if(element.getName().equals("url")){
    ??????????????assertEquals(
    "url?err",?element.getText().equals("http://sourceforge.net/projects/dom4j"),true);
    ??????????}
    ??????????
    if(element.getName().equals("logo")){
    ??????????????assertEquals(
    "logo?err",?element.getText().equals("http://sourceforge.net/sflogo.php?group_id=16035"),true);
    ??????????}
    ????????}
    ????????
    ????????
    //?select?
    ????????String?url?=?docT.valueOf(?"/project/dependencies/dependency[groupId='msv']/url"?);
    ????????assertEquals(
    "Url?err",?url.equals("https://msv.dev.java.net/"),true);
    ????????Number?count?
    =?docT.numberValueOf(?"/project/dependencies/dependency[groupId='msv']/version"?);
    ????????assertEquals(
    "Url?err",?count.intValue()==20030807,true);
    ????????
    ????}

    ????
    ????
    public?void?testVisitor(){
    ????????Visitor?visitor?
    =?new?VisitorSupport()?{
    ????????????
    public?void?visit(Element?element)?{
    ??????????????System.out.println(
    ????????????????
    "Entity?name:?"?+?element.getName()??+?"?text?:"?+?element.getText()
    ??????????????);
    ????????????}
    ??????????};

    ??????????doc.accept(?visitor?);
    ????}

    ????
    //??element.clone?;??element.createCopy?;???
    ????public?void?testInsertElementAt()?throws?Exception{
    ????????Element?root?
    =?this.doc.getRootElement();
    ????????Element?oldElement?
    =?(Element)doc.selectSingleNode("/testElement/author[@name='Toby']");
    ????????Element?newElement?
    =?(Element)?oldElement.clone();
    ????????List?list?
    =?root.content();
    ????????list.add(?root.indexOf(oldElement)
    +1,newElement?);

    ?????}
    ????
    ????
    ????
    ????
    ?????
    public?void?testSave()throws?Exception{
    ???????????String?testSaveXml?
    =?"useDom4j/test/config/testSave.xml";
    ???????????
    ???????????testSaveXml?
    =?classPath+filese+testSaveXml;
    ??????????
    ???????????File?file?
    =?getFile(testSaveXml);
    ???????????
    //Save?file.xml?
    ???????????XMLWriter?writer?=?new?XMLWriter(new?FileOutputStream(?file?));
    ???????????writer.write(doc);
    ???????????writer.flush();
    ?????}

    ?????
    ?????
    ????
    private?File?getFile(String?testSaveXml)?throws?IOException?{
    ????????File?file?
    =?null?;
    ???????????URL?url?
    =?clo.getResource(testSaveXml);
    ???????????
    if(url==null){
    ???????????????file?
    =?new?File(testSaveXml);
    ???????????????file.createNewFile();
    ???????????}
    else{
    ???????????????file?
    =?new?File(??url.getFile()?);
    ???????????}
    ????????
    return?file;
    ????}
    ????
    ????
    }

    引用:http://freezingxu.blog.com.cn/archives/2006/1892647.shtml
    /**
    ??*?對指定的節(jié)點增加屬性和文本
    ??*?
    @param?elmt
    ??*?
    @param?name
    ??*?
    @param?value
    ??*?
    @param?text
    ??*?
    @return
    ??
    */
    ?
    public?Element?addAttribute(Element?elmt,String?name,String?value){
    ??elmt.addAttribute(name,value);
    ??
    return?elmt;
    ?}
    ?
    ?
    /**
    ??*?修改指定節(jié)點的屬性和文本
    ??*?
    @param?elmt
    ??*?
    @param?name
    ??*?
    @param?value
    ??*?
    @param?text
    ??*?
    @return
    ??
    */
    ?
    public?Element?setAttribute(Element?elmt,String?name,String?value){
    ??Attribute?attribute?
    =?elmt.attribute(name);
    ??
    //attribute.setName(name);
    ??attribute.setValue(value);
    ??List?list?
    =?new?ArrayList();
    ??list.add(attribute);
    ??elmt.setAttributes(list);
    ??
    return?elmt;
    ?}
    ?
    ?
    /**
    ??*?刪除指定節(jié)點的指定屬性
    ??*?
    @param?elmt
    ??*?
    @param?name
    ??*?
    @return
    ??
    */
    ?
    public?Element?removeAttribute(Element?elmt,String?name){
    ??elmt.remove(elmt.attribute(name));
    ??
    return?elmt;
    ?}
    ?
    ?
    /**
    ??*?輸出為文件
    ??*?
    @param?doc
    ??*?
    @throws?IOException
    ??
    */
    ?
    public?void?writeFile(Document?doc)?throws?IOException{
    ??FileWriter?out?
    =?new?FileWriter(?"d:/newQuery.xml"?);
    ??doc.write(out);
    ??out.flush();
    ??out.close();
    ?}

    posted @ 2007-11-06 15:24 G_G 閱讀(2098) | 評論 (3)編輯 收藏

    看hbn 源代碼 發(fā)現(xiàn)用了 CGlib 這就看看這個jar 。特留個文 ^_^(轉(zhuǎn))http://www.nirvanastudio.org/java/cglib-%E6%8C%87%E5%8D%97.html

    CGlib 就2個例能說明一切?
    先是使用類? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
    public?class?MyClass?{
    ?
    ????
    public?void?method()?{
    ????????System.out.println(
    "MyClass.method()");
    ????}

    ????
    public?void?method2()?{
    ????????System.out.println(
    "MyClass.method2()");
    ????}
    }

    例1:
    import?java.lang.reflect.Method;
    ?
    import?net.sf.cglib.proxy.Enhancer;
    import?net.sf.cglib.proxy.MethodProxy;
    import?net.sf.cglib.proxy.MethodInterceptor;
    ?
    public?class?Main?{
    ?
    ????
    public?static?void?main(String[]?args)?{
    ?
    ????????Enhancer?enhancer?
    =?new?Enhancer();
    ??? ??
    ??? ??? //在這代理了
    ????????enhancer.setSuperclass(MyClass.
    class);
    ????????enhancer.setCallback(?
    new?MethodInterceptorImpl()?);
    ?
    ??????? // 創(chuàng)造 代理 (動態(tài)擴展了MyClass類)
    ????????MyClass?my?
    =?(MyClass)enhancer.create();
    ?
    ????????my.method();
    ????}
    ?
    ????
    private?static?class?MethodInterceptorImpl?implements?MethodInterceptor?{
    ????????
    ????????
    public?Object?intercept(Object?obj,?
    ????????????????????????????????Method?method,?
    ????????????????????????????????Object[]?args,?
    ????????????????????????????????MethodProxy?proxy)?
    throws?Throwable?{
    ?
    ????????????System.out.println(method);
    ?
    ????????????proxy.invokeSuper(obj,?args);
    ?
    ????????????
    return?null;
    ????????}
    ????}
    }


    例2:
    import?java.lang.reflect.Method;


    import?net.sf.cglib.proxy.Enhancer;
    import?net.sf.cglib.proxy.MethodProxy;
    import?net.sf.cglib.proxy.MethodInterceptor;
    import?net.sf.cglib.proxy.NoOp;
    import?net.sf.cglib.proxy.Callback;
    import?net.sf.cglib.proxy.CallbackFilter;
    ?
    ?
    public?class?Main2?{
    ?
    ????
    public?static?void?main(String[]?args)?{
    ?
    ????????Callback[]?callbacks?
    =
    ????????????
    new?Callback[]?{?new?MethodInterceptorImpl(),??NoOp.INSTANCE?};
    ?
    ????????Enhancer?enhancer?
    =?new?Enhancer();
    ?
    ????????enhancer.setSuperclass(MyClass.
    class);
    ????????enhancer.setCallbacks(?callbacks?);
    ??????? //添加 方法過濾器? 返回1為不運行 2 為運行
    ????????enhancer.setCallbackFilter(?
    new?CallbackFilterImpl()?);
    ?
    ?
    ????????MyClass?my?
    =?(MyClass)enhancer.create();
    ?
    ????????my.method();
    ????????my.method2();
    ????}
    ?
    ????
    private?static?class?CallbackFilterImpl?implements?CallbackFilter?{
    ?
    ????????
    public?int?accept(Method?method)?{
    ?
    ????????????
    if?(?method.getName().equals("method2")?)?{
    ????????????????
    return?1;
    ?
    ????????????}?
    else?{
    ????????????????
    return?0;
    ????????????}
    ????????}
    ????}
    ?
    ????
    private?static?class?MethodInterceptorImpl?implements?MethodInterceptor?{
    ????????
    ????????
    public?Object?intercept(Object?obj,?
    ????????????????????????????????Method?method,?
    ????????????????????????????????Object[]?args,?
    ????????????????????????????????MethodProxy?proxy)?
    throws?Throwable?{
    ?
    ????????????System.out.println(method);
    ?
    ????????????
    return?proxy.invokeSuper(obj,?args);
    ????????}
    ????}
    }


    簡單不 哈哈 比jdk 中的動態(tài)代理好用 ,那還要接口? 不太方便 。

    posted @ 2007-11-05 10:22 G_G 閱讀(5786) | 評論 (3)編輯 收藏

    參照:容器外的JSP頁面測試技術(shù)
    由于上面給出例 復(fù)雜 。一般人很難理解。我也是 ^_^
    但仔細看我還是自己寫出一個比較簡單的,望大家一起討論。

    被測試jsp
    <%@?taglib?prefix="html"?uri="/WEB-INF/struts-html.tld"?%>
    <%@?taglib?prefix="c"?uri="/WEB-INF/c-1_0-rt.tld"?%>
    <html:html>
    ????
    <c:if?test="${name?!=?pass}">
    ???????${name}??
    <br>
    ???????${pass}?
    <br>
    ??? ?? <!-- <html:text property="in" ></html:text> -->
    ????</c:if>
    </html:html>





    ant直接把他放在 eclipes 工程的根目錄下 build.xml
    ???
    但有有3個參數(shù)要設(shè)置 tomcat.home? Tomcat 的地址
    ??? ??? ??? ??? ??? ??? webapp.path 工程中的根目錄,下面有WEB-INF
    ??? ??? ??? ??? ??? ??? src 原代碼 (到時候jsp會翻譯成.java
    ??? ??? ??? ??? ??? ??? ??? ??? ??? 到這個目錄的 org.apache.jsp.jsp 下)
    <project?name="Webapp?Precompilation"?default="all"?basedir=".">?

    ??
    <!--?tomcat?dir?-->
    ??
    <property?name="tomcat.home"?value="D:\Tomcat?5.0"/>
    ??
    ??
    <!--?this=..//WEB-INF?(in?eclipes)??-->
    ??
    <property?name="webapp.path"?value=".\WebRoot"/>
    ??
    <!--?src?(in?eclipes)?-->
    ??
    <property?name="src"?value="./src"/>

    ??
    <target?name="jspc">?
    ????
    <taskdef?classname="org.apache.jasper.JspC"?name="jasper2"?>?
    ??????
    <classpath?id="jspc.classpath">?
    ????????
    <pathelement?location="${java.home}/../lib/tools.jar"/>?
    ????????
    <fileset?dir="${tomcat.home}/bin">?
    ??????????
    <include?name="*.jar"/>?
    ????????
    </fileset>?
    ????????
    <fileset?dir="${tomcat.home}/server/lib">?
    ??????????
    <include?name="*.jar"/>?
    ????????
    </fileset>?
    ????????
    <fileset?dir="${tomcat.home}/common/lib">?
    ??????????
    <include?name="*.jar"/>?
    ????????
    </fileset>?
    ??????
    </classpath>?
    ????
    </taskdef>?

    ????
    <jasper2?
    ?????????????
    validateXml="false"?
    ?????????????uriroot
    ="${webapp.path}"?
    ?????????????webXmlFragment
    ="${webapp.path}/WEB-INF/generated_web.xml"?
    ?????????????outputDir
    ="${src}"?/>?
    ??
    </target>

    ??
    <target?name="compile">

    ????
    <mkdir?dir="${webapp.path}/WEB-INF/classes"/>
    ????
    <mkdir?dir="${webapp.path}/WEB-INF/lib"/>

    ????
    <javac?destdir="${webapp.path}/WEB-INF/classes"
    ???????????optimize
    ="off"
    ???????????debug
    ="on"?failonerror="false"
    ???????????srcdir
    ="${src}"?
    ???????excludes
    ="**/*.smap">
    ??????
    <classpath>
    ????????
    <pathelement?location="${webapp.path}/WEB-INF/classes"/>
    ????????
    <fileset?dir="${webapp.path}/WEB-INF/lib">
    ??????????
    <include?name="*.jar"/>
    ????????
    </fileset>
    ????????
    <pathelement?location="${tomcat.home}/common/classes"/>
    ????????
    <fileset?dir="${tomcat.home}/common/lib">
    ??????????
    <include?name="*.jar"/>
    ????????
    </fileset>
    ????????
    <pathelement?location="${tomcat.home}/shared/classes"/>
    ????????
    <fileset?dir="${tomcat.home}/shared/lib">
    ??????????
    <include?name="*.jar"/>
    ????????
    </fileset>
    ????????
    <fileset?dir="${tomcat.home}/bin">?
    ??????????
    <include?name="*.jar"/>?
    ????????
    </fileset>?
    ??????
    </classpath>
    ??????
    <include?name="**"?/>
    ??????
    <exclude?name="tags/**"?/>
    ????
    </javac>

    ??
    </target>

    ??
    <target?name="all"?depends="jspc,compile">
    ??
    </target>

    ??
    <target?name="cleanup">
    ??????
    <delete>
    ????????
    <fileset?dir="${webapp.path}/WEB-INF/src"/>
    ????????
    <fileset?dir="${webapp.path}/WEB-INF/classes/org/apache/jsp"/>
    ??????
    </delete>
    ??
    </target>

    </project>

    TEST
    package?jetty.test.supper;


    import?javax.servlet.http.HttpServletRequest;
    import?javax.servlet.http.HttpServletResponse;

    import?org.apache.jsp.jsp.MyJsp_jsp;

    import?com.meterware.httpunit.GetMethodWebRequest;
    import?com.meterware.httpunit.WebRequest;
    import?com.meterware.httpunit.WebResponse;
    import?com.meterware.servletunit.InvocationContext;
    import?com.meterware.servletunit.ServletRunner;
    import?com.meterware.servletunit.ServletUnitClient;

    import?junit.framework.TestCase;

    public?class?JSPCTest?extends?TestCase{
    ????
    private?InvocationContext?ic?=?null?;

    ????
    protected?void?setUp()?throws?Exception?{
    ????????ServletRunner?sr?
    =?new?ServletRunner();
    ???????????
    //?向環(huán)境中注冊 jsp
    ????????sr.registerServlet("HelloWorld",?MyJsp_jsp.class.getName());
    ????????ServletUnitClient??sc?
    =?sr.newClient();
    ????????WebRequest?request?
    =?new?GetMethodWebRequest("http://localhost/HelloWorld");
    ?????????ic?
    =?sc.newInvocation(request);

    ????}
    ????
    ????
    public?void?testJspC()?throws?Exception{
    ????????HttpServletRequest?re?
    =??ic?.getRequest();
    ????????HttpServletResponse?rq?
    =??ic.getResponse();
    ????????re.setAttribute(
    "name","liukaiyi");
    ????????re.setAttribute(
    "pass","123456");
    ????????
    ????????MyJsp_jsp?is?
    =?(MyJsp_jsp)?ic.getServlet();
    ????????is._jspService(re,rq);
    ????????
    ????????WebResponse?response?
    =?ic.getServletResponse();
    // 輸出
    ????????System.out.println(?response.getText()?);
    ????????
    ????}
    }

    結(jié)果是
    <html>
    ????
    ???????liukaiyi??
    <br>
    ???????123456?
    <br>
    ????
    ????
    </html>

    后面用 HttpUnit 和 HtmlUnit 測試就不用我說了把 網(wǎng)上一大把。




    posted @ 2007-11-02 17:11 G_G 閱讀(1235) | 評論 (0)編輯 收藏

    學習測試留個印


    測試 Servlet 使用:

    package ?jetty.test.supper;

    import ?java.io.File;

    import ?javax.servlet.http.HttpServletRequest;

    import ?jetty.LoginServlet;

    import ?com.meterware.httpunit.GetMethodWebRequest;
    import ?com.meterware.httpunit.WebConversation;
    import ?com.meterware.httpunit.WebRequest;
    import ?com.meterware.httpunit.WebResponse;
    import ?com.meterware.servletunit.InvocationContext;
    import ?com.meterware.servletunit.ServletRunner;
    import ?com.meterware.servletunit.ServletUnitClient;

    import ?junit.framework.TestCase;

    public ? class ?HttpUnitTest? extends ?TestCase?{
    ????
    public ? void ?ctestUrl() throws ?Exception{
    ????????System.out.println(
    " 直接獲取網(wǎng)頁內(nèi)容: " );
    ????????WebConversation?wc?
    = ? new ?WebConversation();
    ????????WebResponse?wr?
    = ?wc.getResponse(? " http://www.google.com " ?);
    ????????System.out.println(?wr.getText()?);
    ????}
    ????
    ????
    public ? void ?testRun1() throws ?Exception{
    ????????System.out.println(
    " 無參數(shù)測試: " );
    ????????
    // 建立服務(wù)器
    ????????ServletRunner?sr? = ? new ?ServletRunner( new ?File( " WebRoot\\WEB-INF\\test.xml " ));
    ????????
    // 模擬客戶端
    ????????ServletUnitClient?sc? = ?sr.newClient();
    ????????
    // URL?定位
    ????????WebRequest?request??? = ? new ?GetMethodWebRequest(? " http://localhost:7000/cactusDemo " ?);
    ????????WebResponse?response?
    = ?sc.getResponse(?request?);
    ????????
    // 運行
    ????????System.out.println(response.getText() + " \n " );
    ????}
    ????
    ????
    public ? void ?testRun2() throws ?Exception{
    ????????System.out.println(
    " Session?和?request?測試: " );
    ????????ServletRunner?sr?
    = ? new ?ServletRunner( new ?File( " WebRoot\\WEB-INF\\test.xml " ));
    ????????ServletUnitClient?sc?
    = ?sr.newClient();
    ????????WebRequest?request???
    = ? new ?GetMethodWebRequest(? " http://localhost/cactusDemo " ?);
    ????????
    // Parameter?加參?use?
    ????????request.setParameter( " use " , " web " );
    ????????
    ????????
    // 取出?Servlet?:?LoginServlet?方法準備執(zhí)行
    ????????InvocationContext?ic? = ?sc.newInvocation(?request?);
    ????????LoginServlet?se?
    = ?(LoginServlet)ic.getServlet();
    ????????HttpServletRequest?re?
    = ?ic.getRequest()?;

    ????????
    // request?session??加參?use?
    ????????re.setAttribute( " use " , " re " );
    ????????re.getSession(
    true ).setAttribute( " use " , " re " );

    ????????se.doGet(re,ic.getResponse());
    // 關(guān)鍵:運行測試方法
    ????????
    ????????
    // 獲取?out
    ????????WebResponse?response? = ?ic.getServletResponse();
    ????????System.out.println(response.getText());
    ????}
    }

    test.xml

    <? xml?version="1.0"?encoding="UTF-8" ?>
    < web-app? xmlns ="http://java.sun.com/xml/ns/j2ee" ?xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" ?version ="2.4" ?xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee???http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
    ??
    < servlet >
    ????
    < servlet-name > cactusDemo </ servlet-name >
    ????
    < servlet-class > jetty.LoginServlet </ servlet-class >
    ??
    </ servlet >

    ??
    < servlet-mapping >
    ????
    < servlet-name > cactusDemo </ servlet-name >
    ????
    < url-pattern > /cactusDemo </ url-pattern >
    ??
    </ servlet-mapping >
    </ web-app >


    測試 JSP:
    Cookbook 參考?
    不使用容器 進行 測試 jsp

    測試Struts:
    StrutsTestCase 參考?

    posted @ 2007-11-02 12:44 G_G 閱讀(1013) | 評論 (0)編輯 收藏

    僅列出標題
    共16頁: First 上一頁 6 7 8 9 10 11 12 13 14 下一頁 Last 
    主站蜘蛛池模板: 无码少妇一区二区浪潮免费| 国产中文字幕免费| 久久精品国产69国产精品亚洲| 2019亚洲午夜无码天堂| 亚洲AV无码一区二区三区久久精品| 最近高清中文字幕免费| 亚洲国产精品一区| 18禁无遮挡无码国产免费网站 | 成人免费乱码大片A毛片| 亚洲一区二区三区在线播放| 一级毛片免费在线播放| 成人免费网站在线观看| 亚洲精品中文字幕无码A片老| a级毛片在线免费观看| 四虎永久免费地址在线观看| 西西人体大胆免费视频| 中国亚洲女人69内射少妇| 亚洲日韩国产二区无码| 国产真人无遮挡作爱免费视频| 香港经典a毛片免费观看看| 奇米影视亚洲春色| 少妇无码一区二区三区免费| 国产AV无码专区亚洲AV漫画| 日韩免费在线观看视频| 亚洲国产精品成人久久| 曰批全过程免费视频播放网站 | 在线观看亚洲电影| 噼里啪啦电影在线观看免费高清 | 两个人日本免费完整版在线观看1| 亚洲国产精品成人久久 | 四虎影视在线永久免费看黄| 特a级免费高清黄色片| 亚洲av日韩综合一区在线观看| 97人妻无码一区二区精品免费| 亚洲AV成人一区二区三区观看 | 成人免费在线视频| 国产视频精品免费视频| 亚洲精品在线视频| 午夜爽爽爽男女免费观看影院| 亚洲一区二区无码偷拍| 亚洲人成色77777|