狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

Struts與Hibernate協同工作

Struts與Hibernate協同工作

更新時間:2020-01-02 文章作者:未知 信息來源:網絡 閱讀次數:

  安裝篇

  一,下載安裝 j2sdk1.4(www.sun.com))或以上,設置 CLASSPATH,java_home。

  二,下載服務器,免費版本的有 tomcat,resin,當然也還有 weblogic之類的巨無霸,不過得看你電腦的配置是否承受的了!

  這里只以resin來說明,其他的配置都差不多,可以查看各個服務器自帶的說明文件。

  resin 服務器可以在 caucho.com下載,選擇合適的版本,下載解壓縮就可以直接使用。

  這里resin有一個 resin-ee版本,這個主要是帶ejb功能支持的。 如果用不到ejb,一般的就足夠了。
  三,然后就是數據庫,有很多數據庫產品可以選擇,DB2,Oracle,MSSQL,MySQL等等太多了。這里我選擇MySQL,不僅因為它是免費的,而且它的4.0版本在繼承以前版本的快速穩定的基礎上,整合了InnoDB(http://www.innodb.com)先進的事務處理機制。相信伴隨著Linux的壯大,它將在商業數據庫市場占的一席之地。不過就數據庫本身,它還缺少子查詢等強大功能的支持。
  安裝就不多說了,配置好用戶名,密碼。 然后就可以下載 MySQL-Front 來可視化操作數據庫。

  四,在Java編程上,一個IDE的功能顯然不可缺少,現在流行的IDE很多,有JBuilder,Eclipse,IntellJ IDEA,JCreator等等,其中 eclipse借著開源東風,依靠強大的插件功能被譽為最有前途的工具,JBuilder從來都最強大功能的java工具,不過大到我的電腦實在運行不了,窮啊,可沒錢配新電腦。所以我還是喜歡JCreator,小巧而又功能不俗,應付小規模的應用綽綽有余。編譯開發時要想獲得提示支持,需要在 configure--option--JDK Profiles 導入jar文件。

  五,一個站點前臺的界面開發,當然離不開大名鼎鼎的 Dreamweaver 了,它支持jsp,asp等很多語言的開發。特別是最近的Dreamweaver MX 2004 增強了站點的功能,可以方便的對一個站點進行控制。面對struts的前臺自定義標簽,有一個mxp插件可以用來支持顯示sturts的標簽。使用前還要在編輯--標簽庫 里面導入.tld文件,目前只支持html,和bean 兩個標簽。

  配置篇

  一,resin虛擬站點配置

  <host id='yourweb:8080' app-dir='e:\blog\' class-update-interval='2'>
 。紈eb-app id='/'>
 。糳irectory-servlet id='false'/>
 。/web-app>
  <error-log id='log/web-error.log'/>
  <host>

  然后在定義的目錄下面建立站點。

  二,Dreamweaver站點的配置就不多說了。

  三,Struts的配置

  這里我們使用的是struts1.1,下載并解壓縮到臨時文件夾,就假設是tem文件夾吧。

  首先拷貝tem/lib/下面所有的.tld文件到站點的/WEB-INF/目錄下,再拷貝所有的.jar文件到/WEB-INF/lib/目錄下,最后web.xml文件中的配置差不多如下:

  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

 。紈eb-app>

 。約ervlet>
 。約ervlet-name>action</servlet-name>
 。約ervlet-class>org.apache.struts.action.ActionServlet</servlet-class>
 。糹nit-param>
 。紁aram-name>config</param-name>
  <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
 。糹nit-param>
 。紁aram-name>debug</param-name>
 。紁aram-value>2</param-value>
  </init-param>
 。糹nit-param>
 。紁aram-name>detail</param-name>
 。紁aram-value>2</param-value>
 。/init-param>
 。糽oad-on-startup>2</load-on-startup>
  </servlet>

 。約ervlet-mapping>
 。約ervlet-name>action</servlet-name>
 。紆rl-pattern>*.do</url-pattern>
  </servlet-mapping>


 。!-- The Usual Welcome File List -->
 。紈elcome-file-list>
 。紈elcome-file>index.jsp</welcome-file>
  </welcome-file-list>


 。!-- Struts Tag Library Descriptors -->
 。紅aglib>
 。紅aglib-uri>/tags/struts-bean</taglib-uri>
  <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
 。/taglib>

 。紅aglib>
 。紅aglib-uri>/tags/struts-html</taglib-uri>
  <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
 。/taglib>

 。紅aglib>
  <taglib-uri>/tags/struts-logic</taglib-uri>
  <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
 。/taglib>

 。紅aglib>
 。紅aglib-uri>/tags/struts-nested</taglib-uri>
  <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
 。/taglib>

 。紅aglib>
 。紅aglib-uri>/tags/struts-tiles</taglib-uri>
  <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
  </taglib>

 。/web-app>

  四,Hibernate配置

  下載并拷貝/lib目錄下的

  hibernate2.jar
  commons-beanutils.jar
  commons-collections.jar
  commons-dbcp.jar
  commons-lang.jar
  commons-logging.jar
  commons-pool.jar
  dom4j.jar
  cglib-asm.jar
  connector.jar

  到應用站點的/lib目錄下。接下來配置 hibernate.cfg.xml文件

  <?xml version='1.0' encoding='utf-8'?>
 。!DOCTYPE hibernate-configuration
  PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
 。糷ibernate-configuration>
 。約ession-factory>

  <property name="hibernate.connection.url">
  jdbc:mysql://localhost:3306/yourdatabase
  </property>
 。紁roperty name="hibernate.connection.driver_class">
  org.gjt.mm.mysql.Driver
 。/property>
 。紁roperty name="hibernate.connection.username">
  yourname
 。/property>
 。紁roperty name="hibernate.connection.password">
  youyrpassword
  </property>

 。!?- 是否將運行期生成的SQL輸出到日志以供調試-->
 。紁roperty name="show_sql">false</property>

 。!--dialect ,每個數據庫都有其對應的Dialet以匹配其平臺特性-->
 。紁ropertyname="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
 。!?- 事務管理類型,這里我們使用JDBC Transaction -->
 。紁roperty name="transaction.factory_class">
  net.sf.hibernate.transaction.JDBCTransactionFactory</property>

 。紁roperty name="jdbc.batch_size">10</property>
 。紁roperty name="jdbc.use_scrollable_resultset">true</property>

  <!?映射文件配置,注意配置文件名必須包含其相對于根的全路徑-->
 。糾apping resource="net/seerlog/hbm/Cat.hbm.xml"/>

 。/session-factory>

  </hibernate-configuration>

  以上配置了數據庫連接所用的地址和用戶名,密碼等。具體參數的含義請參考官方文檔。

  映射文件的內容可以手工來寫,也可通過一些工具來自動生成。

  整個需要兩種文件: .hbm.xml配置文件 和 .java持久化對象 , 兩者是相互關聯的,.hbm.xml 對數據庫的映射還需要 .java這個bean來操作。所以整個過程需要首先設計好數據庫,然后根據數據庫導出 .hbm.xml文件 ,然后再導出 .java 文件。 有很多工具可以實現這個工程,我們這里采用 Middlegen-Hibernate來實現 數據庫到.hbm.xml文件的轉化,用Hibernate-Extension工具包中的 hbm2java 來實現 .hbm.xml 到 .java 文件的轉化!  

  查找關鍵字”!ENTITY”,得到:

 。!DOCTYPE project [
  <!ENTITY database SYSTEM
  "file:./config/database/hsqldb.xml">
  ]>

  b) Application name

 。紁roperty name="name" value="airline"/>

  c) 輸出目錄

  查找關鍵字“name="build.gen-src.dir"”,得到:

  <property name="build.gen-src.dir" value="${build.dir}/gen-src"/>

  d) 對應代碼的Package name

 。糷ibernate
  destination="${build.gen-src.dir}"
  package="${name}.hibernate"
  genXDocletTags="false"
  genIntergratedCompositeKeys="false"
  javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
  />


  配置完成后,在MiddleGen 根目錄下運行ant,就將出現MiddleGen的界面:

  選擇需要的表,單擊窗口頂部的Generate 按鈕,MiddleGen 即為我們生成這些數據庫表所對應的Hibernate映射文件。

  接下來的工作通過Hibernate Extension 來完成,Hibernate Extension 的tools\bin目錄下包含三個工具:

  1. hbm2java.bat

  根據映射文件生成對應的POJO。通過MiddleGen 我們已經得到了映射文件,下一步就是通過hbm2java.bat工具生成對應的POJO。

  2. class2hbm.bat

  根據POJO class 生成映射文件,這個工具很少用到,這里也就不再詳細介紹。

  3. ddl2hbm.bat

  由數據庫導出庫表結構,并生成映射文件以及POJO。這個功能與MiddleGen的功能重疊,但由于目前還不夠成熟(實際上已經被廢棄,不再維護),提供的功能也有限,所以我們還是采用MiddleGen生成映射文件,之后由hbm2java根據映射文件生成POJO 的方式。

  這里我們使用第一個hbm2java.bat,利用剛才生成的.hbm.xml文件自動生成 java 文件。

  為了使用這個工具,首先我們需要配置一些參數,打開tools\bin\setenv.bat 文件,修改其中的JDBC_DRIVER和HIBERNATE_HOME環境變量,使其指向我們的實際JDBC Driver文件和Hibernate所在目錄。同時檢查一下環境變量CP中的各個項目中是否實際存在,特別是%CORELIB%下的jar文件,某些版本的發行包中,默認配置中的文件名與實際的文件名有所出入(如%CORELIB%\commons-logging.jar, 在Hibernate 發行包中,可能實際的文件名是commons-logging-1.0.3.jar,諸如此類)。

  使用hbm2java,根據MiddleGen生成的映射文件生成Java 代碼:

  打開Command Window,在tools\bin目錄下執行:

  hbm2java c:\sample\org\hibernate\sample\*.xml --output=c:\sample\

  通過以上步驟我們就生成了所需要的所有基本配置文件。接下來就可以來初始化這些配置啦。

    實戰篇

  在這一節我們要配置一個完整的應用配置。其實每一個單獨拿出來都能寫本書,不過我只是側重對自己總結,在以后我會不斷地把學習的經驗教訓寫下來。

  一,Log4j 的初始化

  配置log4j.properties


  ### direct log messages to stdout ###
  #log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  #log4j.appender.stdout.Target=System.out
  #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  %c{1}:%L - %m%n
  #log4j.appender.stdout.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n
  log4j.logger.seerlog=DEBUG,A2
  log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
  log4j.appender.A2.file=d:\\log\\applog.txt
  log4j.appender.A2.DatePattern='.'yyyy-MM-dd
  log4j.appender.A2.layout=org.apache.log4j.PatternLayout
  log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %m%n

  #log4j.logger.ALL=DEBUG,A1
  log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
  log4j.appender.A1.file=d:\\log\\all.log
  log4j.appender.A1.DatePattern='.'yyyy-MM-dd
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n

  ### direct messages to file hibernate.log ###
  #log4j.appender.file=org.apache.log4j.FileAppender
  #log4j.appender.file.File=hibernate.log
  #log4j.appender.file.layout=org.apache.log4j.PatternLayout
  #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

  ### set log levels - for more verbose logging change 'info' to 'debug' ###

  ###log4j.rootLogger=warn, stdout
  log4j.rootLogger=info, A1

  #以下是hibernate API需要的配置

  log4j.logger.net.sf.hibernate=info

  ### log just the SQL
  #log4j.logger.net.sf.hibernate.SQL=debug

  ### log JDBC bind parameters ###
  log4j.logger.net.sf.hibernate.type=info

  ### log schema export/update ###
  log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug

  ### log cache activity ###
  #log4j.logger.net.sf.hibernate.cache=debug

  ### enable the following line if you want to track down connection ###
  ### leakages when using DriverManagerConnectionProvider ###
  #log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trac


  配置后如下來調用,首先需要初始化配置文件,這個過程只需要一次,所以我們可以在ServletContextListener中來進行。


  String prefix = context.getRealPath("/");
  PropertyConfigurator.configure(prefix+"/WEB-INF/classes/log4j.properties");


  這里需要你的配置文件的路徑來初始化。

  初始化完成后,我們在以后的action中就可以 象下面一樣來調用:


  static Logger log=Logger.getLogger("seerlog");
  log.warn("it's log4j warn");
  log.info("it's log4j info");


  關于 log4j 的完全使用方法,偶會在以后做詳細的說明!

  二,hibernate 的初始化

  首先我們要把hibernate.cfg.xml 放到應用的 classes 目錄中,然后可以使用hibernate參考文檔提供的例子來封裝對后臺的使用。


  public class Hi{

  private static final SessionFactory sessionFactory;
  private static Connection conn;
  static {
  try {
  sessionFactory = new Configuration().configure().buildSessionFactory();
  } catch (HibernateException ex) {
  throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
  }
  }

  public static final ThreadLocal session = new ThreadLocal();
  public static Session getSession() throws HibernateException {
  Session s = (Session) session.get();
  // 假如沒有一個可用的線程,開啟一個新 Session,
  if (s == null) {
  conn=DBConnectionManager.getConnection();
  s = sessionFactory.openSession(conn);
  session.set(s);
  }
  return s;
  }

  public static void closeSession() throws HibernateException {
  Session s = (Session) session.get();
  session.set(null);
  if (s != null)
  s.close();
  if(conn!=null)
  DBConnectionManager.returnConnection(conn);
  }
  }


  文中DBConnectionManager.getConnection()是一個DAO類,提供連接池的實現。

  我們使用這個con連接來創建一個 session ,sission是一個數據庫連接操作的會話周期,它提供了強大的管理數據的能力。

  以后我們在action的 execute 方法中就可以使用 Hi.getSession()來獲得一個會話支持。典型的應用如下:


  try{
  //開啟一個會話,并啟動事務回滾能力
  Session session = Hi.getSession();
  Transaction tx= session.beginTransaction();

  //查詢數據庫,使用HQL
  Query q = session.createQuery("from Topic as topic order by topic.id desc");
  q.setFirstResult(0);
  q.setMaxResults(5);

  //得到一個List類型的數據
  List newTopicList = q.list();

  // 業務處理
  NewTopicList ntlBean=new NewTopicList();
  ntlBean.setList(newTopicList);
  req.setAttribute("newtopiclist",ntlBean);

  //事務提交,記得關閉會話!
  tx.commit();
  Hi.closeSession();

  }//因為整個會話會拋出異常,所以需要用try--catch來包裹
  catch(HibernateException e){

  //日志記錄
  Log.error(e.toString());
  }


  其中的HQL 可以參考 hibernate 官方文檔來學習。
   三,Struts

  struts 的配置文件 struts-config.xml 放在 應用的 /WEB-INF/目錄下面,大致的配置如下

  <?xml version="1.0" encoding="ISO-8859-1" ?>
 。!DOCTYPE struts-config PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
  "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
 。約truts-config>

 。糵orm-beans>
  <form-bean name="loginForm" type="net.seerlog.vo.LoginForm"/>
  <form-bean name="replyForm" type="net.seerlog.vo.ReplyForm"/>
 。/form-beans>

 。糶lobal-forwards>
 。糵orward name="index" path="/first.jsp"/>
  </global-forwards>

 。糰ction-mappings>

 。糰ction path="/login" type="net.seerlog.action.LoginAction" scope="request" name="loginForm" input="/login.jsp">
 。糵orward name="success" path="/success.jsp"/>
  </action>

 。糰ction path="/blog" type="net.seerlog.action.BlogAction" scope="request">
 。糵orward name="success" path="/sublog.jsp"/>
 。/action>

  <action path="/topic" type="net.seerlog.action.TopicAction" scope="request">
 。糵orward name="success" path="/sutopic.jsp"/>
 。/action>

  <action path="/posttopic" type="net.seerlog.action.PostTopicAction" scope="request" >
 。/action>

 。糰ction path="/postreply" type="net.seerlog.action.PostReplyAction" scope="request" name="replyForm" input="/sublog.jsp">
 。/action>

  <action path="/index" type="net.seerlog.action.IndexAction" scope="request">
 。/action>

 。/action-mappings>

 。糾essage-resources parameter="resouse.application">
  </message-resources>
 。/struts-config>

  這里的配置有一個可視化工具叫做 struts-console,目前版本4.8,網上可以免費下載的到。

  配置文件其實不用去記,需要時參考一下,拷貝一個過來修改一下即可。只是這里的主要是在于設計 ,設計好有什么formbean,什么action,他們的關系,等等問題。一個好的設計絕對能為后期節省大量的返工可能性。struts有一本《struts on action》,絕對是學習struts的經典書籍,我手上有翻譯的前8章,有需要的可以聯系我。

  我們這里不詳細說明各個配置,只講struts 和hibernate 合作的過程。

  一個action 有一個 execute 方法,當然也可以用 perform方法,不過 perform 方法 在struts1.1已經不推薦使用了,而使用了更強大的execute()方法。 package net.seerlog.action;

  //導入所有用的到的包
  import java.util.List;

  import net.seerlog.po.*;
  import net.seerlog.vo.*;
  import net.seerlog.util.*;

  import net.sf.hibernate.*;

  import org.apache.struts.action.*;

  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.IOException;
  import javax.servlet.ServletException;

  public class IndexAction extends Action{

  //action的主體方法 execute ,注意要拋出異常
  public ActionForward execute (ActionMapping mapping,ActionForm form,HttpServletRequest req,
  HttpServletResponse res) throws IOException, ServletException{
  try{
   //開啟會話
   Session session = Hi.getSession();
   Transaction tx= session.beginTransaction();
   //查詢
   Query q = session.createQuery("from Topic as topic order by topic.id desc");
   q.setFirstResult(0);
   q.setMaxResults(5);
   List newTopicList = q.list();

   NewTopicList ntlBean=new NewTopicList();
   ntlBean.setList(newTopicList);
   req.setAttribute("newtopiclist",ntlBean);

   //事務提交,關閉session
   tx.commit();
   Hi.closeSession();

   //捕獲異常
  }catch(HibernateException e){
   Log.error(e.toString()); //日志記錄
  }

  //返回一個 actionForward 對象
  return mapping.findForward("index");
  }

  }

  以上就是 struts hibernate協同工作的全部內容了,這篇文章只能讓你了解整個過程,這里的例子不能作為實現的學習例子。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
