亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

使用JSP + JAVABEAN + XML 開發的一個例子

2019-11-18 20:13:29
字體:
來源:轉載
供稿:網友
本例子是參考了一些網站上有關jsp 對 xml 的操作的相關文檔,又結合了一些個人的體會。例子涉及的內容是,開發的一個企業內部定餐系統后臺管理端的部分代碼,功能主要集中在對于餐館基本信息的管理。

該例子本身開發的起因是我在原公司和同事們一個玩笑的一部分。特此也表達對那些一起共事的朋友們的想念。

例子本身是在TOMCAT4.01 平臺下運行的B/S結構的程式。有關TOMCAT 的配置,這里不做說明。只講解一下相關文件及文件夾的目錄結構。

目錄結構說明:
/tomcat/webapps/canyin/                    -----主目錄
/tomcat/webapps/canyin/jsp/               -----JSP 文件目錄
/tomcat/webapps/canyin/jsp/admin/       -----實現后臺管理的JSP 文件的存放目錄
/tomcat/webapps/canyin/WEB-INF/classes/canyin/               ------javabean 文件的存放目錄
/tomcat/webapps/canyin/data/   -----xml 文件存放目錄
/tomcat/webapps/ROOT/           -----tomcat 啟動文件存放文件夾,只存放了index.html 文件

文件簡單說明:
/tomcat/webapps/canyin/data/users.xml    -----記錄用戶信息
/tomcat/webapps/canyin/data/restaurants.xml  -----記錄餐館的基礎信息


/tomcat/webapps/ROOT/index.html       -----首頁,頁面出現輸入框,要求用戶輸入用戶名,密碼


/tomcat/webapps/canyin/jsp/loginjudge.jsp       -----用戶身份判斷頁面,根據用戶名稱和密碼決定頁面是轉入后臺管理端,還是前臺客戶端。本例子中,用戶身份一旦確認為有管理權限,可以進入后臺管理端,就直接跳到餐館基本信息管理頁面,簡化說明的流程。
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp    -----餐館基本信息管理頁面,管理餐館的名稱,電話,地址等信息

/tomcat/webapps/canyin/WEB-INF/classes/canyin/checksessionBean.class  ----- 后臺管理端檢測標志用戶身份的session 的值,如果不是管理員的話,跳回登陸頁面。              
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class  -----連接xml 文件
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class  -----寫入xml文件

文件詳細介紹及附帶代碼說明。

/tomcat/webapps/canyin/data/users.xml    

代碼:
  <?xml version="1.0" encoding="UTF-8" ?> 

- <users>
  <user name="joard" passWord="joard" roles="admin" /> 
  <user name="joard01" password="joard01" roles="user" /> 
  <user name="joard02" password="joard02" roles="user" /> 
  </users>
 
說明:字段含義是用戶名,密碼以及用戶的身份
 
/tomcat/webapps/canyin/data/restaurants.xml  

代碼:
  <?xml version="1.0" encoding="UTF-8" ?> 
- <restaurants num="10">
- <restaurant id="1">
  <name>上海亭快餐店</name> 
  <phone>021-76546726</phone> 
  <address>百老匯廣場B座</address> 
  </restaurant>
- <restaurant id="8">
  <name>香格里拉大飯店</name> 
  <phone>021-2312134</phone> 
  <address>南京路1023號</address> 
  </restaurant>
  </restaurants>
說明:<num>屬性是記錄在restaurants.xml 文件中總共有過多少條記錄,每新增一條,無論以后刪除是否,該值都會增加1,就好象數據庫中習慣使用的自動增加1的id 項。用來給新增的 <restaurant>的屬性<id>賦一個唯一的值。其它的字段意思比較明顯。
/tomcat/webapps/ROOT/index.html       (單純的HTML代碼)

代碼:
<html>
<head>
<title>oddWorld 餐飲系統</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body onload="javascrJavascript:if (checkform()==false);" type=button value="登    錄">
                  </td>
                  <td> </td>
                  <td> 
                    <input class=stbtm name=Submit onClick="javascript:window.location.href=''index.asp?myjoke=1'';" type=button value="修改密碼">
                  </td>
                  <td> </td>
                </tr>
                </tbody> 
              </table>
              <br>
            </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
