精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

手把手教你在Eclipse中配置開發(fā)Struts

開發(fā) 后端
本文根據(jù)實(shí)例詳細(xì)介紹了如果在Eclipse中配置并開發(fā)Struts。此前在網(wǎng)上也看到過不少此類文章,而且還是有不少網(wǎng)友問此類問題。所以想根據(jù)自己的實(shí)際經(jīng)驗(yàn),并結(jié)合例子寫一篇詳細(xì)的文章,一個(gè)是方便大家,再一個(gè)也是檢驗(yàn)一下自己的知識。

開發(fā)環(huán)境

JDK1_4_03
tomcat5.0.28
Eclipse3.1.2
MyEcilpse4.1
TomcatPlugin插件
更多Eclipse插件下載

需求

本文所要結(jié)合的Struts應(yīng)用實(shí)例為用戶登錄(logon),用戶登錄(logon)的需求為:

1  接收用戶名和密碼,跳轉(zhuǎn)到成功頁面,并提示“歡迎您登錄!”。
2  如果用戶名為空就提交表單,則提示“請輸入用戶名!”。
3  如果密碼為空就提交表單,則提示“請輸入密碼!”。
4  如果輸入非法用戶名,則提示“請輸入正確的用戶名!”。
5  通過模型組件,保存登錄信息。

登錄應(yīng)用實(shí)例的框架介紹

用戶登錄(logon)應(yīng)用由以下模塊組成:

1  模型(M):模型為一個(gè)JAVABEAN組件-SaveLogon,包含username(用戶名)和userpassword(密碼)兩個(gè)屬性,提供讀取和設(shè)置屬性的方法get/set,以及保存登錄信息的方法saveToDb()。saveToDb的任務(wù)是把登錄信息保存到持久化存儲系統(tǒng)(例如數(shù)據(jù)庫)。

2  視圖(V):視圖包括兩個(gè)JSP文件,以及一個(gè)ActionForm Bean-logonForm。JSP文件分別為:logon.jsp、success.jsp。logon.jsp負(fù)責(zé)接受用戶輸入的用戶名和密碼以及顯示出錯(cuò)信息,success.jsp負(fù)責(zé)顯示登錄成功信息。

3  控制器(C):控制器為Action類logonAction。對數(shù)據(jù)進(jìn)行業(yè)務(wù)邏輯驗(yàn)證、調(diào)用模型組件保存登錄信息、選擇視圖組件返回給用戶。

Struts的工作機(jī)制

用戶在視圖組件(logon.jsp)中輸入用戶名和密碼并提交HTML表單,Struts框架會(huì)先讀取WEB.XML中關(guān)于servlet的配置,然后自動(dòng)將表單數(shù)據(jù)封裝到ActionForm Bean中,在本例中是logonForm。logonForm會(huì)對提交的數(shù)據(jù)進(jìn)行數(shù)據(jù)合法性驗(yàn)證(例如最短長度、是否包含非法字符等)。如果ActionForm Bean驗(yàn)證未通過,則logonForm返回ActionErrors對象,Struts框架會(huì)把ActionErrors對象保存在request范圍內(nèi),并把請求轉(zhuǎn)發(fā)到視圖組件,并在視圖組件中通過﹤?xml:namespace prefix = html />標(biāo)簽,展示request范圍內(nèi)的ActionErrors對象所包含的錯(cuò)誤信息;如果通過ActionForm Bean驗(yàn)證,則logonForm返回的ActionErrors對象為NULL,Struts框架將表單數(shù)據(jù)提交到控制器組件logonAction,控制器對表單數(shù)據(jù)進(jìn)行業(yè)務(wù)邏輯驗(yàn)證,如果logonAction驗(yàn)證未通過,則創(chuàng)建包含錯(cuò)誤信息的ActionMessages對象,并通過saveErrors方法把ActionMessages對象保存到request范圍內(nèi),并把請求轉(zhuǎn)發(fā)到視圖組件,并在視圖組件中通過標(biāo)簽,展示request范圍內(nèi)的ActionErrors對象所包含的錯(cuò)誤信息;如果logonAction驗(yàn)證通過,則Struts框架訪問模型組件,然后Struts框架會(huì)返回ActionFoward對象,并根據(jù)Struts-config.xml文件的配置情況,決定將ActionFoward對象包含的轉(zhuǎn)發(fā)信息傳遞到那一個(gè)視圖組件。

