整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          SpringMVC 05: SpringMVC中攜帶數(shù)據(jù)的頁面跳轉(zhuǎn)

          pringMVC默認(rèn)的參數(shù)對象

          • SpringMVC默認(rèn)的參數(shù)對象是指,不用再另行創(chuàng)建,相當(dāng)于SpringMVC內(nèi)置對象,可以直接聲明并使用
          • 默認(rèn)的參數(shù)對象有:HttpServletRequest,HttpServletResponse,HttpSession,Model,Map,ModelMap
          • 注意:Model,Map,ModelMap和HttpServletRequest對象一樣都使用請求作用域,所以在頁面跳轉(zhuǎn)時(shí),只可以采用轉(zhuǎn)發(fā)方式
          • 如果要采用重定向的方式完成頁面跳轉(zhuǎn)而且還要保證數(shù)據(jù)傳遞的正確性,只能使用HttpSession

          進(jìn)行攜帶數(shù)據(jù)的頁面跳轉(zhuǎn)

          • SpringMVC的項(xiàng)目配置和前面SpringMVC博集中(指SpringMVC 02)配置相同
          • webapp/index.jsp:網(wǎng)站的首頁,用來向后端發(fā)送一個(gè)簡單的攜帶數(shù)據(jù)的get請求
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
              <title>index.jsp</title>
          </head>
          <body>
          <a href="${pageContext.request.contextPath}/data.action?name=餃子">攜帶數(shù)據(jù)進(jìn)行頁面跳轉(zhuǎn)</a>
          </body>
          </html>
          
          • webapp/admin/main.jsp如下:作為請求的最終響應(yīng)頁面,測試在經(jīng)過頁面跳轉(zhuǎn)后,后端放入對應(yīng)作用域中的數(shù)據(jù)是否還有效
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
              <title>main.jsp</title>
          </head>
          <body>
          <h2>顯示頁面跳轉(zhuǎn)時(shí)攜帶的數(shù)據(jù)......</h2>
              <!-- 在經(jīng)過頁面跳轉(zhuǎn)后,在跳轉(zhuǎn)到的頁面里,嘗試獲取之前存放的數(shù)據(jù)-->
          	request: ${requestUser}<br>
          	httpSession: ${sessionUser}<br>
          	model: ${modelUser}<br>
          	map: ${mapUser}<br>
          	modelMap: ${modelMapUser}<br>
              
              <!-- 嘗試直接獲取請求地址中攜帶的參數(shù)數(shù)據(jù)-->
          	param: ${param.name}
          </body>
          </html>
          
          • 創(chuàng)建SpringMVC控制器:DataAction。在控制器的action方法中利用SpringMVC內(nèi)置對象,將數(shù)據(jù)存放到相應(yīng)作用域中
          package com.example.controller;
          
          import com.example.pojo.User;
          import org.springframework.stereotype.Controller;
          import org.springframework.ui.Model;
          import org.springframework.ui.ModelMap;
          import org.springframework.web.bind.annotation.RequestMapping;
          
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpSession;
          import java.util.Map;
          
          @Controller
          public class DataAction {
              @RequestMapping("/data")
              //這幾個(gè)參數(shù)都是SpringMVC內(nèi)置的,可以直接聲明使用
              public String data(HttpServletRequest request, HttpSession httpSession, Model model, Map<Object, Object> map, ModelMap modelMap){
                  
                  //User實(shí)體類含有兩個(gè)屬性:name(String), age(int)。無參構(gòu)造方法。全屬性的有參構(gòu)造方法,getter,setter,toString方法
                  User user = new User("荷包蛋", 20);
                  //將user對象利用各SpringMVC內(nèi)置對象存放到相應(yīng)作用域中
                  request.setAttribute("requestUser", user);
                  httpSession.setAttribute("sessionUser", user);
                  model.addAttribute("modelUser", user);
                  map.put("mapUser", user);
                  modelMap.addAttribute("modelMapUser", user);
                  //最后完成頁面轉(zhuǎn)發(fā)跳轉(zhuǎn)
                  return "main";
              }
          }
          
          • 當(dāng)控制器中的action方法以轉(zhuǎn)發(fā)的方式跳轉(zhuǎn)到webapp/admin/main.jsp頁面時(shí)
          • 部署并啟動(dòng)tomcat進(jìn)行測試
          • 網(wǎng)站首頁(left),響應(yīng)頁面(right):可見對于放入相應(yīng)作用域中的數(shù)據(jù),在經(jīng)過頁面轉(zhuǎn)發(fā)跳轉(zhuǎn)后仍然可以獲取到之前存放的數(shù)據(jù)
          • 而且對于param也可以在響應(yīng)的頁面中直接獲取到隨著前端請求攜帶而來的數(shù)據(jù)(攜帶而來的數(shù)據(jù)放在請求域中,轉(zhuǎn)發(fā)是一次請求,請求域還在,自然可以獲取到)

          • 當(dāng)控制器中的action方法以重定向的方式跳轉(zhuǎn)到webapp/admin/main.jsp頁面時(shí)
          package com.example.controller;
          
          import com.example.pojo.User;
          import org.springframework.stereotype.Controller;
          import org.springframework.ui.Model;
          import org.springframework.ui.ModelMap;
          import org.springframework.web.bind.annotation.RequestMapping;
          
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpSession;
          import java.util.Map;
          
          @Controller
          public class DataAction {
              @RequestMapping("/data")
              public String data(HttpServletRequest request, HttpSession httpSession, Model model, Map<Object, Object> map, ModelMap modelMap){
                  User user = new User("荷包蛋", 20);
                  request.setAttribute("requestUser", user);
                  httpSession.setAttribute("sessionUser", user);
                  model.addAttribute("modelUser", user);
                  map.put("mapUser", user);
                  modelMap.addAttribute("modelMapUser", user);
                  
                  //最后完成頁面的重定向跳轉(zhuǎn)
                  return "redirect:/admin/main.jsp";
              }
          }
          
          • 網(wǎng)站首頁(left),響應(yīng)頁面(right):可見對于放入相應(yīng)作用域中的數(shù)據(jù),在經(jīng)過頁面重定向跳轉(zhuǎn)后只有session域中可以獲取到之前存放的數(shù)據(jù)
          • 因?yàn)楸纠械闹囟ㄏ蚴莾纱握埱螅彩欠旁诘谝淮握埱笥蛑械臄?shù)據(jù),在第二次請求發(fā)起后,之前存放的數(shù)據(jù)對于第二次請求來說已經(jīng)失效,無法訪問原來存放的數(shù)據(jù),而由于瀏覽器并未關(guān)閉,則session域仍然有效,可以正確獲取之前存放在session域中的數(shù)據(jù)

          eb開發(fā)之MVC設(shè)計(jì)模式

          MVC設(shè)計(jì)模式是Web應(yīng)用程序的基本應(yīng)用架構(gòu)之一,也是目前在Web開發(fā)過程中較為流程的開發(fā)架構(gòu)之一。MVC設(shè)計(jì)模式與具體所使用的的服務(wù)器端語言無關(guān),各主流Web服務(wù)器端語言基本上都提供基于MVC設(shè)計(jì)模式的完整解決方案。通過使用MVC設(shè)計(jì)模式可以有效實(shí)現(xiàn)Web程序前后端的分離,可以提高Web開發(fā)的效率與質(zhì)量。本文主要從MVC基本原理角度對該設(shè)計(jì)模式進(jìn)行說明,并給出部分編程語言下MVC的應(yīng)用實(shí)例。


          MVC的基本概念

          MVC基本概念

          MVC設(shè)計(jì)模式是一種邏輯架構(gòu)設(shè)計(jì)模式,它將整個(gè)Web應(yīng)用劃分為三個(gè)層次,分別為M、V、C。三字母分別代表Model(模型)、View(視圖)、Controller(控制器)。其中:

          M:模型層,主要用于對Web應(yīng)用程序業(yè)務(wù)規(guī)則進(jìn)行抽象、封裝與建模,簡單理解Model可以理解為面向?qū)ο箢?,用于?shí)現(xiàn)對業(yè)務(wù)進(jìn)行抽象封裝,統(tǒng)一對外提供業(yè)務(wù)功能。

          V:視圖,主要用于輸出展示頁面內(nèi)容,對于Web應(yīng)用程序最終輸出的內(nèi)容為HTML文檔結(jié)構(gòu),因此視圖主要負(fù)責(zé)返回用戶瀏覽器HTML頁面信息。

          C:控制器,控制器是聯(lián)系模型與視圖的橋梁,對于用戶前端交互請求發(fā)送到服務(wù)器端之后,通過選擇不同的控制器,調(diào)用Model中定義的業(yè)務(wù)邏輯,將運(yùn)行結(jié)果傳遞給View視圖,最終輸出到客戶端。

          除以上基本概念與對象之外,在MVC模式下一般還包括路由機(jī)制、網(wǎng)頁模板兩類對象概念。它們也是MVC設(shè)計(jì)模式實(shí)現(xiàn)過程的重要組成部分。


          1、路由機(jī)制

          路由從字面理解即為路徑、路途來源等概念。路由在MVC模式下是指針對前端發(fā)送的頁面訪問請求,交由合適的控制器去處理。一個(gè)企業(yè)級應(yīng)用Web,在MVC模式下每一個(gè)控制器對應(yīng)一個(gè)特定的業(yè)務(wù)邏輯。因此需要準(zhǔn)確將訪問請求交由控制器處理。

          MVC模式路由機(jī)制

          2、Web Page模板

          前端網(wǎng)頁設(shè)計(jì)過程中,針對頁面較多情況,往往將各頁面公共部分抽象成網(wǎng)頁的模板,在實(shí)際交互操作過程中通過對模板指定位置寫入數(shù)據(jù)生成視圖,將生成后的結(jié)果返回客戶端瀏覽器。

          Web page Template


          MVC模式工作原理

          MVC工作過程描述如下圖所示,從用戶發(fā)出HTTP訪問請求,到服務(wù)器端以HTML、CSS等返回視圖結(jié)束,一共需要經(jīng)歷5個(gè)步驟,分別描述為:

          MVC模式工作過程描述

          1、發(fā)送HTTP請求

          用戶通過瀏覽器地址欄填寫訪問申請HTTP請求,經(jīng)過網(wǎng)絡(luò)發(fā)送到服務(wù)器端。絕大部分服務(wù)器端支持控制器加方法形式進(jìn)行訪問,如我們訪問HomeController控制器下的index方法,則可以定義請求http://***.com/Home/index。

          2、路由到指定控制器

          因?yàn)榘l(fā)送的訪問請求是具有特殊格式的,如上一條所給出的示例。在服務(wù)器端可從請求中提出出控制器與方法。上例中控制器位HomeController、方法名稱為index,因此可以交由該控制器的index方法進(jìn)行處理。

          3、調(diào)用模型(與模型相互作用)

          在處理請求的方法,如index中需要針對某一業(yè)務(wù)進(jìn)行操作,因此在編寫實(shí)現(xiàn)該方法時(shí)需要調(diào)用封裝好點(diǎn)的業(yè)務(wù)邏輯規(guī)則進(jìn)行業(yè)務(wù)處理。即調(diào)用model進(jìn)行業(yè)務(wù)的處理。

          4、控制器調(diào)用視圖

          控制器調(diào)用業(yè)務(wù)模型處理完成之后,需要將處理結(jié)果渲染到View視圖中。在渲染過程中可能需要調(diào)用頁面模板,實(shí)現(xiàn)對指定內(nèi)容進(jìn)行填充。

          5、客戶端呈現(xiàn)視圖

          視圖渲染完成生成操作結(jié)果頁面之后,通過互聯(lián)網(wǎng)網(wǎng)絡(luò)將HTML等文件直接發(fā)送客戶端瀏覽器,由瀏覽器負(fù)責(zé)解釋。


          MVC的應(yīng)用

          目前絕大多數(shù)服務(wù)端編程語言都支持MVC設(shè)計(jì)模式,如PHP、ASP.NET等。其中PHP第三方服務(wù)器框架laravel是使用較為廣泛的MVC設(shè)計(jì)模式。ASP.NET通過其提供的asp.net mvc 5實(shí)現(xiàn)對MVC設(shè)計(jì)模式的支持。這些基于MVC的設(shè)計(jì)模式,工作過程與原理基本一致。


          本頭條號長期關(guān)注編程資訊分享;編程課程、素材、代碼分享及編程培訓(xùn)。如果您對以上方面有興趣或建議與意見,可以聯(lián)系作者,共同探討。期待大家關(guān)注!相關(guān)文章鏈接如下:

          架構(gòu)設(shè)計(jì)-PHP+MySQL高負(fù)載高并發(fā)架構(gòu)設(shè)計(jì)的思考

          Laravel框架-用戶注冊功能實(shí)現(xiàn)(路由、控制器、視圖)

          .Spring Boot設(shè)置歡迎頁面

          1.默認(rèn)歡迎頁的源碼

          在Spring Boot中,默認(rèn)的歡迎界面是index.html,那為什么這樣呢?我們可以看看源碼是怎么定義的。

          public class WebMvcAutoConfiguration {
             private Optional<Resource> getWelcomePage() {
                 String[] locations = getResourceLocations(this.resourceProperties.getStaticLocations());
                 return Arrays.stream(locations).map(this::getIndexHtml).filter(this::isReadable).findFirst();
             }
          
              private Resource getIndexHtml(String location) {
                  return this.resourceLoader.getResource(location + "index.html");
              }
          }

          從源碼中我們可以看到,歡迎頁的靜態(tài)資源文件默認(rèn)就是index.html頁面,并且只要該頁面存放在resources目錄下的默認(rèn)路徑中,就會(huì)被"/**"映射。

          classpath:/META-INF/resources/ 
          classpath:/resources/
          classpath:/static/ 
          classpath:/public/
          /:當(dāng)前項(xiàng)目的根路徑

          也就是只要index.html頁面在以上幾個(gè)目錄內(nèi),就會(huì)自動(dòng)被Spring Boot探測到。

          2.實(shí)驗(yàn)驗(yàn)證

          2.1 創(chuàng)建web項(xiàng)目(略)

          目錄結(jié)構(gòu)如下,在該項(xiàng)目中,我們在resources目錄下,創(chuàng)建4個(gè)子文件夾,具體參考上一章節(jié)。然后在每個(gè)子文件夾中,都存放一個(gè)index.html文件,但是文件內(nèi)容略有不同,每個(gè)文件都有自己的編號。

          每個(gè)index.html文件內(nèi)容的編號不同,以此類推!

          2.2 啟動(dòng)項(xiàng)目測試

          我們啟動(dòng)web項(xiàng)目,輸入地址http://localhost:8080會(huì)發(fā)現(xiàn),默認(rèn)加載的是META-INF/resources目錄下的index.html文件,為什么呢?這與靜態(tài)資源文件夾的優(yōu)先級有關(guān)系哦,我們上一章節(jié)已經(jīng)講過了

          二.自定義歡迎頁面

          但在實(shí)際開發(fā)中,我們有時(shí)候就希望先訪問登錄界面,然后登錄成功后再跳到主頁面,那此時(shí)如何將登錄頁面作為歡迎頁面呢?

          這個(gè)可以有兩種實(shí)現(xiàn)方式。

          • 視圖控制器配置方式;
          • Controller直接實(shí)現(xiàn)方式;

          1.視圖控制器配置方式

          1.1 創(chuàng)建配置類

          我們可以在上面的web項(xiàng)目中,創(chuàng)建一個(gè)WebMvcConfigurerAdapter類。

          package com.yyg.boot.config;
          
          import org.springframework.context.annotation.Configuration;
          import org.springframework.core.Ordered;
          import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
          import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
          import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
          
          /**
           * @Description Description
           * @Author 一一哥Sun
           * @Date Created in 2020/3/21
           */
          @Configuration
          public class DefaultViewConfig extends WebMvcConfigurerAdapter {
          
              @Override
              public void addViewControllers(ViewControllerRegistry registry) {
                  //這里的"/"是訪問路徑,"forward:home.html"是請求轉(zhuǎn)發(fā)到的頁面名稱
                  registry.addViewController("/").setViewName("forward:home.html");
                  //設(shè)置優(yōu)先級
                  registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
                  super.addViewControllers(registry);
              }
          
          }

          1.2 創(chuàng)建home.html頁面

          我們在static目錄下創(chuàng)建一個(gè)home.html頁面。

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>Home</title>
          </head>
          <body>
              <h1>一一哥的Home頁面...</h1>
          </body>
          </html>

          1.3 運(yùn)行測試

          接著我們運(yùn)行程序,輸入地址:http://localhost:8080就可以看到如下歡迎界面。

          2. Controller直接實(shí)現(xiàn)方式

          我們在上一個(gè)例子的基礎(chǔ)之上,創(chuàng)建一個(gè)Controller類。

          注意:

          把上一個(gè)案例中DefaultViewConfig配置類的@Configure注解去掉,避免影響到本次實(shí)驗(yàn)。

          2.1 項(xiàng)目結(jié)構(gòu):

          2.2 創(chuàng)建Controller

          package com.yyg.boot.web;
          
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;
          
          /**
           * @Description Description
           * @Author 一一哥Sun
           * @Date Created in 2020/3/21
           */
          @Controller
          public class WelcomeController {
          
              @RequestMapping("/")
              public String view() {
                  return "forward:home.html";
              }
          
          }

          2.3 運(yùn)行測試

          接著我們運(yùn)行程序,輸入地址:http://localhost:8080就可以看到如下歡迎界面。

          三.結(jié)合Thymeleaf模板實(shí)現(xiàn)歡迎頁面

          我們可以結(jié)合Thymeleaf模板,來實(shí)現(xiàn)歡迎頁面。

          1.添加依賴包

          在該web項(xiàng)目的pom.xml文件中添加依賴包。

          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-thymeleaf</artifactId>
              </dependency>
          </dependencies>

          2.配置模板路徑

          創(chuàng)建application.properties文件,添加如下配置,其實(shí)默認(rèn)也是這個(gè)配置。

          spring.thymeleaf.prefix=classpath:/templates/
          spring.thymeleaf.suffix=.html

          3.創(chuàng)建login.html頁面

          創(chuàng)建login.html存放到/templates/目錄下。

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>Login</title>
          </head>
          <body>
              <h1>一一哥的登錄頁面...</h1>
          </body>
          </html>

          4.創(chuàng)建Controller接口

          package com.yyg.boot.web;
          
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;
          
          /**
           * @Description Description
           * @Author 一一哥Sun
           * @Date Created in 2020/3/21
           */
          @Controller
          public class WelcomeController {
          
          //    @RequestMapping("/")
          //    public String view() {
          //        return "forward:home.html";
          //    }
          
              @RequestMapping("/")
              public String login() {
                  return "login";
              }
          }

          5.運(yùn)行測試

          輸入地址,http://localhost:8080即可看到歡迎界面。

          四.設(shè)置網(wǎng)站圖標(biāo)Favicon

          1.Favicon簡介

          很多時(shí)候,企業(yè)網(wǎng)站一般都會(huì)有一個(gè)對應(yīng)的網(wǎng)站圖標(biāo)(Favicon),在瀏覽器訪問網(wǎng)站時(shí),對應(yīng)的瀏覽器標(biāo)簽上會(huì)出現(xiàn)對應(yīng)的圖標(biāo)。例如csdn網(wǎng)站上的小圖標(biāo)。

          2.Favicon源碼分析

          我們可以看看Spring中關(guān)于Favicon的源碼。

          @Configuration
          @ConditionalOnProperty(value = {"spring.mvc.favicon.enabled"},matchIfMissing= true)
          public static class FaviconConfiguration implements ResourceLoaderAware {
              private final ResourceProperties resourceProperties;
              private ResourceLoader resourceLoader;
          
              public FaviconConfiguration(ResourceProperties resourceProperties) {
                  this.resourceProperties = resourceProperties;
              }
          
              public void
              setResourceLoader(ResourceLoader resourceLoader) {
                  this.resourceLoader = resourceLoader;
              }
          
              @Bean
              public SimpleUrlHandlerMapping faviconHandlerMapping() {
                  SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
                  mapping.setOrder(-2147483647);
                  mapping.setUrlMap(Collections.singletonMap("**/favicon.ico", this.faviconRequestHandler()));
                  return mapping;
              }
          
              @Bean
              public ResourceHttpRequestHandler faviconRequestHandler() {
                  ResourceHttpRequestHandler
                  requestHandler = new ResourceHttpRequestHandler();
                  requestHandler.setLocations(this.resolveFaviconLocations());
                  return requestHandler;
              }
          
              private List<Resource> resolveFaviconLocations() {
              String[] staticLocations = WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter.getResourceLocations(this.resourceProperties.getStaticLocations());
              List<Resource> locations = new ArrayList(staticLocations.length + 1);
              Stream var10000 = Arrays.stream(staticLocations);
              ResourceLoader var10001 = this.resourceLoader;
              var10001.getClass();
              var10000.map(var10001::getResource).forEach(locations::add);
              locations.add(new ClassPathResource("/"));
              return
              Collections.unmodifiableList(locations);
             }
          }

          3.SpringBoot 1.x與2.x版本區(qū)別

          在SpringBoot 1.x版本中對Favicon進(jìn)行了默認(rèn)支持,并且可以通過如下配置進(jìn)行關(guān)閉操作:

          spring.mvc.favicon.enabled=false ## 關(guān)閉

          默認(rèn)的Favicon圖標(biāo)效果:

          但到了SpringBoot2.x版本后,在Spring Boot項(xiàng)目的issues中提出,如果用戶不進(jìn)行自定義的Favicon的設(shè)置,而Spring Boot項(xiàng)目會(huì)提供默認(rèn)的圖標(biāo),而如果提供默認(rèn)的Favicon圖標(biāo),則可能會(huì)導(dǎo)致泄露網(wǎng)站的開發(fā)框架這樣的信息。

          因此,在Spring Boot2.2.x中,將默認(rèn)的favicon.ico移除,同時(shí)也不再提供上述application.properties中的屬性配置。更多詳細(xì)信息可查看對應(yīng)的issues:https://github.com/spring-pr

          4.SpringBoot2.x項(xiàng)目中添加Favicon

          在2.x以前的版本,直接將你需要的favicon.ico文件存放在static下面就可以。

          但到了2.2.X以后的版本,去掉了默認(rèn)的自動(dòng)配置,需要我們手動(dòng)在每一個(gè)頁面添加自己網(wǎng)站的Favicon圖標(biāo)。

          我們可以在static目錄下創(chuàng)建一個(gè)images目錄,里面存放自己的Favicon.ico圖標(biāo)。

          4.1 html頁面中添加

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>Login</title>
              <link rel="icon" href="images/Favicon.ico" type="image/x-icon"/>
          </head>
          <body>
          <h1>一一哥的登錄頁面...</h1>
          </body>
          </html>

          4.2 Thymeleaf頁面中添加

          <!DOCTYPE html>
          <html lang="en" xmlns:th="http://www.thymeleaf.org">
          <head>
          <meta charset="UTF-8"/>
          <title>Hello Favicon</title>
          <link rel="icon" th:href="@{/favicon.ico}" type="image/x-icon"/>
          </head>
          <body>
          <h1>Hello 一一哥!</h1>
          </body>
          </html>

          5.重啟項(xiàng)目測試

          我們重新訪問頁面,可以看到Favicon圖標(biāo)已經(jīng)換成了我自己的圖標(biāo)。


          主站蜘蛛池模板: 国产日韩一区二区三免费高清| 久久91精品国产一区二区| 日韩精品一区二区三区中文版 | 一区二区三区亚洲视频| 国产凹凸在线一区二区| 国产亚洲自拍一区| 国产一区在线视频| 亚洲毛片不卡av在线播放一区| 伊人久久精品一区二区三区| 国产精品一区二区久久乐下载| 日韩免费视频一区| 国产精品亚洲专一区二区三区| 国产乱子伦一区二区三区| 精品无码人妻一区二区三区18| 亚洲av色香蕉一区二区三区蜜桃| 无码国产精品一区二区免费式直播 | 无码乱码av天堂一区二区| 亚洲熟女综合一区二区三区| 欧美av色香蕉一区二区蜜桃小说| 国产精品久久无码一区二区三区网 | 久久久国产精品亚洲一区 | 亚洲丰满熟女一区二区v| 精品国产一区二区三区色欲| 精产国品一区二区三产区| 国产亚洲综合一区二区三区| 三上悠亚一区二区观看| 无码人妻精品一区二区三区99仓本| 亚洲男女一区二区三区| 成人精品一区二区电影| www.亚洲一区| 日韩精品一区二区三区色欲AV| 国产福利一区二区三区在线视频| 成人H动漫精品一区二区| 色狠狠色狠狠综合一区| 视频在线观看一区二区三区| 一区二区三区免费电影| 国产福利电影一区二区三区| 国产高清在线精品一区二区| 国产av天堂一区二区三区| 国产一区三区三区| 亚洲A∨精品一区二区三区 |