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

首頁 > 學院 > 開發設計 > 正文

springmvc整合redis架構搭建實例

2019-11-14 15:13:01
字體:
來源:轉載
供稿:網友

新換環境,又有新東西可以學習了,哈皮! 抽空學習之余看了一下redis,個人對SPRingmvc的愛是忠貞不渝,所以整理了一下Springmvc整合redis的環境搭建。分享學習。

  第一步: 創建maven項目:

  實例pom.xml內容如下

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

  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <packaging>war</packaging>

  <name>orm-bae</name>

  <groupId>com.orm</groupId>

  <artifactId>orm-bae</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <properties>

  <org.springframework.version>3.0.5.RELEASE</org.springframework.version>

  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  </properties>

  <dependencies>

  <!-- config junit jar -->

  <dependency>

  <groupId>junit</groupId>

  <artifactId>junit</artifactId>

  <version>4.8.2</version>

  <scope>test</scope>

  </dependency>

  <!-- config redis data and client jar-->

  <dependency>

  <groupId>org.springframework.data</groupId>

  <artifactId>spring-data-redis</artifactId>

  <version>1.0.2.RELEASE</version>

  </dependency>

  <dependency>

  <groupId>redis.clients</groupId>

  <artifactId>jedis</artifactId>

  <version>2.1.0</version>

  </dependency>

  <!-- config need jar -->

  <dependency>

  <groupId>commons-lang</groupId>

  <artifactId>commons-lang</artifactId>

  <version>2.6</version>

  </dependency>

  <dependency>

  <groupId>org.apache.geronimo.specs</groupId>

  <artifactId>geronimo-servlet_3.0_spec</artifactId>

  <version>1.0</version>

  </dependency>

  <!-- cofig spring jar -->

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-core</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-expression</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-beans</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-aop</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-context</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-context-support</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-tx</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-jdbc</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-orm</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-oxm</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-web</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-webmvc</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-webmvc-portlet</artifactId>

  <version>${org.springframework.version}</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-test</artifactId>

  <version>${org.springframework.version}</version>

  <scope>test</scope>

  </dependency>

  </dependencies>

  <build>

  <resources>

  <resource>

  <directory>/src/main/resources</directory>

  <filtering>true</filtering>

  </resource>

  </resources>

  </build>

  </project>

  第二步:配置文件整合

  Web.xml文件配置

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

  <web-app version="2.4"

  xmlns="http://java.sun.com/xml/ns/j2ee"

  xmlns:xsi="w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <listener>

  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

  <context-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>/WEB-INF/context/spring-context.xml</param-value>

  </context-param>

  <!-- Spring字符集過濾器 -->

  <filter>

  <filter-name>SpringEncodingFilter</filter-name>

  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

  <init-param>

  <param-name>encoding</param-name>

  <param-value>UTF-8</param-value>

  </init-param>

  <init-param>

  <param-name>forceEncoding</param-name>

  <param-value>true</param-value>

  </init-param>

  </filter>

  <filter-mapping>

  <filter-name>SpringEncodingFilter</filter-name>

  <url-pattern>/*</url-pattern>

  </filter-mapping>

  <servlet>

  <servlet-name>mvc</servlet-name>

  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

  <init-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>/WEB-INF/context/spring-mvc.xml</param-value>

  </init-param>

  <load-on-startup>2</load-on-startup>

  </servlet>

  <servlet-mapping>

  <servlet-name>mvc</servlet-name>

  <url-pattern>/</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

  <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

  </web-app>

  spring-context.xml內容

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

  <beans xmlns="springframework.org/schema/beans"

  xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns:p="springframework.org/schema/p"

  xmlns:mvc="springframework.org/schema/mvc" xmlns:context="springframework.org/schema/context"

  xmlns:util="springframework.org/schema/util"

  xsi:schemaLocation="springframework.org/schema/beans springframework.org/schema/beans/spring-beans-3.0.xsd

  springframework.org/schema/context springframework.org/schema/context/spring-context-3.0.xsd

  springframework.org/schema/mvc springframework.org/schema/mvc/spring-mvc-3.0.xsd

  springframework.org/schema/util springframework.org/schema/util/spring-util-3.0.xsd">

  <!-- 激活@Controller模式 -->

  <mvc:annotation-driven />

  <!-- 對包中的所有類進行掃描,以完成Bean創建和自動依賴注入的功能 需要更改 -->

  <context:component-scan base-package="com.pudp.bae.*" />

  <!-- 引入同文件夾下的redis屬性配置文件 -->

  <import resource="redis-context.xml"/>

  </beans>

  redis-context.xml內容

  <beans     xmlns="springframework.org/schema/beans"

  xmlns:xsi="w3.org/2001/XMLSchema-instance"

  xmlns:p="springframework.org/schema/p"

  xmlns:tx="springframework.org/schema/tx"

  xmlns:context="springframework.org/schema/context"

  xsi:schemaLocation="

  springframework.org/schema/beans

  springframework.org/schema/beans/spring-beans-3.0.xsd

  springframework.org/schema/tx

  springframework.org/schema/tx/spring-tx-3.0.xsd

  springframework.org/schema/context

  springframework.org/schema/context/spring-context-3.0.xsd

  ">

  <!-- scanner redis properties  -->

  <context:property-placeholder location="/WEB-INF/property/redis.properties" />

  <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">

  <property name="maxIdle" value="${redis.maxIdle}" />

  <property name="maxActive" value="${redis.maxActive}" />

  <property name="maxWait" value="${redis.maxWait}" />

  <property name="testOnBorrow" value="${redis.testOnBorrow}" />

  </bean>

<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"

  p:host-name="${redis.host}"

  p:port="${redis.port}"

  p:passWord="${redis.pass}"

  p:pool-config-ref="poolConfig"/>

  <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">

  <property name="connectionFactory"   ref="connectionFactory" />

  </bean>

  </beans>

  Redis.properties文件內容

  # Redis settings

  #redis.host=192.168.20.101

  #redis.port=6380

  #redis.pass=foobared

  redis.host=127.0.0.1

  redis.port=6379

  redis.pass=

  redis.maxIdle=300

  redis.maxActive=600

  redis.maxWait=1000

  redis.testOnBorrow=true

  第三步:Springmvc對Redis的支持與實例應用。

  實例對象

  package com.pudp.bae.model;

  import com.pudp.bae.base.BaseModel;

  public class Member extends BaseModel{

  /**

  *

  */

  private static final long serialVersionUID = -1959528436584592183L;

  private String id;

  private String nickname;

  public Member(){}

  public Member(String id, String nickname){

  this.setId(id);

  this.setNickname(nickname);

  }

  public String getId() {

  return id;

  }

  public void setId(String id) {

  this.id = id;

  }

  public String getNickname() {

  return nickname;

  }

  public void setNickname(String nickname) {

  this.nickname = nickname;

  }

  }

  View Code

  Redis對象持久化操作

  package com.pudp.bae.base;

  import java.io.Serializable;

  import org.springframework.beans.factory.annotation.Autowired;

  import org.springframework.data.redis.core.RedisTemplate;

  import org.springframework.data.redis.serializer.RedisSerializer;

  public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {

  @Autowired

  protected RedisTemplate<K,V> redisTemplate ;

  /**

  * 設置redisTemplate

  * @param redisTemplate the redisTemplate to set

  */

  public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {

  this.redisTemplate = redisTemplate;

  }

  /**

  * 獲取 RedisSerializer

  * <br>------------------------------<br>

  */

  protected RedisSerializer<String> getRedisSerializer() {

  return redisTemplate.getStringSerializer();

  }

  }

  package com.pudp.bae.base;

  import java.io.Serializable;

  import org.springframework.beans.factory.annotation.Autowired;

  import org.springframework.data.redis.core.RedisTemplate;

  import org.springframework.data.redis.serializer.RedisSerializer;

  public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {

  @Autowired

  protected RedisTemplate<K,V> redisTemplate ;

  /**

  * 設置redisTemplate

  * @param redisTemplate the redisTemplate to set

  */

  public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {

  this.redisTemplate = redisTemplate;

  }

  /**

  * 獲取 RedisSerializer

  * <br>------------------------------<br>

  */

  protected RedisSerializer<String> getRedisSerializer() {

  return redisTemplate.getStringSerializer();

  }

  }

  redis對象操作

  package com.pudp.bae.dao.redis;

  import java.util.ArrayList;

  import java.util.List;

  import org.springframework.dao.DataaccessException;

  import org.springframework.data.redis.connection.RedisConnection;

  import org.springframework.data.redis.core.RedisCallback;

  import org.springframework.data.redis.serializer.RedisSerializer;

  import org.springframework.stereotype.Repository;

  import org.springframework.util.Assert;

  import com.pudp.bae.base.RedisGeneratorDao;

  import com.pudp.bae.model.Member;

  /**

  * 參看博客 <br>

  * -------------------------------------------------------------------------------

  *  http://blog.csdn.net/java2000_wl/article/details/8543203

  * -------------------------------------------------------------------------------

  */

  @Repository(value="memberDao")

  public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{

  /**

  * 添加對象

  */

  @Override

  public boolean add(final Member member) {

  boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {

  public Boolean doInRedis(RedisConnection connection)

  throws DataAccessException {

  RedisSerializer<String> serializer = getRedisSerializer();

  byte[] key  = serializer.serialize(member.getId());

  byte[] name = serializer.serialize(member.getNickname());

  return connection.setNX(key, name);

  }

  });

  return result;

  }

  /**

  * 添加集合

  */

  @Override

  public boolean add(final List<Member> list) {

  Assert.notEmpty(list);

  boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {

  public Boolean doInRedis(RedisConnection connection)

  throws DataAccessException {

  RedisSerializer<String> serializer = getRedisSerializer();

  for (Member member : list) {

  byte[] key  = serializer.serialize(member.getId());

  byte[] name = serializer.serialize(member.getNickname());

  connection.setNX(key, name);

  }

  return true;

  }

  }, false, true);

  return result;

  }

  /**

  * 刪除對象 ,依賴key

  */

  public void delete(String key) {

  List<String> list = new ArrayList<String>();

  list.add(key);

  delete(list);

  }

  /**

  * 刪除集合 ,依賴key集合

  */

  public void delete(List<String> keys) {

  redisTemplate.delete(keys);

  }

  /**

  * 修改對象

  */

  public boolean update(final Member member) {

  String key = member.getId();

  if (get(key) == null) {

  throw new NullPointerException("數據行不存在, key = " + key);

  }

  boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {

  public Boolean doInRedis(RedisConnection connection)

  throws DataAccessException {

  RedisSerializer<String> serializer = getRedisSerializer();

  byte[] key  = serializer.serialize(member.getId());

  byte[] name = serializer.serialize(member.getNickname());

  connection.set(key, name);

  return true;

  }

  });

  return result;

  }

  /**

  * 根據key獲取對象

  */

  public Member get(final String keyId) {

  Member result = redisTemplate.execute(new RedisCallback<Member>() {

  public Member doInRedis(RedisConnection connection)

  throws DataAccessException {

  RedisSerializer<String> serializer = getRedisSerializer();

  byte[] key = serializer.serialize(keyId);

  byte[] value = connection.get(key);

  if (value == null) {

  return null;

  }

  String nickname = serializer.deserialize(value);

  return new Member(keyId, nickname);

  }

  });

  return result;

  }

  }

  package com.pudp.bae.dao.redis;

  import java.util.ArrayList;

  import java.util.List;

  import org.springframework.dao.DataAccessException;

  import org.springframework.data.redis.connection.RedisConnection;

  import org.springframework.data.redis.core.RedisCallback;

  import org.springframework.data.redis.serializer.RedisSerializer;

  import org.springframework.stereotype.Repository;

  import org.springframework.util.Assert;

  import com.pudp.bae.base.RedisGeneratorDao;

  import com.pudp.bae.model.Member;

  /**

  * 參看博客 <br>

  * -------------------------------------------------------------------------------

  *  http://blog.csdn.net/java2000_wl/article/details/8543203

  * -------------------------------------------------------------------------------

  */

  @Repository(value="memberDao")

  public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{

  /**

  * 添加對象

  */

  @Override

  public boolean add(final Member member) {

  boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {

  public Boolean doInRedis(RedisConnection connection)

  throws DataAccessException {

  RedisSerializer<String> serializer = getRedisSerializer();

  byte[] key  = serializer.serialize(member.getId());

  byte[] name = serializer.serialize(member.getNickname());

  return connection.setNX(key, name);

  }

  });

  return result;

  }

  /**

  * 添加集合

  */

  @Override

  public boolean add(final List<Member> list) {

  Assert.notEmpty(list);

  boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {

  public Boolean doInRedis(RedisConnection connection)

  throws DataAccessException {

  RedisSerializer<String> serializer = getRedisSerializer();

  for (Member member : list) {

  byte[] key  = serializer.serialize(member.getId());

  byte[] name = serializer.serialize(member.getNickname());

  connection.setNX(key, name);

  }

  return true;

  }

}, false, true);

  return result;

  }

  /**

  * 刪除對象 ,依賴key

  */

  public void delete(String key) {

  List<String> list = new ArrayList<String>();

  list.add(key);

  delete(list);

  }

  /**

  * 刪除集合 ,依賴key集合

  */

  public void delete(List<String> keys) {

  redisTemplate.delete(keys);

  }

  /**

  * 修改對象

  */

  public boolean update(final Member member) {

  String key = member.getId();

  if (get(key) == null) {

  throw new NullPointerException("數據行不存在, key = " + key);

  }

  boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {

  public Boolean doInRedis(RedisConnection connection)

  throws DataAccessException {

  RedisSerializer<String> serializer = getRedisSerializer();

  byte[] key  = serializer.serialize(member.getId());

  byte[] name = serializer.serialize(member.getNickname());

  connection.set(key, name);

  return true;

  }

  });

  return result;

  }

  /**

  * 根據key獲取對象

  */

  public Member get(final String keyId) {

  Member result = redisTemplate.execute(new RedisCallback<Member>() {

  public Member doInRedis(RedisConnection connection)

  throws DataAccessException {

  RedisSerializer<String> serializer = getRedisSerializer();

  byte[] key = serializer.serialize(keyId);

  byte[] value = connection.get(key);

  if (value == null) {

  return null;

  }

  String nickname = serializer.deserialize(value);

  return new Member(keyId, nickname);

  }

  });

  return result;

  }

  }

  Controller實現

  package com.pudp.bae.controller;

  import java.util.HashMap;

  import java.util.Map;

  import javax.annotation.Resource;

  import javax.servlet.http.HttpServletRequest;

  import javax.servlet.http.HttpServletResponse;

  import org.springframework.stereotype.Controller;

  import org.springframework.web.bind.annotation.ModelAttribute;

  import org.springframework.web.bind.annotation.PathVariable;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.bind.annotation.RequestMethod;

  import org.springframework.web.servlet.ModelAndView;

  import com.pudp.bae.base.BaseMultiController;

  import com.pudp.bae.model.Member;

  import com.pudp.bae.service.MemberService;

  @Controller

  @RequestMapping(value="/member")

  public class MemberController extends BaseMultiController{

  @Resource(name="memberService")

  private MemberService memberService;

  public void setMemberService(MemberService memberService) {

  this.memberService = memberService;

  }

  @RequestMapping(value={"/add","/add.html"},method={RequestMethod.GET})

  public ModelAndView add(HttpServletRequest request,HttpServletResponse response){

  Map<String,Object> map = new HashMap<String, Object>();

  return toView("member/add", map);

  }

  @RequestMapping(value={"/add","/add.html"},method={RequestMethod.POST})

  public ModelAndView addMember(HttpServletRequest request,HttpServletResponse response,

  @ModelAttribute("member")Member member){

  Map<String,Object> map = new HashMap<String, Object>();

  System.out.println(member);

  map.put("message", "成功添加數據到庫," + member);

  this.memberService.add(member);

  return toView("member/message", map);

  }

  @RequestMapping(value={"/{id://d+}/query","/{id://d+}/query.html"},method={RequestMethod.GET,RequestMethod.POST})

  public ModelAndView queryMember(HttpServletRequest request,HttpServletResponse response,

  @PathVariable("id")String id){

  Map<String,Object> map = new HashMap<String, Object>();

  System.out.println(id);

  Member member = this.memberService.get(id);

  if(null!=member){

  map.put("message", "查詢Id=" + id + "的用戶名為:" + member.getNickname());

  }else{

  map.put("message", "沒有查詢到與Id=" + id + "相關的數據");

  }

  return toView("member/message", map);

  }

  @RequestMapping(value={"/{id://d+}/delete","/{id://d+}/delete.html"},method={RequestMethod.GET,RequestMethod.POST})

  public ModelAndView deleteMember(HttpServletRequest request, HttpServletResponse response,

  @PathVariable("id")String id){

  Map<String,Object> map = new HashMap<String, Object>();

  try {

  this.memberService.delete(id);

  map.put("message", "刪除Id為" + id +"的用戶成功。");

  } catch (Exception e) {

  e.printStackTrace();

  map.put("message", "刪除Id為" + id +"的用戶失敗, "+e.getMessage());

  }

  return toView("member/message", map);

  }

  }

  整合完畢。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产97色在线|日韩| 日韩毛片在线看| 国产精品三级久久久久久电影| 欧美专区在线播放| 国产成人一区二区| 91在线视频一区| 91免费福利视频| 国产亚洲精品综合一区91| www.日韩欧美| 精品自拍视频在线观看| 欧美精品制服第一页| 亚洲黄色av女优在线观看| 国产欧美日韩高清| 欧美精品久久久久久久| 亚洲精品一二区| 姬川优奈aav一区二区| 日韩毛片在线看| 亚洲aⅴ日韩av电影在线观看| 亚洲专区国产精品| 91亚洲午夜在线| 国产精品美乳一区二区免费| 日韩中文视频免费在线观看| 亚洲色图欧美制服丝袜另类第一页| 欧美孕妇孕交黑巨大网站| 国产噜噜噜噜久久久久久久久| 亚洲精品久久久久国产| 色狠狠av一区二区三区香蕉蜜桃| 亚洲欧洲在线视频| 精品久久久久久久中文字幕| 91sao在线观看国产| 久久久综合免费视频| 成人av电影天堂| 国产精品久久久久久久av电影| 亚洲一二三在线| 色狠狠av一区二区三区香蕉蜜桃| 日韩国产精品亚洲а∨天堂免| 97精品国产97久久久久久免费| 国产精品无av码在线观看| 国产成人精品久久亚洲高清不卡| 色与欲影视天天看综合网| 成人在线视频网| 亚洲成人av资源网| 久久久成人精品| 国产精品高潮呻吟久久av野狼| 国产成人av网址| 欧美激情亚洲自拍| 亚洲天天在线日亚洲洲精| 欧美人与性动交a欧美精品| 亚洲综合成人婷婷小说| 性亚洲最疯狂xxxx高清| 久久久久久999| 成人97在线观看视频| 欧美资源在线观看| 亚洲国产成人久久综合| 亚洲精品一区二区久| 国产一区二中文字幕在线看| 午夜精品一区二区三区在线播放| 中文字幕在线精品| 亚洲欧美日韩另类| 日本不卡高字幕在线2019| 亚洲免费精彩视频| 九九精品在线视频| 日本成人在线视频网址| 国外成人免费在线播放| 国产成人精品一区二区三区| 精品国产户外野外| 国产精品福利在线| 91免费在线视频网站| 亚洲一区二区三区xxx视频| 国产69久久精品成人看| 91伊人影院在线播放| 精品久久久久久中文字幕一区奶水| 欧美一区二三区| 亚洲网址你懂得| 亚洲韩国青草视频| 国产欧美日韩专区发布| 国产成人一区二区三区电影| 亚洲天堂2020| 国产精品爽爽ⅴa在线观看| 亚洲国产日韩欧美在线动漫| 日韩在线中文字| 欧美成人精品影院| 欧美电影免费播放| 性色av一区二区三区红粉影视| 色噜噜狠狠狠综合曰曰曰88av| 亚洲网站在线播放| 最近更新的2019中文字幕| 久久91超碰青草是什么| 久久久精品在线| 欧美激情欧美狂野欧美精品| 亚洲成人教育av| 久久中文久久字幕| 欧美日韩成人在线观看| 亚洲国产高清自拍| 国产精品无码专区在线观看| 亚洲毛片在线免费观看| 亚洲第一页中文字幕| 97超级碰碰人国产在线观看| 97超级碰在线看视频免费在线看| 久久精视频免费在线久久完整在线看| 欧美日韩成人在线视频| 国产精品视频自在线| 色哟哟入口国产精品| 91av在线免费观看| 午夜免费在线观看精品视频| 久久99青青精品免费观看| 日韩中文字幕在线精品| 日韩av免费在线观看| 伊人av综合网| 欧美日韩国产黄| 国产精品揄拍500视频| 亚洲wwwav| 欧美激情精品久久久久久| 亚洲一区二区久久久久久| 日韩在线一区二区三区免费视频| 亚洲精品一区av在线播放| 久久亚洲综合国产精品99麻豆精品福利| 大伊人狠狠躁夜夜躁av一区| 福利一区视频在线观看| 欧美精品在线观看| 国产成人一区二区三区小说| 一色桃子一区二区| 国产日韩精品在线播放| 久久久在线免费观看| 亚洲电影免费观看高清完整版| 国产精品亚发布| 91精品国产自产91精品| 日韩电影在线观看永久视频免费网站| 欧美日韩性视频在线| 国产精品久久久久久久久久ktv| 国产剧情久久久久久| 91成人天堂久久成人| 精品国内亚洲在观看18黄| 国产精品视频不卡| 自拍亚洲一区欧美另类| 国产精品视频精品| 日韩av在线免费观看一区| 久久99精品久久久久久噜噜| 欧美在线视频免费| 欧美一级大片视频| 91av免费观看91av精品在线| 欧美日韩国产一中文字不卡| 国产精品自产拍在线观| 亚洲成人a级网| 久久99青青精品免费观看| 成人在线免费观看视视频| 欧美成人sm免费视频| 九九热精品在线| 96精品久久久久中文字幕| 国产综合久久久久久| 日韩电影中文字幕av| 成人黄色网免费| 亚洲精品久久久久中文字幕欢迎你| 久久久久久久香蕉网| 久久久www成人免费精品| 欧美黄色片在线观看| 国产精品扒开腿做爽爽爽男男| 欧美午夜宅男影院在线观看| 韩曰欧美视频免费观看| 欧美人成在线视频| 欧美激情影音先锋| 欧美日在线观看| 成人国产精品一区二区| 日本成人免费在线|