部署Struts框架

Struts的工作機(jī)制大家都有了一定的了解了,現(xiàn)在介紹如何在Eclipse中部署Struts框架。

本文的環(huán)境前文已經(jīng)提到,Eclipse以及其插件MyEclipse和TomcatPlugin的安裝本文不介紹。

1    新建一個(gè)項(xiàng)目

1)  選擇Java >> Tomcat Project,下一步,如圖一

Tomcat Project
(圖一)

2)填寫項(xiàng)目名稱,如果不采用項(xiàng)目所在目錄的缺省值,請修改,點(diǎn)擊完成。如圖二

項(xiàng)目名稱
(圖二)

#p#

2    創(chuàng)建Struts框架

1)    右鍵選擇項(xiàng)目 >> 新建 >> 其他 >> MyEclipse >> Web-Struts >> Struts 1.2 >> Struts 1.2 Form,Action & JSP。如圖三。如果這一步出現(xiàn)錯(cuò)誤,本文不做描述,請參考我的另一邊文章-MyEclipse中創(chuàng)建Struts出現(xiàn)錯(cuò)誤的解決辦法。

新建Struts框架
(圖三)

2)    配置Struts ActionForm  

因?yàn)楸疚牡腟truts應(yīng)用實(shí)例為用戶登錄,所以Use case選用logon。Superclass選擇如圖所示,其他默認(rèn)。如圖四

配置Struts ActionForm
(圖四)

接下來填寫Optional Details,輸入Form表單項(xiàng),本例為用戶名(username)和密碼(userpassword)。點(diǎn)擊Add,輸入請參考圖五、圖六。

Form表單項(xiàng)
(圖五)

輸入用戶名
(圖六)

輸后完畢,Optional Details的Form Properties中會(huì)顯示。如圖七

Form Properties
(圖七)

Methods選項(xiàng)卡的設(shè)置我們采用默認(rèn)設(shè)置,不去修改。

點(diǎn)擊JSP選項(xiàng)卡,將“Create JSP form”選項(xiàng)的勾選中,采用默認(rèn)設(shè)置“/form/logon.jsp”。如圖八

Form Declaration
(圖八)

#p#

3)    配置Struts Action

以上步驟完成了對Form的配置,下面配置Action。

在圖八中點(diǎn)擊下一步,采用默認(rèn)即可。如圖九

Struts Action
(圖九)

Parameter和Methods選項(xiàng)也采用默認(rèn)。

點(diǎn)擊Forwards選項(xiàng)卡,點(diǎn)擊Add,配置成功頁面信息。本文選取根目錄的success.jsp作為成功頁面,Name為logon_sc。如圖十

配置成功
(圖十)

輸后完畢,Optional Details的Forwards中會(huì)顯示。如圖十一

Option Details
(圖十一)

點(diǎn)擊完成。

Struts已經(jīng)配置完畢??纯碋clipse中,項(xiàng)目中多了一些東東,例如struts相關(guān)的jar,以及struts-config.xml和tld文件。struts-config.xml的代碼如下:

#p#

代碼清單一(struts-config.xml)

﹤?xml version="1.0" encoding="UTF-8"?>
﹤!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "

﹤struts-config>

﹤data-sources />

﹤form-beans >

﹤!--這里是ActionForm的配置信息,ActionForm Bean的name為logonForm,對應(yīng)的類為com.mystruts.struts.form.LogonForm-->

﹤form-bean name="logonForm" type="com.mystruts.struts.form.LogonForm" />

﹤/form-beans>

﹤global-exceptions />

﹤global-forwards />

﹤action-mappings >

﹤!--這里是Action組件的配置信息,描述了從特定的請求路徑到響應(yīng)的Action的映射-->

﹤!--attribute設(shè)置Action關(guān)聯(lián)的ActionForm在request或者session范圍內(nèi)的key.就是在request或者session共享內(nèi)的名稱-->

