日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

springmvc入门学习

發(fā)布時(shí)間:2023/12/19 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springmvc入门学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2017.05.24:

spring控制器

Controller控制器,是MVC中的部分C,為什么是部分呢?因?yàn)榇颂幍目刂破髦饕?fù)責(zé)功能處理部分:
1、收集、驗(yàn)證請(qǐng)求參數(shù)并綁定到命令對(duì)象;
2、將命令對(duì)象交給業(yè)務(wù)對(duì)象,由業(yè)務(wù)對(duì)象處理并返回模型數(shù)據(jù);
3、返回ModelAndView(Model部分是業(yè)務(wù)對(duì)象返回的模型數(shù)據(jù),視圖部分為邏輯視圖名)。
還記得DispatcherServlet嗎?主要負(fù)責(zé)整體的控制流程的調(diào)度部分:
1、負(fù)責(zé)將請(qǐng)求委托給控制器進(jìn)行處理;
2、根據(jù)控制器返回的邏輯視圖名選擇具體的視圖進(jìn)行渲染(并把模型數(shù)據(jù)傳入)。
因此MVC中完整的C(包含控制邏輯+功能處理)由(DispatcherServlet + Controller)組成。
因此此處的控制器是Web MVC中部分,也可以稱為頁(yè)面控制器、動(dòng)作、處理器。
spring Web MVC支持多種類型的控制器,比如實(shí)現(xiàn)Controller接口,從Spring2.5開(kāi)始支持注解方式的控制器(如@Controller、@RequestMapping、@RequestParam、@ModelAttribute等),我們也可以自己實(shí)現(xiàn)相應(yīng)的控制器(只需要定義相應(yīng)的HandlerMapping和HandlerAdapter即可)。

三種常用控制器:

首先創(chuàng)建一個(gè)實(shí)體(model)

package cn.cfs.springmvc.domain;public class User {//主鍵private Integer id;//用戶名private String username;//密碼private String password;/*** 獲取 主鍵** @return 主鍵*/public Integer getId() {return id;}/*** 設(shè)置 主鍵** @param id 主鍵*/public void setId(Integer id) {this.id = id;}/*** 獲取 用戶名** @return 用戶名*/public String getUsername() {return username;}/*** 設(shè)置 用戶名** @param username 用戶名*/public void setUsername(String username) {this.username = username;}/*** 獲取 密碼** @return 密碼*/public String getPassword() {return password;}/*** 設(shè)置 密碼** @param password 密碼*/public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", password="+ password + "]";}}
(一)CommandController命令控制器

package cn.cfs.springmvc.controller;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.validation.BindException; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractCommandController; import cn.cfs.springmvc.domain.User;public class UserCommandController extends AbstractCommandController {//綁定數(shù)據(jù)public UserCommandController() {this.setCommandClass(User.class);this.setCommandName("user");}@Overrideprotected ModelAndView handle(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {User user =(User)command;System.out.println(user.toString());return new ModelAndView("index");} }

action-servlet.xml配置文件中的代碼:

<!-- 采用className的方式去訪問(wèn) --> <bean id="userCommandController" class="cn.cfs.springmvc.controller.UserCommandController"></bean>

前臺(tái)通過(guò)訪問(wèn)url:http://192.168.1.253:8082/springmvc_01/usercommandcontroller.action?id=99&username=aaa&password=ssss?來(lái)測(cè)試

控制臺(tái)打印語(yǔ)句:User [id=99, username=aaa, password=ssss]

(二)SimpleFormController簡(jiǎn)單表單控制器

package cn.cfs.springmvc.controller;import org.springframework.web.servlet.mvc.SimpleFormController; import cn.cfs.springmvc.domain.User;public class UserFormController extends SimpleFormController {//在構(gòu)造方法里去綁定public UserFormController() {this.setCommandClass(User.class);this.setCommandName("user");}@Overrideprotected void doSubmitAction(Object command) throws Exception {User user=(User)command;System.out.println(user.toString());} }

action-servlet.xml配置文件中的代碼:

<!-- 采用className的方式去訪問(wèn) --><bean id="userFormController" class="cn.cfs.springmvc.controller.UserFormController"><property name="formView" value="login" /><property name="successView" value="index" /></bean>

formView 是通過(guò)get方法訪問(wèn)這個(gè)請(qǐng)求處理后跳轉(zhuǎn)的頁(yè)面,successView是通過(guò)post方法訪問(wèn)這個(gè)請(qǐng)求處理后跳轉(zhuǎn)的頁(yè)面。舉個(gè)例子,例如添加用戶,肯定先要跳轉(zhuǎn)到添加用戶的頁(yè)面上,然后在表單中填寫一些用戶信息,點(diǎn)擊保存提交按鈕跳轉(zhuǎn)到控制器中,處理完自己的業(yè)務(wù)代碼再跳到指定頁(yè)面,這種簡(jiǎn)單表單方式就是為了解決這種需求。

訪問(wèn)路徑:http://192.168.1.253:8082/springmvc_01/userformcontroller.action?跳轉(zhuǎn)到添加頁(yè)面的地址,因?yàn)槭侵苯釉跒g覽器敲的所以是get方式訪問(wèn)的,會(huì)跳轉(zhuǎn)到login.jsp頁(yè)面上

login.jsp代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登錄</title> </head> <body><form action="${pageContext.request.contextPath}/userformcontroller.action" method="post"><table><tr><td>用戶名:</td><td><input type="text" name="username" /></td></tr><tr><td>密碼:</td><td><input type="password" name="password" /></td></tr><tr><td colspan="2"><input type="submit" value="保存提交" /></td></tr></table></form></body> </html>

根據(jù)上面login.jsp中代碼所示,輸入完用戶名和密碼后,點(diǎn)擊保存提交按鈕,通過(guò)form中post的方式將表單內(nèi)容提交到userformcontroller.action這個(gè)請(qǐng)求上,回通過(guò)控制器找到doSubmitAction這個(gè)方法,在這個(gè)方法中處理自己業(yè)務(wù)邏輯,最后跳轉(zhuǎn)到index.jsp頁(yè)面上,最后總結(jié)一下,這種方式是通過(guò)get和post提交方式來(lái)區(qū)分跳轉(zhuǎn)的頁(yè)面的,只有post提交方式才會(huì)跳轉(zhuǎn)到帶有處理自己業(yè)務(wù)邏輯的后臺(tái)方法中。

控制臺(tái)打印語(yǔ)句:User [id=null, username=aaaa, password=123456]

(三) WizardFormController向?qū)Э刂破?/span>

package cn.cfs.springmvc.controller;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.validation.BindException; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractWizardFormController; import cn.cfs.springmvc.domain.User;public class UserWizardController extends AbstractWizardFormController {//綁定數(shù)據(jù)public UserWizardController() {this.setCommandClass(User.class);this.setCommandName("user");}/*** 完成提交的函數(shù)*/@Overrideprotected ModelAndView processFinish(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {User user=(User)command;System.out.println(user.toString());return new ModelAndView("index");}/*** 取消方法,配置點(diǎn)擊取消后要跳轉(zhuǎn)的頁(yè)面*/@Overrideprotected ModelAndView processCancel(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {return new ModelAndView("index");} }
action-servlet.xml配置文件中的代碼:

<!-- 采用className的方式去訪問(wèn) --><bean id="userwizardcontroller" class="cn.cfs.springmvc.controller.UserWizardController"><property name="pages"><list><value>/wizard/1</value><value>/wizard/2</value><value>/wizard/3</value></list></property></bean>
list下的value為跳轉(zhuǎn)的頁(yè)面,對(duì)應(yīng)的上下文中會(huì)創(chuàng)建一個(gè)叫wizard的文件夾,以及對(duì)應(yīng)的3個(gè)頁(yè)面文件

訪問(wèn)路徑:http://192.168.1.253:8082/springmvc_01/userwizardcontroller.action?會(huì)按照l(shuí)ist中value的先后順序去加載頁(yè)面


wizard/1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>向?qū)П韱慰刂破?lt;/title> </head> <body><form action="${pageContext.request.contextPath}/userwizardcontroller.action" method="post"><table><tr><td>第一個(gè)頁(yè)面,id<input type="text" name="id" value="${user.id}" /> </td></tr><tr><td><input type="submit" name="_target1" value="下一步" /><input type="submit" name="_cancel" value="取消" /></td></tr></table></form></body> </html>wizard/2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>向?qū)П韱慰刂破?lt;/title> </head> <body><form action="${pageContext.request.contextPath}/userwizardcontroller.action" method="post"><table><tr><td>第二個(gè)頁(yè)面,用戶名<input type="text" name="username" value="${user.username}"/> </td></tr><tr><td><input type="submit" name="_target0" value="上一步" /><input type="submit" name="_cancel" value="取消" /><input type="submit" name="_target2" value="下一步" /></td></tr></table></form></body> </html>
wizard/3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>向?qū)П韱慰刂破?lt;/title> </head> <body><form action="${pageContext.request.contextPath}/userwizardcontroller.action" method="post"><table><tr><td>第三個(gè)頁(yè)面,密碼<input type="text" name="password" value="${user.password}" /> </td></tr><tr><td><input type="submit" name="_target1" value="上一步" /><input type="submit" name="_finish" value="完成" /><input type="submit" name="_cancel" value="取消" /></td></tr></table></form></body> </html>