</div>
</body>
</html>
     <SCRIPT language=javascript>
<!--
function checkform()

 var Checkblank = /^(/s*|(/ )|(/.))*$/;
 if (Checkblank.test(dataform.username.value))    
{
          alert("登錄名不能為空!");
   return false; 
         } 
         
         if (Checkblank.test(dataform.userpass.value))    
{
          alert("密碼不能為空!");
   return false; 
         } 


      window.dataform.submit();

   }
-->

</SCRIPT>

說明:把用戶名稱和用戶密碼提交到/tomcat/webapps/canyin/jsp/loginjudge.jsp       

/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class  (代碼是相應的java 文件)

package canyin;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;

public class checkSessionBean {
 
  return;
}

//從餐館資料文件 rest.xml 中得到相關數據
Document doc;
NodeList restaurants;

String strAct;
int intId=0;
String str
Operation="show";

//接受外部傳入的參數
strAct=(String)request.getParameter("act");

xmlBean.connXml("webapps/canyin/data/restaurants.xml");
doc=xmlBean.getXmlDoc();
restaurants =doc.getElementsByTagName("restaurant");

//根據外部傳入的參數來決定對 restaurant.xml 文件的操作
if (strAct!=null){
 if(strAct.equals("addnewDo")){
  
  String strName;
  String strPhone;
  String strAddress;
  Text textseg;
  
  strName=(String)request.getParameter("name").trim();
  strPhone=(String)request.getParameter("phone").trim();
  strAddress=(String)request.getParameter("address").trim();
  
  //數據校驗
  if(strName==null){
   out.print(showDialog("餐館名稱不能為空!"));
   return;
  }
  if(strPhone==null){
   out.print(showDialog("餐館電話不能為空!"));
   return;
  }
  /*if(strAddress==null){
   out.print(showDialog("餐館地址不能為空!"));
   return;
  }*/
  
  //校驗數據的唯一性
  for(int i=0;i<restaurants.getLength();i++){
   Element restaurant=(Element) restaurants.item(i);
   if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)){
    out.print(showDialog("餐館名稱重復!"));
    return; 
   }else{
    if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)){
     out.print(showDialog("餐館電話重復!"));
     return;
    }
   }
   
  }
  
  
    
  //得到已有的記錄數,給新增的餐館記錄設定唯一的遞增的id 屬性
  int intNum=0;
  Element restNum=(Element)doc.getElementsByTagName("restaurants").item(0);
  intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue()); 

  intNum+=1;
  
  //為restaurants的屬性num 的數值加1
  restNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum));

  //新增節點    
  Element newRestaurant=doc.createElement("restaurant");
  
  Attr newArrId=doc.createAttribute("id");
  //Attribute newArrId = new Attribute("id",String.valueOf(intNum));  
  textseg=doc.createTextNode(String.valueOf(intNum));
  newArrId.setValue(String.valueOf(intNum));
  newRestaurant.setAttributeNode(newArrId);
  
  Element newName=doc.createElement("name");
  textseg=doc.createTextNode(strName);
  newName.appendChild(textseg);
  newRestaurant.appendChild(newName);
  
  Element newPhone=doc.createElement("phone");
  textseg=doc.createTextNode(strPhone);
  newPhone.appendChild(textseg);
  newRestaurant.appendChild(newPhone);
  
  Element newAddress=doc.createElement("address");
  textseg=doc.createTextNode(strAddress);
  newAddress.appendChild(textseg);
  newRestaurant.appendChild(newAddress);
  
  doc.getDocumentElement().appendChild(newRestaurant);

  //調用bean 寫入相應的xml文件
  writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");

  response.sendRedirect(request.getRequestURI());  
  return;
 }
 if(strAct.equals("modiDo")){
  String strName;
  String strPhone;
  String strAddress;
  Text textseg;
  int modiId;
  //記錄要修改的記錄是item(i)的哪一項
  int intI=0;
  
  strName=(String)request.getParameter("name").trim();
  strPhone=(String)request.getParameter("phone").trim();
  strAddress=(String)request.getParameter("address").trim();
  modiId=Integer.parseInt(request.getParameter("recordId").trim());
  
  //數據校驗
  if(strName==null){
   out.print(showDialog("餐館名稱不能為空!"));
   return;
  }
  if(strPhone==null){
   out.print(showDialog("餐館電話不能為空!"));
   return;
  }
  if(modiId==0){
   out.print(showDialog("你要修改餐館的記錄不存在!"));
   return;
  }
  /*if(strAddress==null){
   out.print(showDialog("餐館地址不能為空!"));
   return;
  }*/
  
  //標志顯示記錄存在
  boolean recordExist=false;
  
  //校驗數據的唯一性
  for(int i=0;i<restaurants.getLength();i++){
   Element restaurant=(Element) restaurants.item(i);
   
   if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){
    recordExist=true;
    intI=i;

   }
   
   if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())!=modiId ){
    out.print(showDialog("餐館名稱重復!"));
    return; 
   }else{
    if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())!=modiId ){
     out.print(showDialog("餐館電話重復!"));
     return;
    }
   }
   
  }
  

  
  if(!recordExist){
   out.print(showDialog("你要修改餐館的記錄不存在!"));
   return;
  }else{
   //進行記錄更改的操作
   try{
    Element modiRestaurant=(Element) restaurants.item(intI);
    modiRestaurant.getElementsByTagName("name").item(0).getFirstChild().setNodeValue(strName);
    modiRestaurant.getElementsByTagName("phone").item(0).getFirstChild().setNodeValue(strPhone);
    modiRestaurant.getElementsByTagName("address").item(0).getFirstChild().setNodeValue(strAddress);
    
    //調用bean 寫入相應的xml文件
    writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
  
    response.sendRedirect(request.getRequestURI());  
    return; 
    
   }catch(Exception e){}
  }
 }
 //進行刪除操作
 if(strAct.equals("del")){
  int delId;
  //記錄要修改的記錄是item(i)的哪一項
  int intI=0;

  delId=Integer.parseInt(request.getParameter("recordId").trim());

  if(delId==0){
   out.print(showDialog("你要修改餐館的記錄不存在!"));
   return;
  }
  
  file://標志顯示記錄存在
  boolean recordExist=false;

  //校驗數據的唯一性
  for(int i=0;i<restaurants.getLength();i++){
   Element restaurant=(Element) restaurants.item(i);
   
   if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){
    recordExist=true;
    intI=i;

   }
  }
  
  if(!recordExist){
   out.print(showDialog("你要刪除餐館的記錄不存在!"));
   return;
  }else{
   //進行記錄刪除的操作
   try{
    Node delNode=(Node)restaurants.item(intI);
    
    doc.getElementsByTagName("restaurants").item(0).removeChild(delNode);

    //調用bean 寫入相應的xml文件
    writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");

    response.sendRedirect(request.getRequestURI());  
    return; 
    
   }catch(Exception e){}
  }

 }
}