﹤!--input指定包含表單的URL,當(dāng)表單驗(yàn)證失敗的時(shí)候發(fā)送的URL-->

﹤!--name指定和該Action關(guān)聯(lián)的Form名字.該名字必須是在form-bean中定義過的,可寫可不寫-->

﹤!--path指定請求訪問Action的路徑,必須以/開頭-->

﹤!--scope指定Form的存在范圍,例如request-->

﹤!--type指定Action組件對應(yīng)的類-->

﹤action

attribute="logonForm"

input="/form/logon.jsp"

name="logonForm"

path="/logon"

scope="request"

type="com.mystruts.struts.action.LogonAction">

﹤!--這里是forward,即局部轉(zhuǎn)發(fā)配置信息,登錄成功后轉(zhuǎn)向/success.jsp,name為logon_sc-->

﹤forward

name="logon_sc"

path="/success.jsp"

/>

﹤/action>

﹤/action-mappings>

﹤!--這里是消息資源文件的配置信息,用來配置Resource Bundle.用于存放本地文本消息文件。parameter指定文件名,不包含后綴名。-->

﹤message-resources parameter="com.mystruts.struts.ApplicationResources" />

﹤/struts-config>

創(chuàng)建消息資源文件

視圖組件將使用標(biāo)簽來輸出文本內(nèi)容,這些內(nèi)容來自于Resource Bundle。Resource Bundle對應(yīng)消息資源文件。

代碼清單二(ApplicationResources.properties)

# 這里是注釋
logon.page.title = 我的第一個(gè)Struts

logon.username.error = 請輸入用戶名!

logon.userpassword.error = 請輸入密碼!

logon.badusername.error = 用戶名不能為admin!

logon.baduserpassword.error = 密碼不能為123456!

logon.success = 歡迎您登錄!

為了實(shí)現(xiàn)國際化,消息資源文件中的漢字采用的是UTF-8編碼。查看如何實(shí)現(xiàn)漢字轉(zhuǎn)化為UTF-8。

創(chuàng)建JSP文件

logon.jsp(所在路徑為/form/)接收用戶輸入的用戶名和密碼,并顯示表單驗(yàn)證失敗的錯(cuò)誤信息。success.jsp顯示登錄成功的信息。

JSP文件全部使用客戶化標(biāo)簽,無JAVA代碼,輸入的文本內(nèi)容完全由標(biāo)簽提供。

代碼清單三(logon.jsp)

﹤%@ page contentType="text/html;charset=UTF-8" language="java"%>
﹤%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

﹤%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

﹤%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

 

﹤html>

﹤head>

﹤!--title使用客戶化標(biāo)簽,文本內(nèi)容對應(yīng)的是消息資源文件中l(wèi)ogon.page.title的值-->

﹤title>﹤bean:message key="logon.page.title"/>﹤/title>

﹤/head>

﹤body>

﹤html:form action="/logon" method="POST">

用戶名:﹤html:text property="username"/>﹤html:errors property="username"/>﹤br/>

密 碼:﹤html:password property="userpassword"/>﹤html:errors property="userpassword"/>﹤br/>

﹤html:submit value="登錄"/>﹤html:reset value="取消"/>

﹤/html:form>

﹤/body>

﹤/html> 

代碼清單四(success.jsp)

﹤%@ page language="java" pageEncoding="UTF-8"%>
﹤%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

﹤%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

﹤%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

﹤html:html lang="true">

﹤head>

﹤html:base />

﹤title>success.jsp﹤/title>

﹤/head>

 

﹤body>

﹤logic:present name="savelogon" scope="request">

﹤bean:write name="savelogon" property="username"/>

﹤bean:message key="logon.success"/>

﹤/logic:present>

﹤/body>

﹤/html:html>

 

創(chuàng)建ActionForm Bean組件logonFrom

用戶提交HTML表單后,Struts框架會(huì)自動(dòng)把表單數(shù)據(jù)封裝到ActionForm Bean(本例是logonForm)中。ActionForm Bean的屬性必須與HTML表單的字段一一對應(yīng)。ActionForm Bean會(huì)對表單數(shù)據(jù)進(jìn)行驗(yàn)證,并提供將HTML表單的字段值重置為默認(rèn)值的方法(等同于HTML中Form表單的Reset)。