上面的jsp文件中主要是通過(guò) 提交按鈕的 name名稱去控制上下頁(yè),取消,完成操作的,詳細(xì)請(qǐng)看下面的表格(1-1);

向?qū)П韱慰刂破鲗傩砸挥[表(1-1)
屬性 具體的的含義
_targetN N是可變化的,指具體的頁(yè)碼,從0開(kāi)始,例如當(dāng)前為第二頁(yè),上一頁(yè)則為_(kāi)target0,下一頁(yè)則為_(kāi)target1
_cancel 取消,點(diǎn)擊后請(qǐng)求發(fā)送到后臺(tái)的取消方法中,根據(jù)具體的配置跳轉(zhuǎn)到指定的取消頁(yè)面
_finish 完成,點(diǎn)擊后請(qǐng)求發(fā)送到后臺(tái)的完成方法中,會(huì)自動(dòng)將向?qū)ы?yè)的表單數(shù)據(jù)做拼接,根據(jù)具體的配置跳轉(zhuǎn)到指定的完成請(qǐng)求處理后的頁(yè)面

上述為當(dāng)前springmvc比較常用的控制器,當(dāng)然還有很多,例如默認(rèn)的AbstractController這是最簡(jiǎn)單控制器,很多參數(shù)都需要通過(guò)原始的方法去獲取,后續(xù)還待完善。


數(shù)據(jù)的交互(獲取頁(yè)面數(shù)據(jù)與將數(shù)據(jù)返回到頁(yè)面)

一、從頁(yè)面接收參數(shù)

