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

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

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

    posts - 0,  comments - 17,  trackbacks - 0

    說(shuō)明:此教程是oksonic視頻教程的修改,我移植到eclipse3.2+myEclipse5.0環(huán)境下。原來(lái)放在我在和訊的博客上,寫的比較早,完成于去年下半學(xué)期,當(dāng)時(shí)還在學(xué)校,現(xiàn)在出來(lái)打工了,今年7月畢業(yè)。感覺(jué)在CSDN的高手多,所以轉(zhuǎn)移至此。

    功能:集合了SSH框架,完成簡(jiǎn)單的登陸功能

    工具:
        eclipse-SDK-3.2.1
    、MyEclipse_5.0.1GA_E3.2、Tomcat_5.5.15、mysql-5.0.18

    相關(guān)資料下載
    原來(lái)的資料都是放在gbaopan下,現(xiàn)在gbaopan關(guān)了,沒(méi)有地方放了,只能放在郵箱里,在發(fā)件箱里的附件中


    視頻教程下載郵件主題: struts+hibernate+spring視頻.part1
          struts+hibernate+spring
    視頻.part2

    工程下載郵件主題:  struts+hibernate+spring_src.part1     
          struts+hibernate+spring_src.part1
    說(shuō)明文件郵件主題:  struts+hibernate+spring_說(shuō)明
    properties2GBK.bat  struts+hibernate+spring_
    說(shuō)明 
     
    開(kāi)始。。新建工程:名稱為 login
     
    創(chuàng)建Struts框架
     
    創(chuàng)建 index.jsp,增加一鏈接指向 login.jsp
    <html>
      <head>
        <title>Struts+Spring+Hibernate</title>
      </head>
     
      <body>
        <a href="login.jsp">Login</a>
      </body>
    </html>
     
    按下Ctrl + N,創(chuàng)建 login.jsp、LoginAction,使用MyEclipse的向?qū)Ь涂梢粤耍浀眠x對(duì)正確的版本
     
    在ActionForm配置頁(yè)中選擇類型為動(dòng)態(tài)Form,并繼承于DynaValidatorForm,新增兩個(gè)屬性:username、password,
    在創(chuàng)建jsp文件打上鉤,將路徑改為/login.jsp,然后下一步,改LoginAction的Input source改為/login.jsp,點(diǎn)擊完成
     
    按下Ctrl + N 創(chuàng)建一個(gè)forwards,記得選對(duì)正確的版本
    name
    輸入 indexGo
    路徑選擇 /index.jsp
     
    配置validator
    先添加Struts插件,使用向?qū)?span>
    Plugin class : org.apache.struts.validator.ValidatorPlugIn
    Property : pathnames
    Value : /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml
    這里需要兩個(gè)xml文件
    現(xiàn)在創(chuàng)建“validation.xml” 文件

     
    文件內(nèi)容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "validator_1_1_3.dtd" >
    <form-validation>
     <formset>
      <form name="loginForm">
       <field property="username" depends="required">
        <arg0 key="prompt.username" />
       </field>
       <field property="password" depends="required">
        <arg0 key="prompt.password" />
       </field>
      </form>
     </formset>
    </form-validation>
     
    編輯資源文件“ApplicationResources.properties”
    增加以下內(nèi)容
     
    prompt.username=User Name
    prompt.password=User Password
    errors.required={0} is required.
     
    再創(chuàng)建中文件資源文件“ApplicationResources_zh_CN.properties”
    增加以下內(nèi)容

    prompt.username=用戶名稱
    prompt.password=
    登錄密碼
    errors.required={0}
    必需填寫!

    我這沒(méi)有用Properties Editor插件,所以在tomcat發(fā)布后會(huì)顯示亂碼,我們可以用native2ascii來(lái)解決
    我建了個(gè)批處理文件properties2GBK.bat
    native2ascii -encoding gbk ApplicationResources_zh_CN.properties temp.properties
    del ApplicationResources_zh_CN.properties
    rename temp.properties ApplicationResources_zh_CN.properties
    放在你的classpath下,或者拷到你要轉(zhuǎn)GBK的地方,雙擊一下就可以了
    我剛開(kāi)始在eclipse編輯中文properties文件,保存后再打開(kāi),也會(huì)出現(xiàn)亂碼,只要在eclipse上設(shè)置一下就可以了
    具體設(shè)置:Eclipse-->Preferences...-->在“type filter text“欄中輸入”Content Types“查找,
    然后在選擇右邊的Text下邊相應(yīng)的文件后綴名,即properties.修改其編碼就可。可以修改成GBK
    我這已經(jīng)改好了,直接打開(kāi)就是漢語(yǔ)了。。。
    建議下載 properties Editor插件,我這上不了外國(guó)網(wǎng)站,沒(méi)有辦法。。。。有空再下吧。。
     
    修改struts-config.xml文件
    在以下位置增加validate="true"
    <action-mappings >
        <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          validate="true"
          type="com.test.struts.action.LoginAction" />
      </action-mappings>
     
    這里說(shuō)明提交的數(shù)據(jù)必需經(jīng)過(guò)驗(yàn)證,而驗(yàn)證則是通過(guò)validator框架進(jìn)行的。

    修改web.xml文件
    增加
     <welcome-file-list>
       <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    顯示主頁(yè)
     
    修改LoginAction.java文件的execute方法,內(nèi)容如下
    public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response) {
      DynaValidatorForm loginForm = (DynaValidatorForm) form;
      String username=loginForm.getString("username");
      String password=loginForm.getString("password");
      if(username.equals("test")||password.equals("test")){
       return mapping.findForward("indexGo");
      }else{
       return mapping.getInputForward();
      }
     }
     
    現(xiàn)在再修改一下login.jsp
    增加以下部份
    <%@ page language="java" contentType="text/html; charset=UTF-8" %>
     
    其中charset=UTF-8 是使用UTF-8的字符編碼,這也是為了支持國(guó)際化而使用的。要不然中文還是會(huì)顯示亂碼
    關(guān)于亂碼解決,網(wǎng)上查資料,一查就有一堆
    我們現(xiàn)在還沒(méi)有傳遞中文參數(shù),要不然還得加個(gè)過(guò)濾器。。

     
    好了,現(xiàn)在可以啟動(dòng)Tomcat進(jìn)行測(cè)試了
    http://localhost:8080/login/

     
    如果不輸入任何數(shù)據(jù)而直接提交表單的話就可以看到效果了。
     
    好了,如果沒(méi)有什么問(wèn)題的話就繼續(xù)往下看吧,如果有問(wèn)題的話就得往上看了^_^
    出現(xiàn)了亂碼,我們用native2ascii來(lái)解決,非得我重啟一下!> ok了
     
    現(xiàn)在創(chuàng)建Spring框架了,在這里我將Spring所有的包全部加載進(jìn)去,因?yàn)槲疫€不知道具體用到哪些類,全部加進(jìn)去方便點(diǎn)
     
    單選框選第二個(gè),這樣的話所有的類庫(kù)和標(biāo)簽等都將拷貝到項(xiàng)目中去,這樣方便以后的布署
    下一步后是創(chuàng)建配置文件,將文件放到“WebRoot/WEB-INF”目錄下,文件名稱為“applicationContext.xml”
     
     
    配置struts-config.xml文件,添加(spring)的插件
     
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
      </plug-in>
     
     
    修改LoginAction配置
     
    原:
    <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          validate="true"
          type="com.test.struts.action.LoginAction" />
     
      </action-mappings>
     
    改為:
    <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          validate="true"
          type="org.springframework.web.struts.DelegatingActionProxy" />
      </action-mappings>
     
     
    這里將使用spring的代理器來(lái)對(duì)Action進(jìn)行控制
     
    當(dāng)提交到/login.do是將控制權(quán)交給了spring,然后由spring來(lái)決定是否轉(zhuǎn)回到struts的Action
     
    現(xiàn)在來(lái)配置spring
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "  
    <beans>
     <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean>
    </beans>

     
    屬性singleton="false",指明了Action 的實(shí)例獲取方式為每次重新創(chuàng)建。解決了Struts中令人詬病的線程安全問(wèn)題(Struts中,由一個(gè)Action實(shí)例處理所有的請(qǐng)求,這就導(dǎo)致了類公用資源在并發(fā)請(qǐng)求中的線程同步問(wèn)題。)(摘自spring開(kāi)發(fā)指南)
    測(cè)試一下,如果沒(méi)有什么問(wèn)題的話就繼續(xù)往下看吧,如果有問(wèn)題的話就得往上看了^_^
    好的,struts spring倆人成為朋友了,友好的集成到了一起。。。
     
    建立數(shù)據(jù)庫(kù)在 這里我使用的是mysql-5.0.18
    配置好mySql連接......
    不好意思,這里我忘記驅(qū)動(dòng)怎么寫了。。。
    CREATE TABLE `user` (
      `ID` int(11) NOT NULL auto_increment,
      `USERNAME` varchar(50) NOT NULL default '',
      `PASSWORD` varchar(50) NOT NULL default '',
      PRIMARY KEY  (`ID`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    添加記錄 insert into user (USERNAME,PASSWORD) values ('test','test')

    創(chuàng)建Hibernate框架
    新建包com.test.hibernate
    com.test.beans
    選hibernate3.1 libraries全選,我也不知道那個(gè)具體有什么用^_^,可能只選第一個(gè)也行,但考慮還要用DAO,第三個(gè)也選上了,
    看第二是高級(jí)支持,也加上了,沒(méi)試?yán)锩娴淖饔茫蠹矣锌湛梢栽囈幌隆!?span>
    第二步選 spring configuration file 我們直接在Spring配置hibernate的連接。。就不用創(chuàng)建hibernate.cfg.xml了
    第三步選existing Spring configuration file我們剛才已經(jīng)創(chuàng)建了一個(gè)。。
     SessionFactory ID
    就直接填sessionFactory
    第四步 Bean Id填 dataSource 我們用JDBC Driver,DB Profile選剛才配置好的

    使用MyEclipse的數(shù)據(jù)Database Explorer工具創(chuàng)建User.hmb.xml、AbstractUser.java、User.java,UserDAO文件
    這里選項(xiàng)比較多,大家看視頻。。我就不一一說(shuō)明了。。。不懂的看書(shū)^_^

    打開(kāi)User.hbm.xml配置文件,把 catalog="meilvin" 這一項(xiàng)刪除了,要不后果很嚴(yán)重。因?yàn)閙ySql在連接的時(shí)候要寫上數(shù)據(jù)庫(kù)
    如果我們?cè)谶@里也寫上數(shù)據(jù)庫(kù)的名字的話就會(huì)重復(fù)了,就變成了meilvin.meilvin.user,顯然是錯(cuò)的。后面就會(huì)報(bào)錯(cuò),我深有體會(huì)。


    修改UserDAO,增加如下方法
    public boolean isValidUser(String username, String password) {
      String hql = "from User u where u.username=? and u.password=?";
      String []userInfo=new String[2];
      userInfo[0]=username;
      userInfo[1]=password;
      List userList = this.getHibernateTemplate().find(hql, userInfo);
      if (userList.size() > 0) {
       return true;
      }
      return false;
     }

     
    修改LoginAction.java文件,使用userDao的方法來(lái)進(jìn)行用戶驗(yàn)證
    package com.test.struts.action;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.validator.DynaValidatorForm;
     
    import com.test.UserDAO;

    public class LoginAction extends Action {

     private UserDAO userDAO;
     
     public UserDAO getUserDAO() {
      return userDAO;
     }
     
     public void setUserDAO(UserDAO userDAO) {
      this.userDAO = userDAO;
     }
     
     public ActionForward execute(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response) {
      DynaValidatorForm loginForm = (DynaValidatorForm) form;
      // TODO Auto-generated method stub
      String username = (String) loginForm.get("username");
      String password = (String) loginForm.get("password");
      loginForm.set("password", null);
      if (userDAO.isValidUser(username,password)) {
       return mapping.findForward("indexGo");
      } else {
       return mapping.getInputForward();
      }
     }
    }
     
    現(xiàn)在剩下最后的spring配置了
    把原來(lái)的
    <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean>
    刪除了
    在最底下增加
     <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false">
      <property name="userDAO">
       <ref bean="UserDAO" />
      </property>
     </bean>
    利用反轉(zhuǎn)控制產(chǎn)生action
    現(xiàn)在可以進(jìn)行測(cè)試了,可以登陸了^-^
    老是說(shuō)log4j沒(méi)有配置,下次視頻配置一下。。。成功了。。


    注冊(cè)新用戶,用戶瀏覽、刪除用戶

    打開(kāi) UserDAO.java 文件,增加以下方法:
     public boolean addUser(User user) {
      try {
       //
    調(diào)用前面save方法
       save(user);
      } catch (Exception e) {
       System.out.println(e.getMessage());
       return false;
      }
      return true;
     }


    按下 Ctrl + N ,使用向?qū)?chuàng)建 adduser.jsp 、AdduserForm(DynaValidatorForm)、AdduserAction.java文件,這是注冊(cè)新用戶的Action
    我用的是maxthon瀏覽器,如果是add.jsp,它會(huì)當(dāng)做廣告攔下來(lái),,,,多加個(gè)user...

    修改配置內(nèi)容如下:
    <action
          attribute="adduserForm"
          input="/adduser.jsp"
          name="adduserForm"
          path="/adduser"
          validate="true"
          type="org.springframework.web.struts.DelegatingActionProxy" />

    第一句實(shí)現(xiàn)了必須對(duì)提交的數(shù)據(jù)進(jìn)行驗(yàn)證
    第二句實(shí)現(xiàn)了和spring集成

    修改 AdduserAction.java 文件,內(nèi)容如下:

     private UserDAO userDAO;
     
     public UserDAO getUserDAO() {
      return userDAO;
     }
     public void setUserDAO(UserDAO userDAO) {
      this.userDAO = userDAO;
     }

     public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response) {
      DynaValidatorForm adduserForm = (DynaValidatorForm) form;
      User user = new User();
      user.setUsername(adduserForm.getString("username"));
      user.setPassword(adduserForm.getString("password"));
      adduserForm.set("password", null);
      if (userDAO.addUser(user)) {
       return mapping.findForward("indexGo");
      } else {
       return mapping.getInputForward();
      }
     }

    關(guān)于在Action中使用 User 對(duì)像,我在這里沒(méi)有使用 IoC 方式進(jìn)行管理,這不好,希望大家在正式應(yīng)用中使用。

    在spring配置文件(applicationContext.xml)中加入以下內(nèi)容:
     <bean name="/adduser" class="com.test.struts.action.AdduserAction"
      singleton="false">
      <property name="userDAO">
       <ref bean="UserDAO" />
      </property>
     </bean>

    修改 index.jsp 文件
    <html>
      <head>
        <title>Struts+Spring+Hibernate</title>
      </head>
     
      <body>
        <a href="login.jsp">Login</a>
        <br>
        <a href="add.jsp">Add User</a>
      </body>
    </html>

    修改 adduser.jsp 文件的首行,替換為以下內(nèi)容,目的是為了使用UTF-8的編碼格式顯示頁(yè)面
    <%@ page language="java" contentType="text/html; charset=UTF-8" %>

    修改 validation.xml 文件,加入以下內(nèi)容:
      <form name="adduserForm">
       <field property="username" depends="required">
        <arg0 key="prompt.username" />
       </field>
       <field property="password" depends="required">
        <arg0 key="prompt.password" />
       </field>
      </form>


    現(xiàn)在整個(gè) AddUser 已經(jīng)完成,如果你覺(jué)得不放心的話可以在這里停一停先進(jìn)行這一段的測(cè)試!

    創(chuàng)建一個(gè)Action用于查詢數(shù)據(jù),名稱為 find

    創(chuàng)建 display.jsp 文件,用于顯示所有用戶

    創(chuàng)建一個(gè) forward displayGO 指向 display.jsp 選中 redirect

    修改 UserDAO.java 文件,增加 findAllUser() 方法,代碼如下:
     public List findAllUser() {
      List users=this.getHibernateTemplate().find("from User u");
      if(users.size()>0)
       return users;
      return null;
     }

    修改 struts-config.xml 文件
    <action path="/find" type="org.springframework.web.struts.DelegatingActionProxy" />

    修改 FindAction.java 文件,內(nèi)容如下:
     private UserDAO userDAO;
     
     public UserDAO getUserDAO() {
      return userDAO;
     }
     public void setUserDAO(UserDAO userDAO) {
      this.userDAO = userDAO;
     }

     public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response) {
      List users=userDAO.findAllUser();
      if(users!=null){
       HttpSession session=request.getSession();
       session.setAttribute("users",users);
       return mapping.findForward("displayGo");
      }
      return mapping.getInputForward();
     }

    在spring配置文件(applicationContext.xml)中加入以下內(nèi)容:
     <bean name="/find" class="com.test.struts.action.FindAction" singleton="false">
      <property name="userDAO">
       <ref bean="UserDAO" />
      </property>
     </bean>

    修改 display.jsp 文件,內(nèi)容如下:
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="
    <%@ taglib uri=" <%@ taglib uri=" <html>
      <head>
        <title>DISPLAY</title>
      </head>
      <body>
        <logic:present name="users">
        <form action="del.do">
        <table border="1">
        <logic:iterate id="element" name="users">
     <tr><td width="100">
      <input type="radio" name="select" value="<bean:write name="element" property="id"/>">
         <bean:write name="element" property="username"/>
        </td></tr>
        </logic:iterate>
        </table>
        <INPUT type="submit" name="Submit" value="submit">
        </form>
        </logic:present>
      </body>
    </html>

    現(xiàn)在整個(gè) Display 已經(jīng)完成,如果你覺(jué)得不放心的話可以在這里停一停先進(jìn)行這一段的測(cè)試!

    新建一個(gè) Action 用于刪除選中的用戶,name:del

    修改 struts-config.xml 文件中的以下內(nèi)容為:
    <action path="/del" type="org.springframework.web.struts.DelegatingActionProxy" />

    修改 UserDAO.java 文件,增加以下方法
     public boolean delUser(Integer lid) {
      try {
       User user=(User)findById(lid);
       this.getHibernateTemplate().delete(user);
      } catch (Exception e) {
       System.out.println(e.getMessage());
       return false;
      }
      return true;
     }

    修改 DelAction.java 文件,內(nèi)容如下:
    public class DelAction extends Action {

     private UserDAO userDAO;

     public UserDAO getUserDAO() {
      return userDAO;
     }

     public void setUserDAO(UserDAO userDAO) {
      this.userDAO = userDAO;
     }

     public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response) {
      Integer selid=Integer.valueOf(request.getParameter("select"));
      if(userDAO.delUser(selid))
       return mapping.findForward("indexGo");
      return mapping.getInputForward();
     }
    }
    Ctrl+Shift+o
    導(dǎo)入包
    在spring配置文件(applicationContext.xml)中加入以下內(nèi)容:
     <bean name="/del" class="com.test.struts.action.DelAction" singleton="false">
      <property name="userDAO">
       <ref bean="UserDAO" />
      </property>
     </bean>

    修改 index.jsp 文件
    <html>
      <head>
        <title>Struts+Spring+Hibernate</title>
      </head>
     
      <body>
        <a href="login.jsp">Login</a>
        <br>
        <a href="add.jsp">Add User</a>
        <br>
        <a href="find.do">Display</a>
      </body>
    </html>


    代碼已經(jīng)全部完成,可以進(jìn)行測(cè)試了!!!

    如果測(cè)試不成功,請(qǐng)往回查看。。。。完了!!!
    失誤失誤,大小寫不注意,就是這種后果,大家以后要注意點(diǎn)哦
    好了,成功了,祝大家都成功!
    拜拜!


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


    網(wǎng)站導(dǎo)航:
     

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿

    隨筆檔案(1)

    文章分類(44)

    文章檔案(46)

    收藏夾(1)

    Adobe

    AOP

    API

    appServer

    BI

    c

    • c-free
    • codeblocks
    • codelite
    • CodeLite IDE 是一個(gè)強(qiáng)大的開(kāi)源,跨平臺(tái)的 C/C++整合開(kāi)發(fā)環(huán)境. 支持包括 Windows、Linux 和 Mac 系統(tǒng)下運(yùn)行
    • codelite官網(wǎng)
    • dev-c++
    • Dev-C++是一個(gè)C&C++開(kāi)發(fā)工具,它是一款自由軟件,遵守GPL協(xié)議。
    • GCC
    • GCC 原名為 GNU C 語(yǔ)言編譯器(GNU C Compiler),因?yàn)樗局荒芴幚?C語(yǔ)言。GCC 很快地?cái)U(kuò)展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語(yǔ)言。

    Cache

    CMS

    DB

    eclipse

    FreeMarker

    hibernate

    html5

    ibatis

    java

    jquery

    js

    json

    Linux

    Log

    mail server

    mobile

    mysql

    oauth

    openID

    other

    PHP

    portal

    report

    Scheduler

    schema

    Security

    SOA

    spring

    struts

    UI原型設(shè)計(jì)

    w3c

    Wap

    webservice

    xml

    供應(yīng)鏈管理

    博客鏈接

    好網(wǎng)站

    工作流

    開(kāi)源網(wǎng)

    招聘

    插件下載

    操作系統(tǒng)

    構(gòu)建可伸縮的系統(tǒng)

    構(gòu)建工具

    測(cè)試

    • IETest
    • IE官網(wǎng)
    • OpenSTA
    • Siege
    • Siege是一個(gè)壓力測(cè)試和評(píng)測(cè)工具,設(shè)計(jì)用于WEB開(kāi)發(fā)這評(píng)估應(yīng)用在壓力下的承受能力

    游戲

    源碼托管

    經(jīng)營(yíng)

    資源

    金融/財(cái)務(wù)

    搜索

    •  

    最新評(píng)論

    主站蜘蛛池模板: 亚洲精品自偷自拍无码| 国产亚洲视频在线| 日韩毛片在线免费观看| 久久免费观看国产99精品| 免费看又爽又黄禁片视频1000| 亚洲色偷偷综合亚洲AVYP| 国产99在线|亚洲| 日韩精品无码免费专区午夜| 好男人视频社区精品免费| 亚洲精品蜜桃久久久久久| 亚洲色中文字幕在线播放| 免费网站观看WWW在线观看| 国产美女无遮挡免费视频网站 | 在线亚洲午夜片AV大片| 香蕉免费在线视频| 成人无遮挡毛片免费看| 亚洲国产精品自在线一区二区| 久久无码av亚洲精品色午夜| 无码人妻一区二区三区免费看 | 少妇无码一区二区三区免费| 免费一级黄色毛片| 亚洲av无码专区在线| 久久久久久免费一区二区三区 | 亚洲婷婷五月综合狠狠爱| 亚洲乱亚洲乱妇无码| 日本免费人成视频在线观看| 亚洲国产精品日韩专区AV| 亚洲无成人网77777| a级毛片免费全部播放无码| 国产在线19禁免费观看| 亚洲国产亚洲综合在线尤物| a国产成人免费视频| 亚洲精品无码av天堂| 亚洲最大中文字幕无码网站| 久久这里只精品热免费99| 免费一级特黄特色大片在线观看| 亚洲精品国产日韩| 91精品国产免费久久国语蜜臀| 亚洲精品国产精品乱码视色| 免费福利在线观看| 免费毛片网站在线观看|