代碼清單五(logonFrom.java)

package com.mystruts.struts.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

/**
* MyEclipse Struts
* Creation date: 02-27-2006
*
* XDoclet definition:
* @struts.form name="logonForm"
*/
public class LogonForm extends ActionForm {

// --------------------------------------------------------- Instance Variables

/** userpassword property */
private String userpassword;

/** username property */
private String username;

// --------------------------------------------------------- Methods

/**
* Method validate
* @param mapping
* @param request
* @return ActionErrors
*/
//用于表單驗(yàn)證的validate方法
public ActionErrors validate(
ActionMapping mapping,
HttpServletRequest request) {


//聲明一個(gè)ActionErrors對象
ActionErrors errors = new ActionErrors();

//如果用戶名驗(yàn)證失敗,將ActionMessage對象保存到ActionErrors對象errors中。logon.username.error對應(yīng)消息資源文件中的logon.username.error的值。
if(username==null || username.length()<3){
errors.add("username", new ActionMessage("logon.username.error"));
}


//如果密碼驗(yàn)證失敗,將ActionMessage對象保存到ActionErrors對象errors中。logon.userpassword.error對應(yīng)消息資源文件中的logon.userpassword.error的值。
if(userpassword==null || userpassword.length()<3){
errors.add("userpassword", new ActionMessage("logon.userpassword.error"));
}
// TODO Auto-generated method stub

//返回ActionErrors對象errors,Struts框架會(huì)把errors保存在request范圍內(nèi),并將請求轉(zhuǎn)發(fā)到視圖組件logon.jsp中,通過來顯示錯(cuò)誤信息
return errors;
}

/**
* Method reset
* @param mapping
* @param request
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {

// TODO Auto-generated method stub
this.username = null;
this.userpassword = null;
}

/**
* Returns the userpassword.
* @return String
*/
public String getUserpassword() {
return userpassword;
}

/**
* Set the userpassword.
* @param userpassword The userpassword to set
*/
public void setUserpassword(String userpassword) {
this.userpassword = userpassword;
}

/**
* Returns the username.
* @return String
*/
public String getUsername() {
return username;
}

/**
* Set the username.
* @param username The username to set
*/
public void setUsername(String username) {
this.username = username;
}

}

 

創(chuàng)建控制器Action組件logonAction

logonAction對表單數(shù)據(jù)進(jìn)行業(yè)務(wù)邏輯驗(yàn)證。

代碼清單六(logonAction.java)

package com.mystruts.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.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import com.mystruts.struts.SaveLogon;
import com.mystruts.struts.form.LogonForm;

/**
* MyEclipse Struts
* Creation date: 02-27-2006
*
* XDoclet definition:
* @struts.action path="/logon" name="logonForm" input="/form/logon.jsp" scope="request" validate="true"
* @struts.action-forward name="logon_sc" path="/success.jsp"
*/
public class LogonAction extends Action {

// --------------------------------------------------------- Instance Variables

// --------------------------------------------------------- Methods

/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
//通過ActionForm Bean的驗(yàn)證后,Struts框架會(huì)自動(dòng)調(diào)用execute方法
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
// TODO Auto-generated method stub

//獲得表單數(shù)據(jù)中的username
String username = (String)((LogonForm)form).getUsername();

//獲得表單數(shù)據(jù)中的userpassword
String userpassword = (String)((LogonForm)form).getUserpassword();

//定義非法用戶名
String badusername = "admin";

//定義非法密碼
String baduserpassword = "123456";


//聲明一個(gè)ActionMessages對象
ActionMessages errors = new ActionMessages();

if(badusername.equals(username)){

//如果用戶名驗(yàn)證失敗,將ActionMessage對象保存到ActionMessages對象errors中。logon.badusername.error對應(yīng)消息資源文件中的logon.badusername.error的值。
errors.add("username",new ActionMessage("logon.badusername.error",badusername));

//保存ActionMessages對象errors到request范圍。
saveErrors(request,errors);

//返回ActionForward對象,Struts框架會(huì)把請求轉(zhuǎn)發(fā)到視圖組件logon.jsp中,通過來顯示錯(cuò)誤信息。
return(new ActionForward(mapping.getInput()));
}

if(userpassword.equals(baduserpassword)){
errors.add("userpassword",new ActionMessage("logon.baduserpassword.error",baduserpassword));
saveErrors(request,errors);
return(new ActionForward(mapping.getInput()));
}


//定義模型組件SaveLogon
SaveLogon sl = new SaveLogon();
sl.setUsername(username);
sl.setUserpassword(userpassword);
sl.saveToDb();


//控制器組件將SavaLogon對象保存到request范圍,savalogon對應(yīng)視圖組件success.jsp中﹤?xml:namespace prefix = login />﹤login:present>標(biāo)簽的name以及﹤?xml:namespace prefix = bear />﹤bear:write>標(biāo)簽的name
request.setAttribute("savelogon",sl);

//清除request范圍內(nèi)的ActionForm Bean,因?yàn)楹竺娴恼埱笠呀?jīng)不需要了
request.removeAttribute(mapping.getAttribute());


//控制器組件將信息轉(zhuǎn)交到視圖組件logon.jsp,logon_sc對應(yīng)struts-config.xml中的forward元素的name
return(mapping.findForward("logon_sc"));
}

}

 