//由外部傳入參數決定頁面相應的處理狀態
if (strAct==null){
 strOperation="show";
}else{
 if (strAct.equals("modi")){
  strOperation="modi";
  intId=Integer.parseInt(request.getParameter("recordId"));
 }else{
  if(strAct.equals("addnew")){
   strOperation="addnew";
  }else{
   strOperation="show";
  }
 }
}


//如果為空記錄,則變更頁面狀態為“新增”
if (restaurants.getLength()==0){
 strOperation="addnew";
}
%>

<html>
<head>
<title>oddWorld 餐飲系統</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="expires" content="0">
<link rel="stylesheet" href="../../include/itsp.CSS" type="text/css">
</head>

<body >
<div align="center">
  <table width="100%" border="0" cellspacing="0" cellpadding="0" height="22">
    <tr> 
      <td width="1"><img src="../../images/top_r1.GIF" width="62" height="22"></td>
      <td width=150 align="center"> 餐飲系統管理--餐館管理</td>
      <td><img src="../../images/top_r2.GIF" width="294" height="22"></td>
   <td width=100 align="center"><a href="/index.html">[ 退出系統 ]</a></td>
    </tr>
  </table>
  <br>
  <br>
  <table bgcolor="#999999" align=center border=0 cellpadding=1 cellspacing=1 