Spring MVC接收請(qǐng)求提交的參數(shù)值的幾種方法

  • 使用HttpServletRequest獲取

    @RequestMapping("/login.do") public String login(HttpServletRequest request) { String name = request.getParameter("name") String pass = request.getParameter("pass") }
  • 使用@RequestParam注解,和表單的name屬性保持一致

    @RequestMapping("/login.do") public String login(HttpServletRequest request, @RequestParam("pass") String name, @RequestParam("pass") String password) { // 表單屬性是pass,用變量password接收 syso(name); syso(password) }
  • 自動(dòng)注入Bean屬性

    <form action="login.do"> 用戶名:<input name="name"/> 密碼:<input name="pass"/> <input type="submit" value="登陸"> </form> //封裝的User類 public class User{ private String name; private String pass; } @RequestMapping("/login.do") public String login(User user) { syso(user.getName()); syso(user.getPass()); }

二、向頁(yè)面?zhèn)髦?/span>

  • 使用Map、Model和ModelMap
    Java代碼:

    @RequestMapping("/test")public String test(Map<String, Object> map, Model model, ModelMap modelMap){map.put("names", Arrays.asList("caoyc","zhh","cjx"));model.addAttribute("time", new Date());modelMap.addAttribute("city", "ChengDu");modelMap.put("gender", "male");return "hello";}

    JSP頁(yè)面:

    1time:${requestScope.time}<br/>2、names:${requestScope.names }<br/>3、city:${requestScope.city }<br/>4、gender:${requestScope.gender }
  • 使用ModelAndView?ModelAndView(String viewName, Map model) @RequestMapping("/test")public ModelAndView test(){ModelAndView mav=new ModelAndView("hello");mav.addObject("time", new Date());mav.getModel().put("name", "caoyc");return mav;}
  • Session存儲(chǔ):可以利用HttpServletReequest的getSession()方法

    @RequestMapping("/login.do") public String login(String name,String pwd ModelMap model,HttpServletRequest request){ User user = serService.login(name,pwd); HttpSession session = request.getSession(); session.setAttribute("user",user); model.addAttribute("user",user); return "success"; }
  • Spring MVC 默認(rèn)采用的是轉(zhuǎn)發(fā)來(lái)定位視圖,如果要使用重定向,可以如下操作

  • 1. 使用RedirectView 2. 使用redirect:前綴 public ModelAndView login() { RedirectView view = new RedirectView("regirst.do"); return new ModelAndView(view); }

    或者用如下方法,工作中常用的方法:

    public String login(){ //TODO return "redirect:regirst.do"; }

    2017.05.26

    spring DAO

    Spring提供的DAO(數(shù)據(jù)訪問(wèn)對(duì)象)支持主要的目的是便于以標(biāo)準(zhǔn)的方式使用不同的數(shù)據(jù)訪問(wèn)技術(shù), 如JDBC,Hibernate或者JDO等。它不僅可以讓你方便地在這些持久化技術(shù)間切換, 而且讓你在編碼的時(shí)候不用考慮處理各種技術(shù)中特定的異常。
    為了便于以一種一致的方式使用各種數(shù)據(jù)訪問(wèn)技術(shù),如JDBC、JDO和Hibernate, Spring提供了一套抽象DAO類供你擴(kuò)展。這些抽象類提供了一些方法,通過(guò)它們你可以 獲得與你當(dāng)前使用的數(shù)據(jù)訪問(wèn)技術(shù)相關(guān)的數(shù)據(jù)源和其他配置信息。

    Dao支持類:
    JdbcDaoSupport - JDBC數(shù)據(jù)訪問(wèn)對(duì)象的基類。 需要一個(gè)DataSource,同時(shí)為子類提供 JdbcTemplate。
    HibernateDaoSupport - Hibernate數(shù)據(jù)訪問(wèn)對(duì)象的基類。 需要一個(gè)SessionFactory,同時(shí)為子類提供 HibernateTemplate。也可以選擇直接通過(guò) 提供一個(gè)HibernateTemplate來(lái)初始化, 這樣就可以重用后者的設(shè)置,例如SessionFactory, flush模式,異常翻譯器(exception translator)等等。
    JdoDaoSupport - JDO數(shù)據(jù)訪問(wèn)對(duì)象的基類。 需要設(shè)置一個(gè)PersistenceManagerFactory, 同時(shí)為子類提供JdoTemplate。?
    JpaDaoSupport - JPA數(shù)據(jù)訪問(wèn)對(duì)象的基類。 需要一個(gè)EntityManagerFactory,同時(shí) 為子類提供JpaTemplate。?

    (1)Sping對(duì)JdbcDaoSupport的支持

    數(shù)據(jù)庫(kù)建表:

    drop table if exists user; /*==============================================================*/ /* Table: user */ /*==============================================================*/ create table user ( id bigint AUTO_INCREMENT not null, name varchar(24), age int, primary key (id) );
    public class User { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }


    public interface IUserDAO { public void insert(User user); public User find(Integer id); }import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; /** * Created by IntelliJ IDEA.<br> * <b>Note</b>: 基類DAO,提供了數(shù)據(jù)源注入 */ public class BaseDAO { private DataSource dataSource; public DataSource getDataSource() { return dataSource; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public Connection getConnection() { Connection conn = null; try { conn = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }

    public class UserDAO extends BaseDAO implements IUserDAO { public JdbcTemplate getJdbcTemplate(){ return new JdbcTemplate(getDataSource()); } public void insert(User user) { String name = user.getName(); int age = user.getAge().intValue(); // jdbcTemplate.update("INSERT INTO user (name,age) " // + "VALUES('" + name + "'," + age + ")"); String sql = "insert into user(name,age) values(?,?)"; getJdbcTemplate().update(sql,new Object[]{name,age}); } public User find(Integer id) { List rows = getJdbcTemplate().queryForList( "SELECT * FROM user WHERE id=" + id.intValue()); Iterator it = rows.iterator(); if (it.hasNext()) { Map userMap = (Map) it.next(); Integer i = new Integer(userMap.get("id").toString()); String name = userMap.get("name").toString(); Integer age = new Integer(userMap.get("age").toString()); User user = new User(); user.setId(i); user.setName(name); user.setAge(age); return user; } return null; } }

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource" singleton="true"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/springdb</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>leizhimin</value> </property> </bean> <bean id="baseDAO" class="com.lavasoft.springnote.ch05_jdbc03_temp.BaseDAO" abstract="true"><property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <bean id="userDAO"class="com.lavasoft.springnote.ch05_jdbc03_temp.UserDAO" parent="baseDAO"> </bean> </beans>
    import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class SpringDAODemo { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext("D:\\_spring\\src\\com\\lavasoft\\springnote\\ch05_jdbc03_temp\\bean-jdbc-temp.xml"); User user = new User(); user.setName("hahhahah"); user.setAge(new Integer(22)); IUserDAO userDAO = (IUserDAO) context.getBean("userDAO"); userDAO.insert(user); user = userDAO.find(new Integer(1)); System.out.println("name: " + user.getName()); } }
    (2) Spring DAO之Hibernate

    HibernateDaoSupport - Hibernate數(shù)據(jù)訪問(wèn)對(duì)象的基類。 需要一個(gè)SessionFactory,同時(shí)為子類提供 HibernateTemplate。也可以選擇直接通過(guò) 提供一個(gè)HibernateTemplate來(lái)初始化, 這樣就可以重用后者的設(shè)置,例如SessionFactory, flush模式,異常翻譯器(exception translator)等等。

    drop table if exists user; /*==============================================================*/ /* Table: user */ /*==============================================================*/ create table user ( id bigint AUTO_INCREMENT not null, name varchar(24), age int, primary key (id) );


    public class User { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }

    <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.lavasoft.springnote.ch06_hbm_02deTx.User"table="user"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name" column="name"/> <property name="age" column="age"/> </class> </hibernate-mapping>
    public interface IUserDAO { public void insert(User user); public User find(Integer id); } import org.hibernate.SessionFactory; import org.springframework.orm.hibernate3.HibernateTemplate; /** * Created by IntelliJ IDEA.<br> * <b>User</b>: leizhimin<br> * <b>Date</b>: 2008-4-23 15:15:55<br> * <b>Note</b>: DAO實(shí)現(xiàn) */ public class UserDAO implements IUserDAO { private HibernateTemplate hibernateTemplate; public void setSessionFactory(SessionFactory sessionFactory) { this.hibernateTemplate =new HibernateTemplate(sessionFactory); } public void insert(User user) { hibernateTemplate.save(user); System.out.println("所保存的User對(duì)象的ID:"+user.getId()); } public User find(Integer id) { User user =(User) hibernateTemplate.get(User.class, id); return user; } }
    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/springdb</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>leizhimin</value> </property> </bean> <bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"destroy-method="close"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="mappingResources"> <list> <value>com/lavasoft/springnote/ch06_hbm_02proTx/User.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> </props> </property> </bean> <bean id="userDAO" class="com.lavasoft.springnote.ch06_hbm_02proTx.UserDAO"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> </beans>
    import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class SpringHibernateDemo { public static void main(String[] args) { ApplicationContext context =new FileSystemXmlApplicationContext("D:\\_spring\\src\\com\\lavasoft\\springnote\\ch06_hbm_02proTx\\bean-hbm_tx.xml"); // 建立DAO物件 IUserDAO userDAO = (IUserDAO) context.getBean("userDAO"); User user = new User(); user.setName("caterpillar"); user.setAge(new Integer(30)); userDAO.insert(user); user = userDAO.find(new Integer(1)); System.out.println("name: " + user.getName()); } }

    2017.05.27

    AOP

    AOP(Aspect Oriented Programming),即面向切面編程,可以說(shuō)是OOP(Object Oriented Programming,面向?qū)ο缶幊?#xff09;的補(bǔ)充和完善。OOP引入封裝、繼承、多態(tài)等概念來(lái)建立一種對(duì)象層次結(jié)構(gòu),用于模擬公共行為的一個(gè)集合。不過(guò)OOP允許開(kāi)發(fā)者定義縱向的關(guān)系,但并不適合定義橫向的關(guān)系,例如日志功能。日志代碼往往橫向地散布在所有對(duì)象層次中,而與它對(duì)應(yīng)的對(duì)象的核心功能毫無(wú)關(guān)系對(duì)于其他類型的代碼,如安全性、異常處理和透明的持續(xù)性也都是如此,這種散布在各處的無(wú)關(guān)的代碼被稱為橫切(cross cutting),在OOP設(shè)計(jì)中,它導(dǎo)致了大量代碼的重復(fù),而不利于各個(gè)模塊的重用。

    AOP技術(shù)恰恰相反,它利用一種稱為"橫切"的技術(shù),剖解開(kāi)封裝的對(duì)象內(nèi)部,并將那些影響了多個(gè)類的公共行為封裝到一個(gè)可重用模塊,并將其命名為"Aspect",即切面。所謂"切面",簡(jiǎn)單說(shuō)就是那些與業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝起來(lái),便于減少系統(tǒng)的重復(fù)代碼,降低模塊之間的耦合度,并有利于未來(lái)的可操作性和可維護(hù)性。

    使用"橫切"技術(shù),AOP把軟件系統(tǒng)分為兩個(gè)部分:核心關(guān)注點(diǎn)橫切關(guān)注點(diǎn)。業(yè)務(wù)處理的主要流程是核心關(guān)注點(diǎn),與之關(guān)系不大的部分是橫切關(guān)注點(diǎn)。橫切關(guān)注點(diǎn)的一個(gè)特點(diǎn)是,他們經(jīng)常發(fā)生在核心關(guān)注點(diǎn)的多處,而各處基本相似,比如權(quán)限認(rèn)證、日志、事物。AOP的作用在于分離系統(tǒng)中的各種關(guān)注點(diǎn),將核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)分離開(kāi)來(lái)。

    AOP核心概念

    1、橫切關(guān)注點(diǎn)

    對(duì)哪些方法進(jìn)行攔截,攔截后怎么處理,這些關(guān)注點(diǎn)稱之為橫切關(guān)注點(diǎn)

    2、切面(aspect)

    類是對(duì)物體特征的抽象,切面就是對(duì)橫切關(guān)注點(diǎn)的抽象

    3、連接點(diǎn)(joinpoint)

    被攔截到的點(diǎn),因?yàn)镾pring只支持方法類型的連接點(diǎn),所以在Spring中連接點(diǎn)指的就是被攔截到的方法,實(shí)際上連接點(diǎn)還可以是字段或者構(gòu)造器

    4、切入點(diǎn)(pointcut)

    對(duì)連接點(diǎn)進(jìn)行攔截的定義

    5、通知(advice)

    所謂通知指的就是指攔截到連接點(diǎn)之后要執(zhí)行的代碼,通知分為前置、后置、異常、最終、環(huán)繞通知五類

    6、目標(biāo)對(duì)象

    代理的目標(biāo)對(duì)象

    7、織入(weave)

    將切面應(yīng)用到目標(biāo)對(duì)象并導(dǎo)致代理對(duì)象創(chuàng)建的過(guò)程

    8、引入(introduction)

    在不修改代碼的前提下,引入可以在運(yùn)行期為類動(dòng)態(tài)地添加一些方法或字段

    Spring對(duì)AOP的支持

    Spring中AOP代理由Spring的IOC容器負(fù)責(zé)生成、管理,其依賴關(guān)系也由IOC容器負(fù)責(zé)管理。因此,AOP代理可以直接使用容器中的其它bean實(shí)例作為目標(biāo),這種關(guān)系可由IOC容器的依賴注入提供。Spring創(chuàng)建代理的規(guī)則為:

    1、默認(rèn)使用Java動(dòng)態(tài)代理來(lái)創(chuàng)建AOP代理,這樣就可以為任何接口實(shí)例創(chuàng)建代理了

    2、當(dāng)需要代理的類不是代理接口的時(shí)候,Spring會(huì)切換為使用CGLIB代理,也可強(qiáng)制使用CGLIB

    AOP編程其實(shí)是很簡(jiǎn)單的事情,縱觀AOP編程,程序員只需要參與三個(gè)部分:

    1、定義普通業(yè)務(wù)組件

    2、定義切入點(diǎn),一個(gè)切入點(diǎn)可能橫切多個(gè)業(yè)務(wù)組件

    3、定義增強(qiáng)處理,增強(qiáng)處理就是在AOP框架為普通業(yè)務(wù)組件織入的處理動(dòng)作

    所以進(jìn)行AOP編程的關(guān)鍵就是定義切入點(diǎn)和定義增強(qiáng)處理,一旦定義了合適的切入點(diǎn)和增強(qiáng)處理,AOP框架將自動(dòng)生成AOP代理,即:代理對(duì)象的方法=增強(qiáng)處理+被代理對(duì)象的方法。

    下面給出一個(gè)Spring AOP的.xml文件模板,名字叫做aop.xml,之后的內(nèi)容都在aop.xml上進(jìn)行擴(kuò)展:

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsd"></beans>

    基于Spring的AOP簡(jiǎn)單實(shí)現(xiàn)

    注意一下,在講解之前,說(shuō)明一點(diǎn):使用Spring AOP,要成功運(yùn)行起代碼,只用Spring提供給開(kāi)發(fā)者的jar包是不夠的,請(qǐng)額外上網(wǎng)下載兩個(gè)jar包:

    1、aopalliance.jar

    2、aspectjweaver.jar

    開(kāi)始講解用Spring AOP的XML實(shí)現(xiàn)方式,先定義一個(gè)接口:

    public interface HelloWorld {void printHelloWorld();void doPrint(); }

    定義兩個(gè)接口實(shí)現(xiàn)類:

    public class HelloWorldImpl1 implements HelloWorld {public void printHelloWorld(){System.out.println("Enter HelloWorldImpl1.printHelloWorld()");}public void doPrint(){System.out.println("Enter HelloWorldImpl1.doPrint()");return ;} } public class HelloWorldImpl2 implements HelloWorld {public void printHelloWorld(){System.out.println("Enter HelloWorldImpl2.printHelloWorld()");}public void doPrint(){System.out.println("Enter HelloWorldImpl2.doPrint()");return ;} }

    橫切關(guān)注點(diǎn),這里是打印時(shí)間:

    public class TimeHandler {public void printTime(){System.out.println("CurrentTime = " + System.currentTimeMillis());} }

    有這三個(gè)類就可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Spring AOP了,看一下aop.xml的配置:

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsd"><bean id="helloWorldImpl1" class="com.xrq.aop.HelloWorldImpl1" /><bean id="helloWorldImpl2" class="com.xrq.aop.HelloWorldImpl2" /><bean id="timeHandler" class="com.xrq.aop.TimeHandler" /><aop:config><aop:aspect id="time" ref="timeHandler"><aop:pointcut id="addAllMethod" expression="execution(* com.xrq.aop.HelloWorld.*(..))" /><aop:before method="printTime" pointcut-ref="addAllMethod" /><aop:after method="printTime" pointcut-ref="addAllMethod" /></aop:aspect></aop:config> </beans>

    寫一個(gè)main函數(shù)調(diào)用一下:

    public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("aop.xml");HelloWorld hw1 = (HelloWorld)ctx.getBean("helloWorldImpl1");HelloWorld hw2 = (HelloWorld)ctx.getBean("helloWorldImpl2");hw1.printHelloWorld();System.out.println();hw1.doPrint();System.out.println();hw2.printHelloWorld();System.out.println();hw2.doPrint(); }

    運(yùn)行結(jié)果為:

    CurrentTime = 1446129611993 Enter HelloWorldImpl1.printHelloWorld() CurrentTime = 1446129611993CurrentTime = 1446129611994 Enter HelloWorldImpl1.doPrint() CurrentTime = 1446129611994CurrentTime = 1446129611994 Enter HelloWorldImpl2.printHelloWorld() CurrentTime = 1446129611994CurrentTime = 1446129611994 Enter HelloWorldImpl2.doPrint() CurrentTime = 1446129611994

    看到給HelloWorld接口的兩個(gè)實(shí)現(xiàn)類的所有方法都加上了代理,代理內(nèi)容就是打印時(shí)間

    基于Spring的AOP使用其他細(xì)節(jié)

    1、增加一個(gè)橫切關(guān)注點(diǎn),打印日志,Java類為:

    public class LogHandler {public void LogBefore(){System.out.println("Log before method");}public void LogAfter(){System.out.println("Log after method");} } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsd"><bean id="helloWorldImpl1" class="com.xrq.aop.HelloWorldImpl1" /><bean id="helloWorldImpl2" class="com.xrq.aop.HelloWorldImpl2" /><bean id="timeHandler" class="com.xrq.aop.TimeHandler" /><bean id="logHandler" class="com.xrq.aop.LogHandler" /><aop:config><aop:aspect id="time" ref="timeHandler" order="1"><aop:pointcut id="addTime" expression="execution(* com.xrq.aop.HelloWorld.*(..))" /><aop:before method="printTime" pointcut-ref="addTime" /><aop:after method="printTime" pointcut-ref="addTime" /></aop:aspect><aop:aspect id="log" ref="logHandler" order="2"><aop:pointcut id="printLog" expression="execution(* com.xrq.aop.HelloWorld.*(..))" /><aop:before method="LogBefore" pointcut-ref="printLog" /><aop:after method="LogAfter" pointcut-ref="printLog" /></aop:aspect></aop:config> </beans>

    測(cè)試類不變,打印結(jié)果為:

    CurrentTime = 1446130273734 Log before method Enter HelloWorldImpl1.printHelloWorld() Log after method CurrentTime = 1446130273735CurrentTime = 1446130273736 Log before method Enter HelloWorldImpl1.doPrint() Log after method CurrentTime = 1446130273736CurrentTime = 1446130273736 Log before method Enter HelloWorldImpl2.printHelloWorld() Log after method CurrentTime = 1446130273736CurrentTime = 1446130273737 Log before method Enter HelloWorldImpl2.doPrint() Log after method CurrentTime = 1446130273737

    要想讓logHandler在timeHandler前使用有兩個(gè)辦法:

    (1)aspect里面有一個(gè)order屬性,order屬性的數(shù)字就是橫切關(guān)注點(diǎn)的順序

    (2)把logHandler定義在timeHandler前面,Spring默認(rèn)以aspect的定義順序作為織入順序

    2、我只想織入接口中的某些方法

    修改一下pointcut的expression就好了:

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsd"><bean id="helloWorldImpl1" class="com.xrq.aop.HelloWorldImpl1" /><bean id="helloWorldImpl2" class="com.xrq.aop.HelloWorldImpl2" /><bean id="timeHandler" class="com.xrq.aop.TimeHandler" /><bean id="logHandler" class="com.xrq.aop.LogHandler" /><aop:config><aop:aspect id="time" ref="timeHandler" order="1"><aop:pointcut id="addTime" expression="execution(* com.xrq.aop.HelloWorld.print*(..))" /><aop:before method="printTime" pointcut-ref="addTime" /><aop:after method="printTime" pointcut-ref="addTime" /></aop:aspect><aop:aspect id="log" ref="logHandler" order="2"><aop:pointcut id="printLog" expression="execution(* com.xrq.aop.HelloWorld.do*(..))" /><aop:before method="LogBefore" pointcut-ref="printLog" /><aop:after method="LogAfter" pointcut-ref="printLog" /></aop:aspect></aop:config> </beans>

    表示timeHandler只會(huì)織入HelloWorld接口print開(kāi)頭的方法,logHandler只會(huì)織入HelloWorld接口do開(kāi)頭的方法

    3、強(qiáng)制使用CGLIB生成代理

    前面說(shuō)過(guò)Spring使用動(dòng)態(tài)代理或是CGLIB生成代理是有規(guī)則的,高版本的Spring會(huì)自動(dòng)選擇是使用動(dòng)態(tài)代理還是CGLIB生成代理內(nèi)容,當(dāng)然我們也可以強(qiáng)制使用CGLIB生成代理,那就是<aop:config>里面有一個(gè)"proxy-target-class"屬性,這個(gè)屬性值如果被設(shè)置為true,那么基于類的代理將起作用,如果proxy-target-class被設(shè)置為false或者這個(gè)屬性被省略,那么基于接口的代理將起作用


    2017.06.02

    aop 代碼實(shí)現(xiàn):

    最基本的代理模式 ?實(shí)現(xiàn)代碼:

    公共接口代碼:

    1 public interface IHello { 2 /** 3 * 業(yè)務(wù)方法 4 * @param str 5 */ 6 void sayHello(String str); 7 }

      目標(biāo)類代碼:

    1 public class Hello implements IHello{ 2 @Override 3 public void sayHello(String str) { 4 System.out.println("hello "+str); 5 } 6 7 }

      代理類代碼,我們給它添加日志記錄功能,在方法開(kāi)始前后執(zhí)行特定的方法,是不是和AOP特別像呢?

    public class ProxyHello implements IHello{ private IHello hello; public ProxyHello(IHello hello) {super();this.hello = hello;}@Overridepublic void sayHello(String str) {Logger.start();//添加特定的方法 hello.sayHello(str);Logger.end();}}

      日志類代碼:

    1 public class Logger { 2 public static void start(){ 3 System.out.println(new Date()+ " say hello start..."); 4 } 5 6 public static void end(){ 7 System.out.println(new Date()+ " say hello end"); 8 } 9 }

      測(cè)試代碼:

    1 public class Test { 2 public static void main(String[] args) { 3 IHello hello = new ProxyHello(new Hello());//如果我們需要日志功能,則使用代理類 4 //IHello hello = new Hello();//如果我們不需要日志功能則使用目標(biāo)類 5 hello.sayHello("明天"); 6 } 7 }

    ?java.lang.reflect.InvocationHandler 實(shí)現(xiàn) spring aop jdk代理:

    jdk代理實(shí)現(xiàn)主要是實(shí)現(xiàn)InvocationHandler,并且將目標(biāo)對(duì)象注入到代理對(duì)象中,利用反射機(jī)制來(lái)執(zhí)行目標(biāo)對(duì)象的方法。

      接口實(shí)現(xiàn)與靜態(tài)代理相同,代理類代碼:

    1 public class DynaProxyHello implements InvocationHandler{ 2 3 private Object target;//目標(biāo)對(duì)象 4 /** 5 * 通過(guò)反射來(lái)實(shí)例化目標(biāo)對(duì)象 6 * @param object 7 * @return 8 */ 9 public Object bind(Object object){ 10 this.target = object; 11 return Proxy.newProxyInstance(this.target.getClass().getClassLoader(), this.target.getClass().getInterfaces(), this); 12 } 13 14 @Override 15 public Object invoke(Object proxy, Method method, Object[] args) 16 throws Throwable { 17 Object result = null; 18 Logger.start();//添加額外的方法 19 //通過(guò)反射機(jī)制來(lái)運(yùn)行目標(biāo)對(duì)象的方法 20 result = method.invoke(this.target, args); 21 Logger.end(); 22 return result; 23 } 24 25 }

      測(cè)試類代碼:

    1 public class DynaTest { 2 public static void main(String[] args) { 3 IHello hello = (IHello) new DynaProxyHello().bind(new Hello());//如果我們需要日志功能,則使用代理類 4 //IHello hello = new Hello();//如果我們不需要日志功能則使用目標(biāo)類 5 hello.sayHello("明天"); 6 } 7 }

      看完上面的代碼可能和Spring AOP相比有一個(gè)問(wèn)題,日志類只能在方法前后打印,但是AOP應(yīng)該是可以在滿足條件就可以執(zhí)行,所有是否可以將DynaPoxyHello對(duì)象和日志操作對(duì)象(Logger)解耦呢?

      看下面代碼實(shí)現(xiàn),將將DynaPoxyHello對(duì)象和日志操作對(duì)象(Logger)解耦:

      我們要在被代理對(duì)象的方法前面或者后面去加上日志操作代碼(或者是其它操作的代碼),那么,我們可以抽象出一個(gè)接口,這個(gè)接口里就只有兩個(gè)方法:一個(gè)是在被代理對(duì)象要執(zhí)行方法之前執(zhí)行的方法,我們?nèi)∶麨?/span>start,第二個(gè)方法就是在被代理對(duì)象執(zhí)行方法之后執(zhí)行的方法,我們?nèi)∶麨?/span>end。

     Logger的接口:

    1 public interface ILogger { 2 void start(Method method); 3 void end(Method method); 4 }

      Logger的接口實(shí)現(xiàn):

    1 public class DLogger implements ILogger{ 2 @Override 3 public void start(Method method) { 4 System.out.println(new Date()+ method.getName() + " say hello start..."); 5 } 6 @Override 7 public void end(Method method) { 8 System.out.println(new Date()+ method.getName() + " say hello end"); 9 } 10 }

      動(dòng)態(tài)代理類:

    1 public class DynaProxyHello1 implements InvocationHandler{ 2 //調(diào)用對(duì)象 3 private Object proxy; 4 //目標(biāo)對(duì)象 5 private Object target; 6 7 public Object bind(Object target,Object proxy){ 8 this.target=target; 9 this.proxy=proxy; 10 return Proxy.newProxyInstance(this.target.getClass().getClassLoader(), this.target.getClass().getInterfaces(), this); 11 } 12 13 14 @Override 15 public Object invoke(Object proxy, Method method, Object[] args) 16 throws Throwable { 17 Object result = null; 18 //反射得到操作者的實(shí)例 19 Class clazz = this.proxy.getClass(); 20 //反射得到操作者的Start方法 21 Method start = clazz.getDeclaredMethod("start", new Class[]{Method.class}); 22 //反射執(zhí)行start方法 23 start.invoke(this.proxy, new Object[]{this.proxy.getClass()}); 24 //執(zhí)行要處理對(duì)象的原本方法 25 method.invoke(this.target, args); 26 //反射得到操作者的end方法 27 Method end = clazz.getDeclaredMethod("end", new Class[]{Method.class}); 28 //反射執(zhí)行end方法 29 end.invoke(this.proxy, new Object[]{method}); 30 return result; 31 } 32 33 }

      測(cè)試代碼:

    1 public class DynaTest1 { 2 public static void main(String[] args) { 3 IHello hello = (IHello) new DynaProxyHello1().bind(new Hello(),new DLogger());//如果我們需要日志功能,則使用代理類 4 //IHello hello = new Hello();//如果我們不需要日志功能則使用目標(biāo)類 5 hello.sayHello("明天"); 6 } 7 }

      通過(guò)上面例子,可以發(fā)現(xiàn)通過(guò)動(dòng)態(tài)代理和發(fā)射技術(shù),已經(jīng)基本實(shí)現(xiàn)了AOP的功能,如果我們只需要在方法執(zhí)行前打印日志,則可以不實(shí)現(xiàn)end()方法,這樣就可以控制打印的時(shí)機(jī)了。如果我們想讓指定的方法打印日志,我們只需要在invoke()方法中加一個(gè)對(duì)method名字的判斷,method的名字可以寫在xml文件中,這樣我們就可以實(shí)現(xiàn)以配置文件進(jìn)行解耦了,這樣我們就實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的spring aop框架。







    簡(jiǎn)單代碼:

    package com.jeedev.demo.view;import javax.servlet.http.HttpServletRequest;import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping;/*** 多視圖解析器支持示例* @author huligong**/ @Controller @RequestMapping(value = "/demo") public class JeeDevViewResolverTestController {private static Log logger = LogFactory.getLog(JeeDevViewResolverTestController.class);@RequestMapping(value = "/test1")public String test1(HttpServletRequest request, ModelMap map) {logger.info("使用JSP視圖解析器");map.put("name", "hello world");return "jspTest.jsp";}@RequestMapping(value = "/test2")public String test2(HttpServletRequest request, ModelMap map) {logger.info("使用Freemarker視圖解析器");map.put("name", "hello world");return "hello.ftl";}@RequestMapping(value = "/test3")public String test3(HttpServletRequest request, ModelMap map) {logger.info("使用Velocity視圖解析器");map.put("name", "hello world");return "/html/demo.htm";} }

    Controller入?yún)⑹荋ttpServletRequest和Modelmap,在請(qǐng)求過(guò)來(lái)的時(shí)候,組件啟動(dòng)spring 容器,同時(shí)將請(qǐng)求對(duì)象和xml中配置的所有bean對(duì)象生成的map傳給controller。

    注解@requestmap就是獲取請(qǐng)求的列表和具體的數(shù)值判斷。

















    總結(jié)

    以上是生活随笔為你收集整理的springmvc入门学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    人人澡视频| 国产黄色一级片在线 | 黄色a视频 | 国产麻豆精品免费视频 | 精品久久久久一区二区国产 | 久久五月婷婷丁香 | 亚洲精品久久久蜜臀下载官网 | 色婷婷激情 | 成人国产精品入口 | 中文字幕在线影院 | 国产一区在线看 | 国产麻豆果冻传媒在线观看 | 久久任你操| 国产精品视频999 | 日本黄色大片免费 | 国产免费高清视频 | 国产精品99久久久久久小说 | 国产99久久久精品 | 久香蕉 | 国产黄色在线看 | 久久一区91| 91看片麻豆 | 精品伦理一区二区三区 | 日韩久久午夜一级啪啪 | 久久久久久久久久国产精品 | 久久精品国产免费 | 国产精品久久久久久a | 激情五月婷婷综合 | 久久久影院| 99热精品久久 | 精品国产片 | 国产麻豆精品一区二区 | 天天干天天操天天操 | 中文在线a在线 | 色视频成人在线观看免 | av电影中文字幕 | 成人黄色在线电影 | 久久66热这里只有精品 | 精品久久久久久久久久国产 | 国产夫妻自拍av | 99视频精品全国免费 | 久久亚洲专区 | 黄色视屏在线免费观看 | 国产九九九九九 | 日韩成人高清在线 | 免费人成在线观看网站 | 日韩视频中文 | 中文区中文字幕免费看 | 在线视频一二区 | 午夜精品久久一牛影视 | 日韩免费大片 | 香蕉日日| 日日夜夜天天射 | 色综合久久综合网 | 毛片在线网 | 热精品| 99在线精品视频 | 国产精品视频久久久 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | a级黄色片视频 | 五月婷婷丁香 | 免费色网站 | 色99中文字幕| 日本精品久久久久中文字幕5 | 超碰97在线看| 一区在线观看视频 | 国产青青青 | 三级免费黄色 | 欧美日韩一区二区免费在线观看 | 精品嫩模福利一区二区蜜臀 | av爱干 | ww亚洲ww亚在线观看 | 高清日韩一区二区 | 99在线观看精品 | 成人黄色在线观看视频 | 樱空桃av | 亚洲成av人片 | 国产精品久久一卡二卡 | 黄色小说免费观看 | 久久成人国产精品 | 日韩免| 视频一区在线免费观看 | 欧美精品乱码99久久影院 | 综合影视| www.国产视频 | 亚洲欧美视频在线 | 国产亚洲综合性久久久影院 | 九九九热精品免费视频观看网站 | 日韩成人黄色 | 免费视频资源 | 欧美日韩在线视频一区 | 久久人人爽人人爽人人片 | 中文字幕观看av | 久久精品首页 | 久精品在线观看 | 国产成人精品一区二区三区网站观看 | 久久久高清免费视频 | 日韩欧美高清在线观看 | 国产精品视频地址 | 99热播精品 | 91精品国产99久久久久久红楼 | 久久成人国产精品免费软件 | 99r在线 | 丁香婷婷成人 | 午夜精品电影 | 欧美成人理伦片 | 国产中文字幕一区二区三区 | 国产录像在线观看 | 日日干夜夜骑 | 国产一二三四在线视频 | 九九九电影免费看 | 亚洲欧美日韩在线看 | 在线 国产一区 | 亚洲男男gⅴgay双龙 | 欧美专区亚洲专区 | 天天天天天干 | av成人免费 | 亚洲v欧美v国产v在线观看 | 99re8这里有精品热视频免费 | 久久久亚洲电影 | 一级一级一片免费 | 日韩在线观看第一页 | 激情久久久久久久久久久久久久久久 | 99久久久久久久 | 国产最顶级的黄色片在线免费观看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 日韩中文久久 | 午夜免费久久看 | 丁香六月综合网 | 91av视频在线观看免费 | 国产视频2区 | 久香蕉| 国产精品久久久久久麻豆一区 | 人人狠 | 免费成视频 | av大片网站 | 中文字幕免费看 | 亚洲一级电影视频 | 日韩精品中文字幕久久臀 | 国产一区二区三区免费观看视频 | 成人影片在线播放 | 操一草| 久久免费黄色大片 | 久久免费看 | 一区二区三区免费播放 | 六月丁香婷 | 国产夫妻自拍av | 午夜骚影 | 亚洲欧美成人在线 | 奇米影视777影音先锋 | 中文字幕视频三区 | 91精品国产92久久久久 | 干天天 | 欧美亚洲成人免费 | 日本精品中文字幕在线观看 | 欧美日韩一区二区三区视频 | 91精品国产91久久久久久三级 | av观看久久久 | 久久久久久免费视频 | 一区二区三区精品久久久 | 精品国产免费看 | 五月天丁香视频 | 精品国产99国产精品 | 中文字幕第一页在线视频 | 精品国产一区二区三区蜜臀 | 亚洲伊人第一页 | 中文字幕在线播放视频 | 在线免费观看黄色av | 欧美另类交在线观看 | av电影免费在线 | 成人国产网站 | 国产精品亚洲精品 | 色视频在线看 | 国产成人精品亚洲a | 国产96在线 | 国产成人精品一二三区 | 色网免费观看 | 97精品国产91久久久久久久 | 精品美女久久 | 亚洲综合成人专区片 | 91高清一区| 91大片网站 | 国产字幕av | 亚洲精品www.| 精品人人爽| 九九综合九九 | 免费在线成人av电影 | 九九在线国产视频 | 在线综合 亚洲 欧美在线视频 | 在线观看国产日韩欧美 | 高清美女视频 | 深爱激情丁香 | 国产一级黄色av | 亚洲国产欧美在线人成大黄瓜 | 国产一区二区久久精品 | 久久久网址| 天堂在线免费视频 | 一区在线观看视频 | 天天综合网在线观看 | 成人黄大片视频在线观看 | 国产资源中文字幕 | 日韩a在线播放 | 在线视频 一区二区 | 日韩av有码在线 | 精品国产欧美一区二区 | 天天操夜夜逼 | 欧美性色黄 | 综合色中文| 制服丝袜天堂 | 亚洲视频资源在线 | 久久不射网站 | 99久久精品国 | 亚洲精品大片www | 成人免费网站视频 | 丁香一区二区 | 正在播放国产91 | av在线com| 青青河边草免费视频 | 香蕉视频免费看 | 国产精品一区二 | 国产午夜精品一区二区三区在线观看 | 99精品久久只有精品 | 国产精品综合久久久 | 91香蕉视频污在线 | 亚洲黄色app | 四虎在线永久免费观看 | 久久久久久久久久久久久久av | 91桃色在线免费观看 | 国产91精品一区二区 | 国产在线91精品 | 国产日韩精品在线 | 91麻豆精品一区二区三区 | 国产资源免费在线观看 | 97在线免费视频 | 成年人在线观看视频免费 | 精品日韩中文字幕 | 91精品国产一区二区在线观看 | 91麻豆精品国产91久久久无限制版 | 99精品国产在热久久下载 | 99久久精品免费一区 | 成人黄色在线播放 | 欧美性色19p | 午夜在线免费视频 | 欧美99久久| 日韩欧美精选 | 成人午夜网址 | 狠狠狠的干 | 五月天丁香综合 | 欧美久久久一区二区三区 | 国产999视频在线观看 | 亚洲精品毛片一级91精品 | 久久网站最新地址 | 精品国产视频在线观看 | 99久久精品无码一区二区毛片 | 国产在线播放观看 | 在线久热 | 久久成人国产精品 | 九九九视频精品 | 亚洲2019精品| 日韩免费视频线观看 | 亚洲年轻女教师毛茸茸 | 97碰碰视频| 天天综合五月天 | av电影在线免费观看 | 91精品网站| 丁香av在线 | 成人中心免费视频 | 国产999视频在线观看 | 亚洲黄色免费观看 | 久久久天堂 | 夜夜视频资源 | 久久综合给合久久狠狠色 | 国际精品久久 | 成年性视频 | www黄色| 在线观看的av | 999久久国精品免费观看网站 | 激情六月婷婷久久 | 毛片永久新网址首页 | 色狠狠久久av五月综合 | 亚洲男人天堂2018 | 中国一级片在线观看 | 免费一区在线 | 精品久久免费看 | a视频免费看 | 国产欧美久久久精品影院 | 视频成人| 激情丁香月 | 国产成人av电影在线 | 美女视频永久黄网站免费观看国产 | 天海翼一区二区三区免费 | 亚洲精品午夜一区人人爽 | 日日干狠狠操 | av天天草| 亚洲精品1区2区3区 超碰成人网 | 国语精品免费视频 | 国产精品入口66mio女同 | 一区精品在线 | 狠狠色伊人亚洲综合网站野外 | 中文字幕专区高清在线观看 | 久草香蕉在线 | 欧美日韩在线精品 | 日韩免费不卡视频 | 96国产精品视频 | 久草新在线 | 久久久久久久久久久久av | 成人一级免费视频 | 少妇bbw揉bbb欧美 | 992tv在线 | 亚洲精品一区二区网址 | 国产午夜在线 | 国产精品久久久久久久久久直播 | www婷婷| 国产真实精品久久二三区 | 97在线观看| 免费成人在线视频网站 | 久久久久欧美精品999 | 欧美日韩一区二区视频在线观看 | 美女视频黄网站 | 亚洲国产日韩一区 | 色婷婷狠狠干 | 成人久久免费 | 久久久色 | 久久久久久久电影 | 欧美一级小视频 | 国产又粗又猛又爽又黄的视频先 | 四虎www | 在线网址你懂得 | 成人97视频一区二区 | 国产精品久久中文字幕 | 99精品欧美一区二区三区黑人哦 | 久久99亚洲精品久久久久 | 精品免费 | 少妇bbb| av免费电影在线观看 | 午夜电影久久久 | 亚洲国产精品成人精品 | 久久综合激情 | 西西44人体做爰大胆视频 | 久久综合色天天久久综合图片 | 精品视频www | 三级动图 | 美女免费视频一区 | 色吧av色av | 精品久久99 | 亚洲婷久久| 天天操天天操天天操天天操 | 最新一区二区三区 | 天天狠狠 | 久久99久国产精品黄毛片入口 | 国产精品免费观看网站 | 国产无遮挡猛进猛出免费软件 | 色偷偷88888欧美精品久久 | 日本中文字幕电影在线免费观看 | 欧美日韩精品电影 | 不卡av免费在线观看 | 日本色小说视频 | 精品一区电影国产 | 欧美一级性生活片 | 日韩av福利在线 | 777久久久 | 天天爱天天干天天爽 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 亚洲精品日韩av | 亚洲黄色片在线 | 精品欧美在线视频 | 精品国产一区二区三区男人吃奶 | 久久久久久久18 | 精品国产乱码久久久久久久 | 少妇精品久久久一区二区免费 | 中文字幕乱偷在线 | 美女视频黄是免费的 | 久久精品中文视频 | 国产成人久久久77777 | 欧美精品在线观看免费 | 日韩大片在线 | 特黄特色特刺激视频免费播放 | 日韩一区二区三区免费视频 | 91cn国产在线 | 麻豆成人在线观看 | a在线免费| 西西人体www444 | 国产亚洲综合在线 | 婷婷视频在线观看 | 国产视频九色蝌蚪 | 色综合五月 | 五月综合 | 一本色道久久精品 | 深爱五月激情网 | 最近中文字幕大全中文字幕免费 | 中文字幕国产视频 | 国产一级电影免费观看 | 国产不卡av在线播放 | 日韩三级不卡 | 国产黄色在线看 | 久草com | 91人人澡人人爽人人精品 | 日韩在线看片 | 成人欧美一区二区三区在线观看 | 美女天天操 | 中文字幕传媒 | 另类五月激情 | 久久精品中文视频 | 久久精品成人 | 99夜色 | 国产精品黑丝在线观看 | 色综合天天色综合 | 亚洲欧美观看 | 91精品国产99久久久久久久 | 久久久精品久久 | 亚洲精品高清一区二区三区四区 | 69久久久| 99综合久久 | 伊人中文在线 | 久久久久一区二区三区四区 | 黄色免费观看 | 国产精品中文在线 | 日本3级在线观看 | 国产 中文 日韩 欧美 | 国产精品成人一区二区三区 | 亚洲在线网址 | 欧美日韩在线视频一区二区 | 国产精品久久久免费 | 亚洲综合色视频 | 丁香婷婷激情五月 | 黄色91免费观看 | 蜜桃传媒一区二区 | 色视频在线免费 | 亚洲视频999 | 欧美色噜噜噜 | 黄色毛片视频 | 日日夜夜网| 亚洲日b视频 | 久草视频首页 | 午夜精品一区二区三区在线视频 | 亚洲婷婷在线视频 | 久久精品高清 | 久久视讯 | 成人午夜电影免费在线观看 | 91久久电影 | 99久久精 | 中文字幕乱码一区二区 | 麻豆91视频 | 久久久精品亚洲 | 国产日产欧美在线观看 | 国产专区在线 | 日韩视频在线观看视频 | 国产成人久久av免费高清密臂 | 亚洲成人精品影院 | 天天干,夜夜操 | 国产色资源 | 国产精品99久久久精品免费观看 | 婷婷综合导航 | 日日夜夜精品免费 | 天天激情在线 | 国产精品xxxx18a99 | 美女网站在线免费观看 | 成人免费视频a | 久久久久久久久毛片精品 | 国产在线免费观看 | 人人揉人人揉人人揉人人揉97 | 日韩一级精品 | 亚洲精品久久久久中文字幕二区 | 最新av在线网址 | 在线观影网站 | 欧美一区影院 | 国产又粗又硬又爽的视频 | 中文字幕 欧美性 | 深夜免费网站 | 91精品国产三级a在线观看 | 五月天欧美精品 | 成人日韩av | 狠狠的日 | 亚洲乱码国产乱码精品天美传媒 | 免费视频网 | 色婷婷色| 四虎影视8848aamm | 三级黄色欧美 | 99精品国产aⅴ | 在线免费黄色 | a黄色影院| 亚洲精品国产自产拍在线观看 | 亚洲日b视频| 99热国内精品 | 97精品国产一二三产区 | 国产成人一二三 | 久久成人毛片 | 中文字幕丝袜美腿 | 97精品国产97久久久久久春色 | 午夜体验区 | 日韩精品在线观看视频 | 91在线观| 9999国产精品| 91福利试看 | 日韩a级黄色片 | 五月婷婷电影网 | 精品国产日本 | 夜夜躁狠狠躁日日躁视频黑人 | 玖玖在线免费视频 | av资源在线观看 | 激情小说网站亚洲综合网 | 97精品国产91久久久久久久 | 国产又粗又猛又爽又黄的视频先 | 中文在线免费观看 | av+在线播放在线播放 | 91大神电影| 在线观看黄色的网站 | 伊人五月天综合 | 成人国产精品电影 | 夜夜操狠狠干 | 伊人干综合| 丁香婷婷综合网 | 久久成 | 欧美日韩免费网站 | 亚洲免费专区 | 国产中文字幕久久 | 国产中文字幕大全 | 97超碰在线资源 | 国产在线精品一区二区不卡了 | 中文字幕免费高 | 人人网人人爽 | 91精品视屏| 在线观看韩日电影免费 | aaa日本高清在线播放免费观看 | 久久久久99精品成人片三人毛片 | 午夜精品一区二区三区在线播放 | www九九热| 狠狠狠狠狠狠狠狠干 | 欧美成人性网 | 蜜臀av夜夜澡人人爽人人桃色 | 国产美女精品久久久 | 国产 日韩 欧美 自拍 | 久久久久亚洲天堂 | 在线成人免费av | 中文字幕av在线免费 | 国产精品一区二 | 射九九 | 国产一区免费观看 | 欧美日韩视频一区二区 | 欧美一区二区在线免费观看 | 天天摸天天舔天天操 | 久产久精国产品 | 五月天天色 | 狠狠狠干狠狠 | 99久久久久久 | 欧美日韩在线播放一区 | 久久免费中文视频 | 国产在线一区二区三区播放 | 日韩理论在线 | 91av视频播放 | 欧美在线视频第一页 | 中文字幕日本在线 | 美女网站在线免费观看 | 99久久久国产免费 | 伊人官网 | 国产精品一区二区三区在线 | 色综合天天 | 国产伦理久久精品久久久久_ | 色综合久久综合网 | 成人久久影院 | 97狠狠干 | 国产精品69av | 久久理论电影 | 91亚洲激情 | 在线中文字幕网站 | 成人av在线影院 | av片在线观看免费 | 成人国产网站 | 天天操天天操天天操天天操 | 久久久久一区 | 亚洲精品国产免费 | 国产日本三级 | 久久福利剧场 | 蜜桃视频色 | 天天曰天天射 | 狠狠色丁香婷婷综合 | 久久久香蕉视频 | 中文字幕之中文字幕 | 最新国产精品拍自在线播放 | 日日躁夜夜躁xxxxaaaa | 中文字幕中文字幕在线中文字幕三区 | 亚洲精品三级 | 日韩欧美v | av一区二区三区在线 | 国产黑丝袜在线 | 成人va视频 | 久久视影 | 手机看片久久 | 亚洲一区网 | 国产精品久久久区三区天天噜 | 成人av在线网址 | 国产亚洲欧美日韩高清 | 欧美最猛性xxx | 91九色porny蝌蚪视频 | 免费看片色 | 在线最新av | 国产一级在线 | 丁香六月天 | 日韩欧美在线视频一区二区 | 日本在线观看一区二区三区 | 中文字幕免费 | 色综合天天 | 色综合久久久久综合99 | 国产在线免费 | 亚洲激情影院 | 我爱av激情网 | 国产免费久久精品 | av电影中文 | 六月激情久久 | 在线视频观看你懂的 | 久久免费看视频 | 人人要人人澡人人爽人人dvd | 国产伦理剧 | 国产亚洲成人网 | a午夜电影| 国产精品视频在线看 | 色网站在线 | 久久久影院一区二区三区 | 在线视频 成人 | 人人澡超碰碰97碰碰碰软件 | 性色va | 日日插日日干 | 精品超碰 | 国产精品成人一区二区三区吃奶 | 在线观看国产 | 久久大片网站 | 麻豆94tv免费版| 丁香网婷婷 | 啪啪免费视频网站 | 3d黄动漫免费看 | 99视频这里有精品 | 天天干,天天操,天天射 | 激情影音先锋 | 久久精品这里都是精品 | 国产涩涩在线观看 | 亚洲高清视频在线播放 | 久久视频在线观看中文字幕 | 四虎影视国产精品免费久久 | 91精品国产成人观看 | 一区二区三区免费看 | 奇米网网址 | 激情综合电影网 | 99爱国产精品 | 一区二区三区日韩在线观看 | 国产在线看一区 | 色婷婷激情五月 | 国产不卡片 | 91入口在线观看 | www.夜夜草| 9797在线看片亚洲精品 | 九九九九色 | 永久中文字幕 | 成人黄色资源 | 天天操天天操天天操天天操天天操天天操 | 狠狠操91| 成人99免费视频 | 午夜精品一区二区三区在线视频 | 国产精品尤物 | 欧美激情第一区 | 网站免费黄色 | 国产视频日韩视频欧美视频 | 欧美性久久久久久 | 色吊丝在线永久观看最新版本 | 开心激情网五月天 | 99免费看片 | 亚洲综合欧美精品电影 | 午夜黄色一级片 | 久久精品站 | 在线视频一二三 | 亚洲精品色视频 | 99视| 国产精久久久久久妇女av | 悠悠av资源片 | 男女免费av | 综合中文字幕 | 中文字幕免费高清av | 国产精品原创视频 | 不卡的av中文字幕 | 午夜免费视频网站 | 国产精品毛片 | 一区二区三区视频 | 国产精品永久在线观看 | av电影免费 | 日日干美女 | 婷五月激情 | 日韩视频免费播放 | 中文字幕免费久久 | 日韩亚洲在线观看 | 欧美午夜精品久久久久 | 超碰97人人爱 | 国产999精品久久久久久绿帽 | 在线国产99 | 国产乱码精品一区二区三区介绍 | 97在线视频免费播放 | 99久久久国产精品免费99 | 搡bbbb搡bbb视频 | 四虎影视成人永久免费观看视频 | 国产精品av久久久久久无 | 欧美日韩在线观看不卡 | 国产美女黄网站免费 | 日韩美视频 | 国产精品九九久久久久久久 | 亚洲一区二区视频在线播放 | 午夜在线免费观看视频 | 丁香五月亚洲综合在线 | 天天操,夜夜操 | 日韩欧美一区二区在线播放 | 97香蕉久久国产在线观看 | 国产高清视频在线观看 | 欧美日韩国内在线 | 久久国产精品一区二区三区四区 | 最近免费在线观看 | 亚州中文av | 99国产精品久久久久老师 | 二区三区在线观看 | 免费视频久久 | 伊人激情网 | 久久久久成人精品免费播放动漫 | 欧美激情视频一二三区 | 日韩91av| 亚洲午夜久久久久久久久久久 | 中文字幕在线观看完整版 | 伊人五月综合 | 国产日产高清dvd碟片 | 深夜成人av | 成人久久综合 | 五月激情丁香图片 | 国产精品福利在线播放 | 免费大片黄在线 | 久草综合在线观看 | 99视频播放 | 亚洲人人爱 | 国产精品人成电影在线观看 | 91少妇精拍在线播放 | 97精品欧美91久久久久久 | 91天天操 | 伊人午夜 | av成人免费在线 | 色天天久久 | 久久国产精品视频观看 | 久久久不卡影院 | 一区二区视频在线免费观看 | 久久污视频 | 婷婷夜夜| 亚洲高清不卡av | 日本中文字幕在线观看 | 九九九九九九精品任你躁 | 国产成人精品免费在线观看 | 国产精品视频久久久 | 超碰国产人人 | 日韩黄色在线电影 | 99视频免费 | 中文字幕在线视频精品 | 亚洲精品免费看 | av黄色在线播放 | 韩日视频在线 | 色综合色综合色综合 | 久久婷婷亚洲 | 天天天插 | 美女国产免费 | 久草免费新视频 | 在线免费高清一区二区三区 | 国产日韩欧美在线影视 | 欧美在线a视频 | 手机成人av | 国产精品理论在线观看 | 午夜影院一级片 | 人人爽人人爽人人爽学生一级 | 91亚洲视频在线观看 | 国产免费观看高清完整版 | www视频在线免费观看 | 日本黄色黄网站 | 97影视| 天天插综合网 | 99热这里精品| 免费av观看网站 | 91网页版免费观看 | 免费欧美高清视频 | 国产精品久久久久久久7电影 | 国产高清日韩欧美 | 国产日韩欧美在线免费观看 | 亚洲人成网站精品片在线观看 | 91在线影视 | av先锋中文字幕 | 国产视频欧美视频 | 青草视频网 | 91九色视频 | a级片久久| 91久久国产自产拍夜夜嗨 | 97超碰总站 | 99精品视频在线 | 久久人91精品久久久久久不卡 | www夜夜操com | 欧美日韩成人一区 | 97超碰人人模人人人爽人人爱 | 五月婷丁香| 亚洲理论在线观看 | 中文字幕在线影院 | 在线电影av | 在线观看国产麻豆 | 狠狠狠色狠狠色综合 | 色综合久久久久网 | 久久综合加勒比 | 成人免费在线观看av | 亚洲国产中文字幕在线视频综合 | 国产精品免费一区二区三区 | 超级碰碰碰视频 | 麻豆视频在线观看免费 | 亚洲精品美女视频 | 青青草国产在线 | 亚洲精品午夜久久久 | 久久国产精彩视频 | 区一区二区三区中文字幕 | 国产高清视频免费最新在线 | 久久综合9988久久爱 | 国产一级做a爱片久久毛片a | 国产精品乱码一区二区视频 | 97超碰资源总站 | 在线播放国产一区二区三区 | 四虎在线永久免费观看 | 欧美久久久久久久久久久久久 | 激情丁香在线 | 成人av久久 | 成人av片免费观看app下载 | 久久精品永久免费 | 免费无遮挡动漫网站 | 久久不卡av| 免费在线观看91 | 91九色视频在线 | 国内精品久久久久久久久 | 天天色天天干天天 | 二区视频在线观看 | 亚洲国产丝袜在线观看 | 国产一区二区三区免费视频 | 免费黄色网址大全 | 成人av网站在线观看 | 午夜av片 | sm免费xx网站 | 国产精华国产精品 | 亚洲三级在线 | 91精品国产91久久久久 | 2019中文字幕网站 | 久久不卡国产精品一区二区 | 日本久久成人 | 日韩免费一区二区在线观看 | 97涩涩视频 | 日韩 在线观看 | 久久久久激情视频 | 久久久久久久久久国产精品 | 人人看人人 | 色婷婷久久久综合中文字幕 | 国产亚洲精品免费 | 欧美激情另类文学 | 国产九九热 | 天天操夜夜逼 | 日韩三级免费观看 | 最新成人在线 | 亚洲精品视频在线观看免费视频 | 免费在线观看av不卡 | 国产成人福利片 | 久久久人 | 91麻豆精品久久久久久 | 99精品久久只有精品 | 五月天国产精品 | 国产精品视频不卡 | 韩国av免费观看 | 91网在线| 九热在线 | 91黄视频在线 | 色婷婷午夜 | 精品96久久久久久中文字幕无 | 国产国语在线 | 日韩动漫免费观看高清完整版在线观看 | 久草在线视频精品 | 97av色| 免费观看丰满少妇做爰 | 亚洲久草在线视频 | 午夜私人影院久久久久 | 国产精品久久久久久久av电影 | 成人毛片在线观看视频 | av一级片| 日韩电影中文字幕 | 精品亚洲va在线va天堂资源站 | 91激情视频在线观看 | 97超在线视频 | 国产精品久久久久久欧美 | 美女视频黄在线 | 天天爽夜夜爽精品视频婷婷 | 亚洲精品免费看 | 国产亚洲一级高清 | 美女国内精品自产拍在线播放 | 亚洲精品午夜一区人人爽 | 久久99欧美 | 国产精品国产三级国产不产一地 | 成人久久久电影 | 欧美地下肉体性派对 | 成人一区在线观看 | 日韩精品久久久免费观看夜色 | 国产精品成人免费精品自在线观看 | 日韩中文字幕国产 | 在线观看v片 | 国产不卡在线 | 中文字幕在线观看第一区 | 国产va在线 | 亚洲国产精品人久久电影 | 一区二区三区免费在线 | 操操综合 | 99色网站 | 女人18精品一区二区三区 | 久艹视频免费观看 | 久久精品99国产精品 | 久久精品一区二区国产 | 丁香激情综合国产 | 99精品福利视频 | 天天爱天天操 | 久久国产欧美日韩 | 久草久草久草久草 | 蜜桃麻豆www久久囤产精品 | www.久久色| 免费看的黄色网 | 色就是色综合 | 日日夜夜精品视频天天综合网 | 精品一区二区视频 | 日韩 在线观看 | 国产成人专区 | 久久狠狠一本精品综合网 | 91精品无人成人www | 青草草在线视频 | 午夜丰满寂寞少妇精品 | 狠狠狠操| 国产成人精品午夜在线播放 | 久久久私人影院 | 欧美成人中文字幕 | 国产精品区二区三区日本 | 欧美一级片免费 | 亚洲黄色在线播放 | 国产一区免费看 | 亚洲精品在线免费观看视频 | 久久99精品久久只有精品 | 国产高清中文字幕 | 国产精品美| 精品在线99 | 波多野结衣综合网 | 久久国产热视频 | 最近2019好看的中文字幕免费 | 天天色中文 | 久久久国产视频 | 亚洲精品456在线播放 | 4438全国亚洲精品观看视频 | 欧美日韩1区2区 | 国产不卡精品 | 婷婷综合亚洲 | 狠狠天天| 久久九九网站 | 久久一级电影 | 欧美日本在线视频 | 日本中文一级片 | 美女视频黄在线 | 91传媒激情理伦片 | 国产小视频在线免费观看视频 | 成人久久精品视频 | 国产麻豆电影在线观看 | 午夜视频在线观看一区二区三区 | 亚洲美女在线国产 | 国产视频在线观看免费 | 日本高清免费中文字幕 | 去看片| 成人影音在线 | 国产精品手机在线观看 | 久久久久国产精品www | 国产99久 | 中文字幕久久精品一区 | 1024手机看片国产 | 日韩在线国产 | 国产在线不卡一区 | 日本福利视频在线 | 日韩精品一区二区三区外面 | 99久久国产免费,99久久国产免费大片 | 色婷婷成人网 | 黄色三级免费网址 | 婷婷色五 | 美女黄濒 | 亚洲视频 视频在线 | 超碰最新网址 | 五月激情片 | 国产第一页福利影院 | 中文字幕久久久精品 | 欧美综合国产 | 国产精彩视频一区二区 | 日韩,精品电影 | 91丨九色丨高潮丰满 | av色综合 | 午夜性盈盈 | 成人av一区二区在线观看 | 久久这里精品视频 | 日韩特级毛片 | 日本在线观看一区 | 亚洲成人在线免费 |