創(chuàng)建模型組件SaveLogon

本模型提供get/set方法,以及saveToDb方法。在例子中并未實(shí)現(xiàn)saveToDb方法。

代碼清單七(SaveLogon.java)

package com.mystruts.struts;

/**
* @author Administrator
*
*/
public class SaveLogon {

private String username = null;
private String userpassword = null;

public void setUsername(String username){
this.username = username;
}

public String getUsername(){
return this.username;
}

public void setUserpassword(String userpassword){
this.userpassword = userpassword;
}

public String getUserpassword(){
return this.userpassword;
}

public void saveToDb(){

}


}

#p#

運(yùn)行

如果用戶名和密碼為空,運(yùn)行結(jié)果如圖十二、圖十三、圖十四所示。


(圖十二)

如果用戶名為admin,運(yùn)行結(jié)果如圖十三


(圖十三)

如果通過驗(yàn)證,運(yùn)行結(jié)果如圖十四


(圖十四)

 

 

小結(jié)

1    為了降低偶合度,應(yīng)該建立一個(gè)存放常量的JAVA文件。例如logonAction.java中的String badusername = "admin",或者request.setAttribute("savelogon",sl)的第一個(gè)參數(shù)。

2    要實(shí)現(xiàn)Struts的國際化,支持多國語言,編碼方式一定要為UTF-8。

3    在配置Action時(shí),見圖九,如果選取redirect,則在struts-config.xml中的action元素會(huì)多一個(gè)屬性,redirect="true"。運(yùn)行的結(jié)果是success.jsp中無法獲得request范圍內(nèi)的savelogon對象。

您正在閱讀的是:手把手教你在Eclipse中配置開發(fā)Struts

【編輯推薦】

  1. 在Eclipse中安裝TomcatPlugin
  2. jsp開發(fā)所需要的eclipse插件及安裝 配置方法
  3. JDK安裝卸載與Eclipse的安裝配置
  4. Eclipse+MyEclipse安裝及環(huán)境配置
  5. Myeclipse6.0.1安裝及其配置
責(zé)任編輯:book05 來源: cnblogs
相關(guān)推薦

2021-02-26 11:54:38

MyBatis 插件接口

2021-08-02 07:35:19

Nacos配置中心namespace

2024-04-02 08:58:13

2024-03-05 18:27:43

2022-11-28 08:23:14

IDEAGradle配置

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2011-05-03 15:59:00

黑盒打印機(jī)

2025-05-07 00:31:30

2011-01-10 14:41:26

2020-06-01 16:25:43

WindowsLinux命令

2022-06-30 08:13:44

PythonWeb編程語言

2011-02-22 17:42:26

2023-04-26 12:46:43

DockerSpringKubernetes

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2022-12-07 08:42:35

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)

2010-01-07 14:24:54