width="90%">
    <tbody> 
    <tr bgcolor="#efefef" align="center" valign="middle"> 
      <td class=ttTable height=30 width="20"> </td>
      <td class=ttTable height=30 width="0">餐館名稱</td>
      <td class=ttTable height=30 width="0">餐館電話</td>
      <td class=ttTable height=30 width="0"> 
        <div align="center">餐館地址</div>
      </td>
      <td class=ttTable height=30 width="30"> 
        <div align="center">修改</div>
      </td>
      <td class=ttTable height=30 width="30"> 
        <div align="center">刪除</div>
      </td>
    </tr>
<%
 for(int i=0;i<restaurants.getLength();i++)
 {
  Element restaurant=(Element) restaurants.item(i);
  
  if (strOperation=="modi" && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){
%>
    <%//顯示修改的格式%>
    <tr align="center" bgcolor="#ffffff" valign="middle"> 
      <form name=dataform action="<%=request.getRequestURI()%>?act=modiDo" method="post"  onSubmit=''return checkform(this);'' >
        <td class=tdsmall height=25 width="20"> 
          <input type="hidden" name="recordId" value="<%=restaurant.getAttributeNode("id").getNodeValue()%>">
          <%=(i+1)%></td>
        <td class=tdsmall height=25> 
          <input name="name" class=stedit
                  style="HEIGHT: 22px; WIDTH: 150px" value="<%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
         out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
         
        }%>
" maxlength="40" >
        </td>
        <td class=tdsmall height=25> 
          <input name="phone" class=stedit
                  style="HEIGHT: 22px; WIDTH: 100px" value="<%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
         out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
         
        }%>" maxlength="20" >
        </td>
        <td class=tdsmall height=25> 
          <input name="address" class=stedit
                  style="HEIGHT: 22px; WIDTH: 200px" value="<%
                  
                  if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){
         out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue());
         
        }%>" maxlength="100" >
        </td>
        <td class=tdsmall height=25 width="25"><a href="javascript:if (checkform()==false);"><img border=0 
      height=15 src="../../images/editok.gif" width=15></a></td>
        <td class=tdsmall height=25 width="25"> </td>
      </form>
    </tr>
    <% }else{ 
    //顯示正常的格式 %>
    <tr align="center" bgcolor="#ffffff" valign="middle"> 
      <td class=tdsmall height=25 width="20"><%=(i+1)%></td>
      <td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
         out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
         
        }%>
</td>
      <td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
         out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
         
        }%></td>
      <td class=tdsmall height=25 width="0"> 
        <%
        if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){
        out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue());
         
        }%>
      </td>
      <td class=tdsmall height=25 width="30"><a href="<%=request.getRequestURI()%>?act=modi&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>"><img border=0 
        height=15 src="../../images/edit.gif" width=15></a></td>
      <td class=tdsmall height=25 width="30"><img border=0 
        height=15 
        onClick="javascript:if(confirm(''您是否確定刪除本記錄,刪除后將導至記錄無法使用?'')){window.location.href=''<%=request.getRequestURI()%>?act=del&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>'';}" 
        src="../../images/delete.gif" style="CURSOR: hand" width=15> </td>
    </tr>
    <% } 
}%>
    <% if (strOperation=="addnew"){
    //顯示新增的格式%>
    <tr align="center" bgcolor="#ffffff" valign="middle"> 
      <form name=dataform2 action="<%=request.getRequestURI()%>?act=addnewDo" method="post"  onSubmit=''return checkform2(this);'' >
        <td class=tdsmall height=25 width="20"></td>
        <td class=tdsmall height=25> 
          <input name="name" class=stedit
                  style="HEIGHT: 22px; WIDTH: 150px" value="" maxlength="40" >
        </td>
        <td class=tdsmall height=25> 
          <input name="phone" class=stedit
                  style="HEIGHT: 22px; WIDTH: 100px" value="" maxlength="20" >
        </td>
        <td class=tdsmall height=25> 
          <input name="address" class=stedit
                  style="HEIGHT: 22px; WIDTH: 200px" value="" maxlength="100" >
        </td>
        <td class=tdsmall height=25 width="25"><a href="javascript:if (checkform2()==false);"><img border=0 
      height=15 src="../../images/editok.gif" width=15></a></td>
        <td class=tdsmall height=25 width="25"> </td>
      </form>
    </tr>
    <% } %>
    </tbody> 
  </table>
  <br>
  <table align=center border=0 cellpadding=0 cellspacing=2 width="95%">
    <tbody> 
    <tr valign=center> 
      <td align=middle> <br>
        <table border=0 cellpadding=0 cellspacing=0>
          <tr>
            <td> 
              <% if (strOperation=="addnew"){
              %>
              <input class=stbtm name=update onClick="javascript:if (checkform2()==false);" type=button value="更新記錄">
              <% }else{
                if(strOperation=="modi"){
              %>
              <input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="更新記錄">
              <% 
                }else{
                 %>
              <input class=stbtm type="button" name="Button" value="新 增" onClick="javascript:window.location.href=''<%=request.getRequestURI()%>?act=addnew'';"><% 
                } 
               } %>
               </td>
            <td>
              <input class=stbtm type="button" name="Button" value="返 回" onClick="javascript:window.location.href=''index.jsp'';">
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
  <p> </p>