高清不卡在线观看av| 岛国av在线一区| 黄色成人在线网址| wwww国产精品欧美| 欧美最猛性xxxxx直播| 久久国产日韩欧美| 亚洲欧洲日本一区二区三区| 国产精品不卡一区| 日韩午夜电影| 久久激情综合| 亚洲精品乱码| 亚洲欧美另类久久久精品| 亚洲免费在线| 国产麻豆日韩欧美久久| 久久夜色精品国产欧美乱极品| 国产精品国产精品| 亚洲sss视频在线视频| 欧美精品日韩一区| 欧美天天在线| 日日夜夜一区二区| 国产一区二区看久久| 91精品婷婷国产综合久久竹菊| 欧美高清一区| 午夜a成v人精品| 欧美v国产在线一区二区三区| 狠狠综合久久av一区二区老牛| 日韩一区精品视频| 久久丝袜美腿综合| 美日韩在线观看| 成人免费视频国产在线观看| ...xxx性欧美| 69成人精品免费视频| 国产在线观看一区| 九九精品一区二区| 国产精品久久久久影院| 91久久香蕉国产日韩欧美9色| 99精品久久免费看蜜臀剧情介绍| 亚洲一区二区视频在线观看| 日韩午夜激情av| 国产区二精品视| 成人午夜看片网址| 亚洲一区日韩精品中文字幕| 日韩亚洲欧美中文三级| 日韩视频三区| 丁香一区二区三区| 亚洲午夜三级在线| 久久精品人人做人人爽人人| 久久精品日产第一区二区三区 | 国产亚洲女人久久久久毛片| 性色一区二区三区| 99re8在线精品视频免费播放| 日韩福利电影在线观看| 国产欧美精品一区二区三区四区| 欧美视频一区二区| 日韩视频一区| 欧美大片专区| 激情欧美日韩一区二区| 一区二区三区在线影院| 国产无人区一区二区三区| 欧美日韩美女一区二区| 99精品国产99久久久久久福利| yourporn久久国产精品| 蜜臀国产一区二区三区在线播放| 亚洲欧洲99久久| 精品欧美乱码久久久久久1区2区| 国产精品日本| 精品动漫一区| 99视频精品免费视频| 狠狠色丁香久久婷婷综合_中| 亚洲一线二线三线视频| 中文字幕av一区 二区| 欧美一级久久久久久久大片| 在线国产亚洲欧美| 国产精品综合| 国产一区二区在线观看免费播放| 成人一区二区三区视频在线观看| 蜜臀a∨国产成人精品| 尤物在线观看一区| 国产精品青草久久| 久久综合色一综合色88| 欧美一区二区女人| 欧美色视频在线| 色婷婷综合久久久中文字幕| 国产精品久久久久久久久婷婷| 欧美片第1页综合| 99热99精品| 国产成人a级片| 国产精品一区免费视频| 美国毛片一区二区三区| 日本中文一区二区三区| 亚洲一区二区欧美日韩| 一区二区三区精品在线观看| 国产精品成人免费精品自在线观看| 久久久久久久久久看片| 精品国产乱码久久久久久夜甘婷婷 | 欧美成人国产一区二区| 日韩欧美国产一区在线观看| 欧美高清你懂得| 欧美怡红院视频| 欧美性做爰猛烈叫床潮| 91久久精品网| 欧美无乱码久久久免费午夜一区| 91福利国产精品| 91黄视频在线| 日本乱人伦一区| 欧美系列亚洲系列| 欧美视频一区二区| 4438成人网| 欧美一区午夜视频在线观看 | ...中文天堂在线一区| 国产精品久久精品日日| 中文字幕在线观看不卡| 亚洲日韩欧美一区二区在线| 亚洲精品国产成人久久av盗摄| 亚洲色图在线视频| 亚洲尤物视频在线| 三级成人在线视频| 看片的网站亚洲| 国产成人精品一区二区三区网站观看| 国产精品亚洲第一区在线暖暖韩国 | 黄色成人在线网站| 国产亚洲高清视频| 色成人在线视频| 欧美日韩国产一级二级| 日韩视频在线永久播放| 欧美精品一区二区三区一线天视频| 久久无码av三级| 日韩理论片网站| 亚洲国产精品久久艾草纯爱| 男女男精品视频| 国产成人午夜99999| 91蜜桃网址入口| 99精品国产在热久久下载| 久久午夜精品| 日韩视频免费观看高清完整版 | 丁香一区二区三区| 欧美视频网站| 性娇小13――14欧美| 欧美美女一区二区| 久久精品亚洲精品国产欧美kt∨ | 国产成人在线视频网址| 欧美另类高清视频在线| 一区二区三区|亚洲午夜| 91电影在线观看| 精品国产成人在线影院| 中文字幕一区日韩精品欧美| 天堂资源在线中文精品| 国产精品一区在线观看你懂的| 欧美 亚欧 日韩视频在线| 国产精品一区在线播放| 欧美精选一区二区| 中文欧美字幕免费| 日韩中文字幕区一区有砖一区 | 国产成a人无v码亚洲福利| 国内激情久久| 欧美伊人久久大香线蕉综合69| 久久一留热品黄| 亚洲成人免费观看| 成人国产精品免费观看| 一区二区精品在线观看| 日韩高清欧美激情| 99精品视频在线免费观看| 性欧美长视频| 久久一区二区三区四区| 日韩国产在线观看一区| 99久久精品国产一区| 久久精品成人| 久久网站最新地址| 蜜臀av性久久久久蜜臀aⅴ| 欧美激情精品久久久六区热门| 久久一区二区三区av| 久久久久久久久久久久久女国产乱 | 99re亚洲国产精品| 久久综合电影| 亚洲国产高清在线观看视频| 欧美96一区二区免费视频| 欧美喷水视频| 欧美一区二区三区在线| 亚洲国产aⅴ天堂久久| 欧美区高清在线| 欧美日韩大陆一区二区| 亚洲一区二区精品视频| av电影一区二区| 欧美视频中文字幕| 亚洲免费av观看| 99在线热播精品免费| 欧美日韩亚洲综合在线| 依依成人精品视频| 99久久国产免费看| 欧美日韩一区视频| 亚洲一区二区三区中文字幕| 99精品久久免费看蜜臀剧情介绍| 欧美日韩国产色站一区二区三区| 亚洲美女一区二区三区| 欧美成人dvd在线视频| 欧美精品 日韩| 美女视频网站久久| 国产精品手机在线| 国产精品成人一区二区三区夜夜夜| 成人一级视频在线观看|