Linux防火墻
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲一区二区在线免费| 中文字幕欧美人与畜| 天天爽夜夜爽夜夜爽精品| 日韩母乳在线| 欧美午夜一区二区三区免费大片| 亚洲精品美女久久7777777| 91丨porny丨在线中文 | 亚洲人体一区| 囯产精品一品二区三区| 日韩不卡一区二区| 久久精品一本久久99精品| 亚洲自拍偷拍精品| 国产美女久久| 午夜欧美在线一二页| 亚洲v国产v在线观看| 成人免费观看在线视频| 青青草原综合久久大伊人精品优势| 久久av红桃一区二区小说| 老鸭窝一区二区| 国产va免费精品观看精品| 欧美性xxxx极品hd满灌| 精品国产一区二区三区在线| 欧美日韩伦理片| 国产综合色在线| 日韩**中文字幕毛片| 天天天天天天天天操| 免费短视频成人日韩| 欧美一级日韩免费不卡| 亚洲中文字幕无码不卡电影| 欧美日韩经典丝袜| 中文字幕在线观看一区二区| 老司机精品福利在线观看| 国产黄色高清视频| 日韩国产精品久久久久久亚洲| 国内精品久久久久久久| 精品国产欧美日韩不卡在线观看| 欧美天天综合| 亚洲精品一区二三区不卡| www.四虎精品| 日本免费一区二区视频| 欧美久久久久中文字幕| 激情 小说 亚洲 图片: 伦| 在线观看特色大片免费视频| 亚洲电影中文字幕在线观看| 青青草综合在线| av电影高清在线观看| 国产精品传媒在线| 尤物一区二区三区| fc2在线中文字幕| 国产喷白浆一区二区三区| 久久国产精品高清| 天堂在线中文资源| av电影在线观看不卡| 国内精品久久久久久久果冻传媒| 精品国产伦一区二区三| 国产一区二区三区不卡在线观看| 91精品视频观看| 国产一区二区小视频| 麻豆精品一区二区| 成人日韩在线电影| 国产免费不卡av| 国产麻豆精品95视频| 99porn视频在线| 动漫av一区二区三区| 国产成人日日夜夜| 国产一区二区三区黄| 欧美天堂在线视频| 99国产精品99久久久久久| 久久国产精品久久精品国产| 青青草视频免费在线观看| 91视频国产观看| 日本欧美色综合网站免费| 高清中文字幕一区二区三区| 国产精品三级电影| 黄色一级视频播放| 99爱在线观看| 在线一区二区三区四区| 一级做a免费视频| 日韩欧美一级| 亚洲精品小视频| www.4hu95.com四虎| 希岛爱理一区二区三区| 欧美另类老女人| 日本亚洲色大成网站www久久| 国产日韩亚洲| 国产精品一久久香蕉国产线看观看| 一区二区三区亚洲视频| 国产成人av电影免费在线观看| 精品一区二区不卡| 亚洲成人三级| 亚洲高清视频在线| 日韩在线第三页| 国产精品美女久久久久人| 亚洲成人999| 欧美人与性囗牲恔配| 欧美1区视频| 日产精品久久久一区二区福利| 国产理论片在线观看| 99精品偷自拍| 中文字幕超清在线免费观看| 黄在线观看免费网站ktv| 欧美性猛片xxxx免费看久爱| 潘金莲一级淫片aaaaaaa| 精品国产一区二区三区香蕉沈先生| 中文字幕精品久久久久| 天天操天天射天天爽| 日韩电影在线看| 国产91精品一区二区绿帽| 成人在线免费电影| 亚洲亚洲人成综合网络| 911福利视频| 亚洲精品一级二级三级| 欧美成年人视频| 波多野结衣电影在线播放| 成人亚洲一区二区一| 亚洲一区二区不卡视频| 在线观看欧美日韩电影| 日韩欧美精品在线视频| 内射毛片内射国产夫妻| 9久re热视频在线精品| 91人成网站www| 成人午夜电影在线观看| 精品久久久久久久久中文字幕| 中文字幕在线观看日| 小说区图片区色综合区| 久久久综合av| 99国产精品欲| 中文字幕一区二区三区乱码在线| 99色精品视频| 免费日韩一区二区三区| 欧美成人精品影院| 国产又大又长又粗| 中文字幕av一区二区三区免费看| 国产日产欧美视频| 久久精品凹凸全集| 欧美激情视频播放| 国产黄色av片| 一区二区欧美视频| 两性午夜免费视频| 久久久久久久久99精品大| 国产日韩欧美黄色| 99re在线视频| 欧美三级在线播放| 成熟人妻av无码专区| 久久一二三四| 日韩精品伦理第一区| 最新欧美色图| 亚洲四色影视在线观看| 日本熟女毛茸茸| 久久久久国产精品麻豆ai换脸| 精品久久久久久久久久中文字幕| 亚洲经典视频| 久久免费成人精品视频| 少妇人妻精品一区二区三区| 五月婷婷另类国产| 北岛玲一区二区| 国产美女精品| 欧美在线日韩精品| 国产原创一区| 久久国产精品影视| 亚洲国产一二三区| 精品国产91久久久| 精品少妇人妻一区二区黑料社区| 可以看av的网站久久看| 欧美性天天影院| 日本美女久久| 美女999久久久精品视频 | 欧美成人一区二区三区片免费 | 亚洲高清无码久久| 日韩视频二区| 欧美一区二区在线| 狂野欧美性猛交xxxx| 伦理中文字幕亚洲| 黑人精品一区二区三区| 五月婷婷另类国产| 日本一区二区视频在线播放| 精品亚洲欧美一区| 成年女人18级毛片毛片免费| 日韩aaa久久蜜桃av| 国产精品91免费在线| 久做在线视频免费观看| 欧美成人性福生活免费看| 精品美女久久久久| 中文成人av在线| 18深夜在线观看免费视频| 99视频一区| 一级二级三级欧美| 精品三级在线观看视频| 国产精品久久久999| 在线观看电影av| 亚洲乱码一区av黑人高潮| 97在线公开视频| 亚洲一区二区五区| 亚洲图片第一页| 成人在线视频一区二区| 亚洲男人天堂色| 午夜欧美理论片| 日本欧洲国产一区二区| 97久久综合精品久久久综合| 欧美性做爰毛片| 国产成人无吗| 亚洲精品小视频| 亚洲美女性生活| 欧美中文字幕不卡| 中文字幕一区二区三区手机版| 国产精品嫩草久久久久| 日韩av手机在线播放| 极品少妇xxxx精品少妇| 国产日韩一区二区在线| 韩国亚洲精品| 一区二区三区久久网| 欧洲在线一区| av日韩免费电影| 久久影视精品| 国产精品电影网| 春色校园综合激情亚洲| 欧美精品在线观看91| 午夜视频在线观看网站| 亚洲欧美一区二区三区四区 | 亚洲最新av网址| 黄色成人一级片| 777午夜精品视频在线播放| 无码人妻精品一区二区三区蜜桃91 | 美女久久久精品| 欧美日韩亚洲一| 伊人精品成人久久综合软件| 一本—道久久a久久精品蜜桃| 九九久久婷婷| 久久草视频在线看| 高清日韩欧美| 成人午夜电影在线播放| 国产精品国产三级在线观看| 国产精品女人网站| 一区在线影院| 国产成人精品视频| 免费看av不卡| 欧美一区二区视频97| 欧美日韩在线观看首页| 91极品女神在线| 国产精品25p| 午夜精品一区二区三区在线播放| 欧美xxx黑人xxx水蜜桃| 欧美日韩xxxxx| 91在线中文| 九九热在线精品视频| 污污在线观看| 欧美极品美女视频网站在线观看免费| 国产精品剧情| 乱亲女秽乱长久久久| 丝袜综合欧美| 久久久久中文字幕| 欧美少妇网站| 日本视频久久久| 欧美大片1688网站| 国产精品一区专区欧美日韩| 久久亚洲精品人成综合网| 亚洲一区二区三区sesese| 蜜桃精品视频| 国产成人成网站在线播放青青| 99re91这里只有精品| 国产亚洲自拍偷拍| 嫩草影视亚洲| 亚洲高清不卡一区| 91精品综合久久久久久久久久久| 强伦女教师2:伦理在线观看| 中文无码久久精品| 免费人成在线观看视频播放| 亚洲国产一区二区三区a毛片| 欧美不卡在线播放| 久久精品一区二区国产| 婷婷激情四射五月天| 精彩视频一区二区| 精品1卡二卡三卡四卡老狼| 2欧美一区二区三区在线观看视频| 久久久久久九九九九九| 中文字幕亚洲区| 久久精品久久精品久久| 日韩欧美国产高清91| 中文字幕免费播放| 欧美一区二区三区小说| 人妻一区二区三区免费| 亚洲欧洲在线播放| a级网站在线播放| 97色在线观看| 日韩一区二区三区四区五区 | 97香蕉超级碰碰久久免费的优势| **欧美日韩在线观看| 91美女高潮出水| 欧美aaaaa级| 亚洲高清视频一区二区| 欧美久久成人| 热久久精品免费视频| 国产酒店精品激情| 在线免费观看日韩av| 亚洲欧美另类图片小说| 亚洲欧美综合自拍| 日韩视频在线永久播放| 免费黄色片在线观看| 大胆人体色综合| 97久久香蕉国产线看观看| 亚洲free性xxxx护士hd| 国产成人三级| 国产xxxx振车| 久久国产欧美日韩精品| 亚洲第一黄色网址| 亚洲精品五月天| 亚洲精品无码久久久久| 欧美精品一区二区三区很污很色的| 91网在线播放| 2020欧美日韩在线视频| 久久视频社区| 亚洲欧美日韩另类精品一区二区三区 | 国产suv精品一区二区883| 99久久99久久精品免费| 精品动漫一区二区三区| www.亚洲欧美| 久久色在线播放| 欧美日韩五码| 精品在线视频一区二区| 欧美日韩亚洲一区| 污视频网站观看| 久久久久国产精品麻豆ai换脸 | 亚洲一区二区三区日韩| 亚洲福利一区二区| 国产视频一区二区三| 在线观看亚洲视频| 欧美xxx视频| 久久精品欧美| 9国产精品视频| 国产a级片视频| 亚洲欧美区自拍先锋| 伊人精品一区二区三区| 国产小视频91| 日韩欧美看国产| 久久综合久久综合这里只有精品| 精品999网站| 色综合久久久无码中文字幕波多| 亚洲天天做日日做天天谢日日欢 | 精品1区2区在线观看| 在线看一级片| av成人午夜| 91久久久久| 亚州av综合色区无码一区| 亚洲国产成人高清精品| 丰满人妻一区二区三区免费视频| 欧美另类交人妖| 99这里只有精品视频| 久久99久久99精品| 成人丝袜高跟foot| 国产乡下妇女做爰毛片| 精品国偷自产国产一区| av老司机在线观看| 久久久久久国产精品免费免费| 一区二区三区精品视频在线观看 | 香蕉久久精品| 国产一区二区三区精彩视频| 久久夜色精品国产噜噜av| chinese国产精品| 国产一区二区三区在线播放免费观看| 吞精囗交69激情欧美| 亚洲成人第一| 久久精品国产精品青草| 精品自拍偷拍视频| 日韩美女视频一区二区在线观看| 黑人极品ⅴideos精品欧美棵| 国产精品中出一区二区三区| 国产精品一级| 最新中文字幕av| 欧美电影一区二区三区| 免费看电影在线| 久久香蕉综合色| 日本亚洲三级在线| 91视频青青草| 亚洲精品一区二区三区四区高清| a国产在线视频| 欧美在线日韩精品| 精品亚洲porn| 亚洲免费激情视频| 中日韩美女免费视频网站在线观看 | 老熟妇精品一区二区三区| 色婷婷av一区二区三区大白胸 | 蜜桃久久一区二区三区| 欧美性受xxx| 91tv官网精品成人亚洲| 999精品免费视频| 欧美日韩专区在线| 视频在线观看入口黄最新永久免费国产| 国产尤物99| 美国十次了思思久久精品导航| 麻豆精品一区二区三区视频| 亚洲男人的天堂在线| av在线亚洲一区| 日韩精品视频久久| 一区二区三区精品| 国产黄在线观看免费观看不卡| 亚洲aⅴ男人的天堂在线观看| 国产日韩1区| 青娱乐av在线| 在线精品高清中文字幕| 久久97精品|