</div>
</body>
</html>
<SCRIPT LANGUAGE=javascript>
<!--
function checkform2()
{
 var Checkblank = /^(/s*|(/ )|(/.))*$/;
  
  if (Checkblank.test(dataform2.name.value))
 {
          alert("餐館名稱不能為空!");
          dataform2.name.focus();
   return false; 
         } 
 
  if (Checkblank.test(dataform2.phone.value))    
 {
          alert("餐館電話不能為空!");
          dataform2.phone.focus();
   return false; 
         }
         window.dataform2.submit();
  }
  
  function checkform()
{  
 var Checkblank = /^(/s*|(/ )|(/.))*$/;
 if (Checkblank.test(dataform.name.value))
 {
          alert("餐館名稱不能為空!");
          dataform.name.focus();
   return false; 
         }
         
         if (Checkblank.test(dataform.phone.value))
 {
          alert("餐館電話不能為空!");
          dataform.phone.focus();
   return false; 
         }
        

         window.dataform.submit();
  }
-->
</SCRIPT>
說明:本文件的書寫有很多地方并不簡練,因為在程式的開發過程中,過分簡練的程序往往會帶來后期維護的困難。

開發心得:

doc.getElementsByTagName("restaurants").item(int i)的返回值是node 型,如果不是要調用它的屬性值,沒有必要強制轉型為 Element型??梢灾苯硬僮?。本系統因為開發的參考資料的錯誤,所以全都采用了強制轉型??梢栽谝院蟮拈_發中考慮使用node 直接進行操作。

trim() 和 Interger.parseInt() 函數都不可以接受null 型的數值

在tomcat 下左右的文件都是目錄從TOMCAT 算起,具體情況請參見/webapps/canyin/jsp/userjudge.jsp 里關于xml 路徑的寫法。


