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

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

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

    千里馬

    天馬行空

    #

    jsp+javaBean

    1,什么是可重用組件:是指能夠完成某種特定的功能,并提供了一個或多個訪問接口的聚合模塊程序,可重復使用是它最大的特點。
      在java企業(yè)級開發(fā)中,最重要的兩類組件是javabean和EJB。
    javabean本質(zhì)就是一個java類,但是這個java類的組成必須符合一定的規(guī)則,這個規(guī)則也就是javabean規(guī)范,其中包括缺省的構造方法,setXXX和getXXXde風格來構造屬性等。他可以很容易的被組合到程序中去,一般包括業(yè)務邏輯代碼和數(shù)據(jù)訪問代碼等。jsp在使用他的時候可以用普通的java腳本實例化這個類,像其他java對象一樣使用,也可以使用jsp提供的動態(tài)標簽來訪問。
    EJB 相對于javabean來說是一個大得多的組件,他必須生存在符合javaee規(guī)范的應用服務器中,它的定義和調(diào)用都要復雜的多,在實際的java開發(fā)中很小使用EJB組件。
    2,javabean規(guī)范:
    (1),它是一個公開類(public class);
    (2),他有一個公開的無參數(shù) 的構造方法。
    (3),提供了公開的setXXX和getXXX方法來決定javabean的屬性,
    3,用jsp完成一種特定的功能時,有三種實現(xiàn)方式:
    (1),在html代碼中間夾雜java語言寫成的jsp腳本,功能邏輯就在java語言中完成。缺點是:代碼可讀性差,很難維護。
    (2),把功能邏輯包裝在一個javabean內(nèi),然后在jsp腳本中,用new關鍵字實例化這個javabean,在調(diào)用set和get方法來完成特定的功能,這種方式雖然維護比第一種好一些,但是可讀性仍然不好。
    (3),同樣先把功能邏輯包裝在一個javabean鐘,再利用jsp提供的動作標簽來訪問javabean的屬性,這種方式比第二種耦合度進一步降低了,是一種值得推薦的方式。
    4,jsp使用javabean的標簽詳解:
      (1),定義javabean的動作標簽<jsp:useBean>
            <jsp:useBean>標簽用于在特定的范圍內(nèi)實例化或查找一個javabean,基本語法如下:
             <jsp:useBean id="唯一標示名字"
                           scope="page|request|session|application";
                           type="父類型"
                            class="實現(xiàn)類">
          id:表示在特定范圍內(nèi)的唯一標示的名字;
          scope:指定bean的存活范圍,有4種:page:默認是page,標示jsp的頁面范圍,如果是同一個請求的另外一個jsp也頁面就不見了。request:當前這一次的請求范圍,包含多個jsp頁面;session:標示會話范圍;application:標示整個web應用,與servlet上下文同義。
         class:javabean的實例類名,必須是完整類名。
         type:javabean的父類或者一實現(xiàn)接口。
     <jsp:useBean>動作標簽的基本工作機制如下:
                (1),在指定范圍內(nèi)尋找是否已有名字為id屬性指定的對象。
                 (2),如果存在,且指定了type屬性,則用該type做一次強制類型轉換后再返回該對象的引用,如果沒用指定                     ,則直接返回該對象的引用。
                (3),如果不存在,則用class屬性指定的類實例化一個新的對象并返回,并將該對象保存到scope內(nèi)。
    (2),設置javabean屬性動作標簽<jsp:setProperty>
            <jsp:setProperty>:是為javabean的可寫屬性賦值,它既可以放在<jsp:useBean>中間,也可以單獨使用,基本語法如下:
             <jsp:setProperty
                   id="與javabean的屬性同名"
                   property="可寫屬性名"
                    value="字面值"
                      params="請求參數(shù)的名字"/>
           name:bean的id
           property:可寫屬性名,如setAge(),屬性名為age,如果是*,則表示將所有的屬性一一與請求參數(shù)按名匹配賦值。
           value:為屬性復字面值,
            params:http請求的參數(shù)名。
    3,獲取javabean屬性動作標簽<jsp:getProperty>
                  <jsp:getProperty>是獲取javabean的可讀屬性,它既可以放在<jsp:useBean>中間,也可以單獨使用,基本語法如下:           <jsp:getProperty
                           name="與javabean的id屬性值相同"
                           property="可讀屬性名">
    4,javaBean封裝數(shù)據(jù)庫操作的代碼如下:
        private static final String url="jdbc:mysql://localhost:3306/test";
         private static final String username="root";
          private static final String  password="123";
           private String table;
           private Object[] params;
           public Connection getCon(){
            Connection conn=null;
            try {
       Class.forName("com.mysql.jdbc.Driver");
       conn=DriverManager.getConnection(url, username, password);
      } catch (Exception e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      return conn;
           }
           public void close(Connection conn,Statement st,ResultSet rs){
            if(rs!=null){
             try {
        rs.close();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
            }
            if(st!=null){
             try {
        st.close();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
            }
            if(conn!=null){
             try {
        conn.close();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
            }
           }
     public String getTable() {
      return table;
     }
     public void setTable(String table) {
      this.table = table;
     }
     public Object[] getParams() {
      return params;
     }
     public void setParams(Object[] params) {
      this.params = params;
     }
    5,javaBean封裝添加數(shù)據(jù)操作:
         public boolean getInsertData(){
      //Æ´½ÓsqlÓï¾ä
      String sql="insert into "+table+" values(";
      for (int i = 0; i <params.length; i++) {
       sql+="?";
       if(i!=params.length-1){
        sql+=",";
       }
      }
      sql+=")";
      boolean rst=false;//¶¨Òå²Ù×÷½á¹û
      Connection conn=null;//¶¨ÒåÁ¬½Ó¶ÔÏó
      PreparedStatement pst=null;//¶¨Òå»á»°¶ÔÏó
      
      try {
       conn=this.getCon();//»ñÈ¡Êý¾Ý¿âÁ¬½Ó
       conn.setAutoCommit(false);//¹Ø±Õ×Ô¶¯Ìá½»
       pst=conn.prepareStatement(sql);//´´½¨»á»°
       //Ñ­»·ÉèÖòÎÊý
       for (int i = 0; i < params.length; i++) {
        pst.setObject(i+1,params[i]);
       }
       int num=pst.executeUpdate();//Ö´ÐÐsqlÓï¾ä
       conn.commit();//Ìá½»ÊÂÎñ
       //Èç¹ûÖ´Ðнá¹û´óÓÚ0 £¬´ú±íÖ´Ðгɹ¦
       if(num>0){
        rst=true;
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       if(conn!=null){
        try {
         conn.rollback();//»Ø¹öÊÂÎñ
        } catch (SQLException e1) {
         // TODO Auto-generated catch block
         e1.printStackTrace();
        }
       }
       e.printStackTrace();
      }finally{
       close(conn,pst,null);//¹Ø±ÕÁ¬½Ó
      }
      return rst;
     }
    6,javabean封裝刪除數(shù)據(jù)操作:
    public boolean getDeleteData(){
      String sql="delete from "+table+" where "+params[0]+" =?";
      boolean rst=false;
      Connection conn=null;
      PreparedStatement ps=null;
     
      try {
       conn=this.getCon();
       conn.setAutoCommit(false);
       ps=conn.prepareStatement(sql);
       ps.setObject(1,params[1]);
       int num=ps.executeUpdate();
       conn.commit();
       if(num>0){
        rst=true;
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }finally{
       close(conn,ps,null);
      }
      return true;
     }   
    7,javabean封裝修改數(shù)據(jù)操作:
    public boolean getModifyData(){
      String sql="update "+table+" set "+params[0]+" =? where "+params[2]+"=?";
      boolean rst=false;
      Connection conn=null;
      PreparedStatement ps=null;
      
      try {
       conn=this.getCon();
       conn.setAutoCommit(false);
       ps=conn.prepareStatement(sql);
       ps.setObject(1,params[1]);
       ps.setObject(2,params[3]);
       int num=ps.executeUpdate();
       conn.commit();
       if(num>0){
        rst=true;
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }finally{
       close(conn,ps,null);
      }
      return rst;
     }
    8,javabean封裝查詢數(shù)據(jù)操作:
    private Connection conn=null;
     private PreparedStatement ps=null;
     private ResultSet rs=null;
     public void setQuery(String sql){
      
      try {
       conn=this.getCon();
       ps=conn.prepareStatement(sql);
       rs=ps.executeQuery();
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
     public List getList(){
      List list=new ArrayList();
      try {
       while(rs.next()){
        String str="";
        for (int i = 0; i <params.length; i++) {
         str +=rs.getObject(params[i].toString());
         if(i!=params.length){
          str +=",";
         }
         list.add(str);
        }
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } finally{
       this.close(conn,ps, rs);
      }
      return list;
     }
    9,分頁技術:邏輯分頁和物理分頁
          邏輯分頁:查詢sql語句不變,只不過通過java代碼從邏輯上控制結果集光標的位置,從而實現(xiàn)分頁;
         物理分頁:改變sql語句,在數(shù)據(jù)庫查詢的時候只需取出需要的結果集,但是各個數(shù)據(jù)庫控制結果集的sql語句不一樣,;mysql:limit,orcale:rownum
       兩種分頁技術各有優(yōu)缺點:邏輯分頁效果低,但是程序容易控制,但不能跨數(shù)據(jù)庫。
    10,邏輯分頁:邏輯分頁的關鍵點在于根據(jù)當前的節(jié)點去定位結果集的下標位置,把下標定位好以后,就知道它是否有下一頁和上一頁信息等。
    實現(xiàn)邏輯分頁的步驟:(1),確定每頁的最大記錄數(shù)。(2),查詢總共記錄數(shù)。(3),根據(jù)總記錄數(shù)和每頁最大記錄數(shù)確定最大頁碼。(4)查詢結果集。(5),根據(jù)每頁最大記錄數(shù)和當前頁碼對結果集的下表進行定位。(6),不超過最大記錄數(shù)的循環(huán)打印結果集。
    11,物理分頁的實現(xiàn)思想還是需要確定每頁的最大記錄數(shù)、當前頁碼、最大頁碼、總記錄數(shù)的信息,但是它把結果集下標定位交個數(shù)據(jù)庫來完成了,開發(fā)者需要做的就是把sql寫好。
       對于mysql數(shù)據(jù)庫,需要開發(fā)者熟悉他的limit語句,limit語句需要追加到查詢語句的后面,告訴sql只返回規(guī)定行數(shù)的記錄,基本語法如下:
           limit n #返回前 n行數(shù)據(jù)
          limit n,m #返回從n+1行開始,最多m行的數(shù)據(jù)。

    posted @ 2012-05-22 12:13 Mr Lee 閱讀(890) | 評論 (0)編輯 收藏

    servlet重點

     1,開發(fā)一個servlet大致需要的步驟:
       (1),編寫servlet源碼并編譯。
        (2),在web.xml進行相應的配置。
         (3),將包含該servlet的web應用程序部署到web容器里,并啟動web容器。
           (4),通過瀏覽器訪問該servlet。
    2,servlet 的四個周期: 加載,初始化(init()),提供服務(service()),銷毀(detory())
    3,get的請求方式會把請求的參數(shù)追加到請求的url后面,首先在url的后面加一個?,然后使用"參數(shù)名=參數(shù)值",的形式追加參數(shù)。
      post請求方式則是把請求的參數(shù)放在請求的正文里,不能直接通過url看到。,
    4,獲取客戶端參數(shù)的兩種方式:getParament()(只有一哥 參數(shù))和getParamentValues()(用于多值的參數(shù))
    例子:
     String username= request.getParament("username")
    String[] hobbies=request.getParamentValues("hobby");
    5,cookie:記錄在客戶端瀏覽器的數(shù)據(jù),它的格式是“名-值”對,一般可以通過cookie保存一些用戶的數(shù)據(jù),如,登錄名,密碼等。
    java web容器會在用戶第一次請求的時候在瀏覽器的cookie里加入 一條名為“jsessionid”的數(shù)據(jù),同樣web容器也有。以后的每次請求瀏覽器都會把cookie的值傳回到服務器端,所以服務器就會根據(jù)‘jsessionid’的值跟蹤一個用戶了。瀏覽器關閉,跟蹤結束。(回話的時間是有限制的)
    6,servlet轉發(fā)一個http請求分為直接轉發(fā)和間接轉發(fā)。
     間接轉發(fā)本質(zhì)是兩次http請求,服務器端在響應第一次請求的時候,讓瀏覽器再向另外一個url發(fā)送,從而達到轉發(fā)的目的。
    直接轉發(fā)是瀏覽器只發(fā)出一次請求,servlet把請求轉發(fā)給servlet,Html,jsp或其他信息資源,有第二個信息資源響應該請求,在請求對象request中保存的對象對于每個信息資源都是共享的。
    web應用程序大多會有一個控制器,由控制器來控制請求應該轉發(fā)給那個信息資源,然后有信息資源處理請求,處理我完后還可能轉發(fā)給另外的信息資源返回給用戶,這個過程既是經(jīng)典的MVC模式。
    7,過濾器:就是在目標資源和源頭資源之間起到過濾作用的一個東西。對于web應用程序來說,過濾器是處于服務器端的,隊請求消息和響應消息進行過濾的一中組件。
    過濾器是一種重要的設計模式,不僅引用在javaweb開發(fā)中,其他開發(fā)領域也會應用到過濾器模式,他可以在不侵入原有代碼的基礎上為他們提供一些功能。
    8,java web 應用程序的范圍模型。
    request:請求 代表了一次http請求,他的生命周期從請求開始知道請求的響應結束。中間可能會穿插多個信息資源,如過濾器,                   servlet,jsp。
    Session  會話,代表了一次會話,也可認為代表了一個用戶,一個會話里可以包含多次的請求。如果用戶長時間不發(fā)出請求,可能導致會話超時而過期,超時時長可以設置。因為它代表一個用戶,所以一般使用session保存用戶的數(shù)據(jù),如購物車。
    application :應用  他的生命周期從web 容器啟動或部署該應用開始,一web 容器停止,或取消部署而結束。他的作用范圍最大,一般用于存放應用標題,或其他外部資源連接器等。
    9,監(jiān)聽器體現(xiàn)了一種監(jiān)聽事件模型。
      三種事件監(jiān)聽:1,request事件監(jiān)聽實現(xiàn)接口(ServltRequestListener)
                   2,session事件監(jiān)聽接口(HttpSessionListener)
                   3,application事件監(jiān)聽接口(ServletContextListener)
    10,forward和redirect的區(qū)別:
    forward是直接轉發(fā),通過request調(diào)用
    redirect是間接轉發(fā),通過response調(diào)用
    forward在服務端的內(nèi)部發(fā)生,對于客戶端來說是不可見的,即使請求在服務器端的各個資源間轉發(fā)過多次,客戶端瀏覽器的地址欄的地址依然是最初的請求地址,redirect則相反,他的請求轉發(fā)實質(zhì)是向客戶端發(fā)送一條請求另一個地址的結果,瀏覽器會修改地址欄的地址,再重新發(fā)一次新的請求,對于客戶端來說是可見的。
    11,
     Servlet體系結構和層次結構 

    1,Servlet體系結構       

      

                ------請求   --->                            ------->                              ------->                       

    客戶端                              HTTP服務器                    Servlet容器                        Servlet   

                 <----- 響應  ----                            <---------                          <-------         

                   

    2,Servlet層次結構   

    Servlet是實現(xiàn)javax.servlet.Servlet接口的對象,大多數(shù)Servlet通過GenericServlet或HttpServlet進行擴展.   Servlet API 由兩個程序包組成  

     javax.servlet  包  

    類:     

    ServletInputStream類:從客戶端讀取二進制數(shù)據(jù);     

    ServletOutputStream類;向客戶端發(fā)送二進制數(shù)據(jù);     

    GenericServlet類:抽象類,定義了一個通用的,獨立于底層協(xié)議的Servlet。

       接口:    

     Servlet接口:管理Sevlet。定義實現(xiàn)Servlet的必須方法。一個Servlet必須實現(xiàn)Servlet接口或Servlet接口的擴展。     

    ServletConfig接口:Servlet初始化時,向Servlet傳遞配置信息。     

    ServletContext接口;Servlet上下文,使Servlet與其他的Servlet容器進行交互通信。    

     ServletRequest接口:向Servlet客戶端提供請求信息     

    ServletResponse接口;Servlet向客戶端提供響應信息。        

    javax.servlet.http     包

    類:     

     Cookie類      

    HttpServlet類:抽象類,繼承自GenericServlet。應用于HTTP協(xié)議的請求和響應的Servlet。    

     接口:     

     HttpSession接口:     

     HttpAttributeListener接口:會話的屬性監(jiān)聽接口;     

     HttpServletRequest接口;擴展ServletRequest接口,向Servlet客戶端提供HTTP請求信息。    

     HttpServletResponse接口;擴展ServletResponse接口,Servlet向客戶端提供HTTP響應信息。   

      總體可以分為:  

     Servlet類:     實現(xiàn)具體協(xié)議的業(yè)務類,其目的是一個業(yè)務實現(xiàn)的WEB組件類;   

    Servlet接口:     該接口獨立于協(xié)議實現(xiàn),其目的是為了定義服務器的組件標準;   

    GenericServlet抽象類:     該類提供了一個獨立于協(xié)議的實現(xiàn),其目的是為了滿足服務器;   

    HttpServlet:     該類實現(xiàn)了HTTP協(xié)議,其目的是為了讓客戶程序擴展;

    posted @ 2012-05-13 18:06 Mr Lee 閱讀(620) | 評論 (0)編輯 收藏

    jdbc連接數(shù)據(jù)庫步驟

  • JDBC連接數(shù)據(jù)庫  
  • •創(chuàng)建一個以JDBC連接數(shù)據(jù)庫的程序,包含7個步驟:  
  • 1加載JDBC驅(qū)動程序:  
  •     在連接數(shù)據(jù)庫之前,首先要加載想要連接的數(shù)據(jù)庫的驅(qū)動到JVM(Java虛擬機),  
  •     這通過java.lang.Class類的靜態(tài)方法forName(String  className)實現(xiàn)。  
  •     例如:  
  •     try{  
  •     //加載MySql的驅(qū)動類  
  •     Class.forName("com.mysql.jdbc.Driver") ;  
  •     }catch(ClassNotFoundException e){  
  •     System.out.println("找不到驅(qū)動程序類 ,加載驅(qū)動失敗!");  
  •     e.printStackTrace() ;  
  •     }  
  •    成功加載后,會將Driver類的實例注冊到DriverManager類中。  
  • 2、提供JDBC連接的URL  
  •    •連接URL定義了連接數(shù)據(jù)庫時的協(xié)議、子協(xié)議、數(shù)據(jù)源標識。  
  •     •書寫形式:協(xié)議:子協(xié)議:數(shù)據(jù)源標識  
  •     協(xié)議:在JDBC中總是以jdbc開始  
  •     子協(xié)議:是橋連接的驅(qū)動程序或是數(shù)據(jù)庫管理系統(tǒng)名稱。  
  •     數(shù)據(jù)源標識:標記找到數(shù)據(jù)庫來源的地址與連接端口。  
  •     例如:(MySql的連接URL)  
  •     jdbc:mysql:  
  •         //localhost:3306/test?useUnicode=true&characterEncoding=gbk ;  
  •    useUnicode=true:表示使用Unicode字符集。如果characterEncoding設置為  
  •    gb2312或GBK,本參數(shù)必須設置為true 。characterEncoding=gbk:字符編碼方式。  
  • 3創(chuàng)建數(shù)據(jù)庫的連接  
  •     •要連接數(shù)據(jù)庫,需要向java.sql.DriverManager請求并獲得Connection對象,  
  •      該對象就代表一個數(shù)據(jù)庫的連接。  
  •     •使用DriverManager的getConnectin(String url , String username ,   
  •     String password )方法傳入指定的欲連接的數(shù)據(jù)庫的路徑、數(shù)據(jù)庫的用戶名和  
  •      密碼來獲得。  
  •      例如:  
  •      //連接MySql數(shù)據(jù)庫,用戶名和密碼都是root  
  •      String url = "jdbc:mysql://localhost:3306/test" ;   
  •      String username = "root" ;  
  •      String password = "root" ;  
  •      try{  
  •     Connection con =   
  •              DriverManager.getConnection(url , username , password ) ;  
  •      }catch(SQLException se){  
  •     System.out.println("數(shù)據(jù)庫連接失敗!");  
  •     se.printStackTrace() ;  
  •      }  
  • 4、創(chuàng)建一個Statement  
  •     •要執(zhí)行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3 
  •      種類型:  
  •       1、執(zhí)行靜態(tài)SQL語句。通常通過Statement實例實現(xiàn)。  
  •       2、執(zhí)行動態(tài)SQL語句。通常通過PreparedStatement實例實現(xiàn)。  
  •       3、執(zhí)行數(shù)據(jù)庫存儲過程。通常通過CallableStatement實例實現(xiàn)。  
  •     具體的實現(xiàn)方式:  
  •         Statement stmt = con.createStatement() ;  
  •        PreparedStatement pstmt = con.prepareStatement(sql) ;  
  •        CallableStatement cstmt =   
  •                             con.prepareCall("{CALL demoSp(? , ?)}") ;  
  • 5執(zhí)行SQL語句  
  •     Statement接口提供了三種執(zhí)行SQL語句的方法:executeQuery 、executeUpdate  
  •    和execute  
  •     1、ResultSet executeQuery(String sqlString):執(zhí)行查詢數(shù)據(jù)庫的SQL語句  
  •         ,返回一個結果集(ResultSet)對象。  
  •      2int executeUpdate(String sqlString):用于執(zhí)行INSERT、UPDATE或  
  •         DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等  
  •      3、execute(sqlString):用于執(zhí)行返回多個結果集、多個更新計數(shù)或二者組合的  
  •         語句。  
  •    具體實現(xiàn)的代碼:  
  •           ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;  
  •     int rows = stmt.executeUpdate("INSERT INTO ...") ;  
  •     boolean flag = stmt.execute(String sql) ;  
  • 6處理結果  
  •     兩種情況:  
  •      1、執(zhí)行更新返回的是本次操作影響到的記錄數(shù)。  
  •      2、執(zhí)行查詢返回的結果是一個ResultSet對象。  
  •     • ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法提供了對這些  
  •       行中數(shù)據(jù)的訪問。  
  •     • 使用結果集(ResultSet)對象的訪問方法獲取數(shù)據(jù):  
  •      while(rs.next()){  
  •          String name = rs.getString("name") ;  
  •     String pass = rs.getString(1) ; // 此方法比較高效  
  •      }  
  •     (列是從左到右編號的,并且從列1開始)  
  • 7關閉JDBC對象   
  •      操作完成以后要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲  
  •      明順序相反:  
  •      1、關閉記錄集  
  •      2、關閉聲明  
  •      3、關閉連接對象  
  •           if(rs != null){   // 關閉記錄集  
  •         try{  
  •             rs.close() ;  
  •         }catch(SQLException e){  
  •             e.printStackTrace() ;  
  •         }  
  •           }  
  •           if(stmt != null){   // 關閉聲明  
  •         try{  
  •             stmt.close() ;  
  •         }catch(SQLException e){  
  •             e.printStackTrace() ;  
  •         }  
  •           }  
  •           if(conn != null){  // 關閉連接對象  
  •          try{  
  •             conn.close() ;  
  •          }catch(SQLException e){  
  •             e.printStackTrace() ;  
  •          }  
  •           } 
  • posted @ 2012-05-08 13:55 Mr Lee 閱讀(381) | 評論 (0)編輯 收藏

    僅列出標題
    共2頁: 上一頁 1 2 

    My Links

    Blog Stats

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章檔案

    (hibernate)http://www.tkk7.com/dyllove98/archive/2012/05/12/377959.html

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线综合亚洲欧洲综合网站 | 亚洲AV日韩AV永久无码久久 | 亚洲av日韩av无码黑人| 99精品免费视品| 久久99亚洲综合精品首页 | 在线视频观看免费视频18| 亚洲自偷精品视频自拍| 最近免费中文字幕大全免费版视频 | 亚洲欧美国产日韩av野草社区| 和日本免费不卡在线v| 性xxxx黑人与亚洲| 四虎影院在线免费播放| 亚洲国产成人AV网站| 国产v片免费播放| 一本大道一卡二大卡三卡免费| 国产亚洲老熟女视频| a级毛片毛片免费观看永久| 亚洲AV成人无码久久精品老人| 88xx成人永久免费观看| 亚洲日本va在线观看| 免费看国产曰批40分钟| 国产精品美女久久久免费| 亚洲大片在线观看| 国产va免费精品观看精品| 国产成人亚洲精品无码AV大片| 91麻豆国产自产在线观看亚洲| 午夜视频在线免费观看| 在线观看日本亚洲一区| 亚洲成人高清在线| 免费无码又爽又刺激高潮视频| 中文字幕亚洲情99在线| 久久精品国产亚洲AV不卡| 99久久久国产精品免费蜜臀| 亚洲乱码日产精品一二三| 国产亚洲精品自在线观看| 成年人网站免费视频| 一级做a爰片久久毛片免费陪| 亚洲邪恶天堂影院在线观看| 午夜dj免费在线观看| 97无码人妻福利免费公开在线视频 | 1区2区3区产品乱码免费|