對原代碼感興趣的朋友請通過如下信箱和我聯系,joard@163.com


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线精品91av| 在线视频中文亚洲| 8090理伦午夜在线电影| 国产精品www色诱视频| 成人在线观看视频网站| 欧美大片网站在线观看| 91久久在线播放| 日韩成人激情影院| 国产欧美一区二区三区久久人妖| 欧美精品18videos性欧美| 高跟丝袜一区二区三区| 国产丝袜高跟一区| 久久精品国产一区| 久久精品视频99| 在线精品播放av| 日韩色av导航| 久久久免费观看视频| 色噜噜狠狠狠综合曰曰曰| 欧美性高跟鞋xxxxhd| 韩国日本不卡在线| 伊人久久久久久久久久久久久| 成人精品久久av网站| 久久人体大胆视频| 欧美午夜精品伦理| 日本精品免费观看| 亚洲自拍av在线| 少妇av一区二区三区| 在线观看欧美日韩国产| 亚洲人午夜精品免费| 国产精品扒开腿做爽爽爽的视频| 国产乱人伦真实精品视频| 亚洲第一色中文字幕| 精品久久久久久久中文字幕| 欧美乱人伦中文字幕在线| 欧美成人精品一区二区三区| 亚洲少妇激情视频| 国产在线拍揄自揄视频不卡99| 国产精品免费一区二区三区都可以| 亚洲一区二区三区乱码aⅴ| 成人黄色午夜影院| 97成人精品区在线播放| 色噜噜亚洲精品中文字幕| 欧美大片在线免费观看| 尤物99国产成人精品视频| 岛国精品视频在线播放| 日av在线播放中文不卡| 国产精品久久久久久久午夜| 亚洲国产99精品国自产| 这里只有精品在线播放| 97在线看福利| 日韩中文字幕网站| 神马久久久久久| 国产精品扒开腿做爽爽爽男男| 欧美日韩精品在线| 国产亚洲在线播放| 国产精品久久久久久久久久尿| 菠萝蜜影院一区二区免费| 久久亚洲综合国产精品99麻豆精品福利| 日韩精品视频免费| 97av在线视频免费播放| 欧美黑人狂野猛交老妇| 精品呦交小u女在线| 精品亚洲va在线va天堂资源站| 日韩欧美精品网址| 久久福利网址导航| 国产亚洲精品综合一区91| 国产精品久久99久久| 视频直播国产精品| 91精品久久久久久久久久久久久| 91久久久久久久久| 日本免费一区二区三区视频观看| 91亚洲国产成人精品性色| 久久精品2019中文字幕| 精品久久久国产| 欧美影院成年免费版| 97精品国产aⅴ7777| 亚洲国产精品va| 久久久在线观看| 国产精品欧美风情| 成人妇女免费播放久久久| 亚洲国产精品久久91精品| 久久久久久有精品国产| 久久99精品久久久久久青青91| 97色在线播放视频| 国产精品吹潮在线观看| 国产日韩视频在线观看| 久久免费视频观看| 91在线精品视频| 国产在线精品一区免费香蕉| 日韩中文在线中文网三级| 国产精品久久9| 色噜噜国产精品视频一区二区| 国内精品久久久久久久久| 欧美精品激情blacked18| www国产亚洲精品久久网站| 亚洲欧美变态国产另类| 亚洲成人av中文字幕| 日韩精品亚洲元码| 国产日本欧美视频| 中文字幕亚洲一区二区三区五十路| 久久久精品欧美| 7777免费精品视频| 狠狠躁夜夜躁人人躁婷婷91| 欧美午夜激情在线| 正在播放亚洲1区| 国产丝袜一区二区| 久久在线视频在线| 91久久久久久| 91久久精品国产91久久性色| 国产精品高潮呻吟久久av无限| 成人激情视频免费在线| 中文字幕v亚洲ⅴv天堂| 欧美最顶级的aⅴ艳星| 亚洲国产精品视频在线观看| 国产网站欧美日韩免费精品在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 中文字幕亚洲欧美日韩在线不卡| 91豆花精品一区| 在线免费看av不卡| 中文字幕亚洲欧美日韩高清| 中文字幕一区电影| 亚洲精品美女在线观看| 国产欧美日韩免费看aⅴ视频| 欧美精品免费在线观看| 91美女片黄在线观| 一个人看的www久久| 日韩av资源在线播放| 久久精品国产综合| 国产亚洲成av人片在线观看桃| 国产视频福利一区| 国产精品视频中文字幕91| 亚洲福利在线看| 欧美xxxx综合视频| 国产主播喷水一区二区| 69国产精品成人在线播放| 尤物九九久久国产精品的特点| 欧美成人在线网站| 久热在线中文字幕色999舞| 国产午夜精品理论片a级探花| 欧美精品videosex牲欧美| 91精品久久久久久久久久入口| 欧美激情视频免费观看| 欧美午夜宅男影院在线观看| 在线观看久久久久久| 国产一区二区三区中文| 国外成人在线播放| 欧美xxxx14xxxxx性爽| 久久免费国产精品1| 欧美小视频在线| 日韩中文字幕国产| 日韩精品电影网| 久久国产视频网站| 国产成人在线一区二区| 高清亚洲成在人网站天堂| 91亚洲精品一区二区| 亚洲国产成人精品电影| 国产精品爱啪在线线免费观看| 亚州国产精品久久久| 国产精品视频在线播放| 亚洲理论在线a中文字幕| 国语自产精品视频在线看| 欧美日韩国产成人| 91性高湖久久久久久久久_久久99| 日韩毛片在线观看|