Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲一区二区三区免费,伊人青青草原,成人免费一级毛片在线播放视频

          整合營(yíng)銷(xiāo)服務(wù)商

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

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

          SpringMVC知識(shí) day02 常用注解&amp

          SpringMVC知識(shí) day02 常用注解&響應(yīng)數(shù)據(jù)&文件上傳

          、常用注解

          1.1 RequestParam

          1.1.1 使用說(shuō)明

          作用: 把請(qǐng)求中指定名稱的參數(shù)給控制器中的形參賦值。

          屬性:

          value:請(qǐng)求參數(shù)中的名稱。

          required:請(qǐng)求參數(shù)中是否必須提供此參數(shù)。默認(rèn)值:true。表示必須提供,如果不提供將報(bào)錯(cuò)。


          1.1.2 使用示例


          1.2 RequestBody

          1.2.1 使用說(shuō)明

          作用:

          用于獲取請(qǐng)求體內(nèi)容。直接使用得到是 key=value&key=value...結(jié)構(gòu)的數(shù)據(jù)。 get 請(qǐng)求方式不適用。

          屬性:

          required:是否必須有請(qǐng)求體。默認(rèn)值是true。當(dāng)取值為 true 時(shí),get 請(qǐng)求方式會(huì)報(bào)錯(cuò)。如果取值為false,get 請(qǐng)求得到是 null。


          1.2.2 使用示例


          1.3 PathVaribale

          1.3.1 使用說(shuō)明

          作用:

          用于綁定 url 中的占位符。例如:請(qǐng)求url中/delete/{id},這個(gè){id}就是url占位符。是springmvc 支持 rest 風(fēng)格 URL 的一個(gè)重要標(biāo)志。

          屬性:

          value:用于指定 url 中占位符名稱。

          required:是否必須提供占位符。


          1.3.2 使用示例


          1.3.3 REST 風(fēng)格 URL

          什么是 rest:

          REST(英文:Representational State Transfer,簡(jiǎn)稱 REST)描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng), 比如 web 應(yīng)用程序。它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規(guī)范的主要編寫(xiě)者之 一。在目前主流的三種 Web 服務(wù)交互方案中,REST 相比于 SOAP(Simple Object Access protocol,簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議)以及 XML-RPC 更加簡(jiǎn)單明了,無(wú)論是對(duì) URL 的處理還是對(duì) Payload 的編碼,REST 都傾向于用更加簡(jiǎn)單輕量的方法設(shè)計(jì)和實(shí)現(xiàn)。值得注意的是 REST 并沒(méi)有一個(gè)明確的標(biāo)準(zhǔn),而更像是一種設(shè)計(jì)的風(fēng)格。

          它本身并沒(méi)有什么實(shí)用性,其核心價(jià)值在于如何設(shè)計(jì)出符合 REST 風(fēng)格的網(wǎng)絡(luò)接口。

          restful 的優(yōu)點(diǎn):它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)、易于理解、擴(kuò)展方便,所以正得到越來(lái)越多網(wǎng)站的采用。

          restful 的特性:

          資源(Resources):網(wǎng)絡(luò)上的一個(gè)實(shí)體,或者說(shuō)是網(wǎng)絡(luò)上的一個(gè)具體信息。 它可以是一段文本、一張圖片、一首歌曲、一種服務(wù),總之就是一個(gè)具體的存在。可以用一個(gè) URI(統(tǒng)一資源定位符)指向它,每種資源對(duì)應(yīng)一個(gè)特定的 URI 。要獲取這個(gè)資源,訪問(wèn)它的 URI 就可以,因此 URI 即為每一個(gè)資源的獨(dú)一無(wú)二的識(shí)別符。

          表現(xiàn)層(Representation):把資源具體呈現(xiàn)出來(lái)的形式,叫做它的表現(xiàn)層 (Representation)。 比如,文本可以用 txt 格式表現(xiàn),也可以用 HTML 格式、XML 格式、JSON 格式表現(xiàn),甚至可以采用二 進(jìn)制格式。

          狀態(tài)轉(zhuǎn)化(State Transfer):每發(fā)出一個(gè)請(qǐng)求,就代表了客戶端和服務(wù)器的一次交互過(guò)程。 HTTP 協(xié)議,是一個(gè)無(wú)狀態(tài)協(xié)議,即所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶端想要操作服務(wù)器, 必須通過(guò)某種手段,讓服務(wù)器端發(fā)生“狀態(tài)轉(zhuǎn)化”(State Transfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是 “表現(xiàn)層狀態(tài)轉(zhuǎn)化”。具體說(shuō),就是 HTTP 協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞:GET 、POST 、PUT、 DELETE。它們分別對(duì)應(yīng)四種基本操作:GET 用來(lái)獲取資源,POST 用來(lái)新建資源,PUT 用來(lái)更新資源,DELETE 用來(lái)刪除資源。


          1.3.4 基于 HiddentHttpMethodFilter 的示例

          作用: 由于瀏覽器 form 表單只支持 GET 與 POST 請(qǐng)求,而 DELETE、PUT 等 method 并不支持,Spring3.0 添 加了一個(gè)過(guò)濾器,可以將瀏覽器請(qǐng)求改為指定的請(qǐng)求方式,發(fā)送給我們的控制器方法,使得支持 GET、POST、PUT 與 DELETE 請(qǐng)求。

          使用方法:

          第一步:在 web.xml 中配置該過(guò)濾器。

          第二步:請(qǐng)求方式必須使用 post 請(qǐng)求。

          第三步:按照要求提供_method 請(qǐng)求參數(shù),該參數(shù)的取值就是我們需要的請(qǐng)求方式。


          1.4 RequestHeader

          1.4.1 使用說(shuō)明

          作用: 用于獲取請(qǐng)求消息頭。

          屬性: value:提供消息頭名稱

          required:是否必須有此消息頭

          注: 在實(shí)際開(kāi)發(fā)中一般不怎么用。


          1.5 CookieValue

          1.5.1 使用說(shuō)明

          作用: 用于把指定 cookie 名稱的值傳入控制器方法參數(shù)。

          屬性: value:指定 cookie 的名稱。

          required:是否必須有此 cookie。


          1.5.2 使用舉例:


          1.6 ModelAttribute

          1.6.1 使用說(shuō)明

          作用:

          該注解是 SpringMVC4.3 版本以后新加入的。它可以用于修飾方法和參數(shù)。 出現(xiàn)在方法上,表示當(dāng)前方法會(huì)在控制器的方法執(zhí)行之前,先執(zhí)行。它可以修飾沒(méi)有返回值的方法,也可以修飾有具體返回值的方法。

          出現(xiàn)在參數(shù)上,獲取指定的數(shù)據(jù)給參數(shù)賦值。


          屬性:

          value:用于獲取數(shù)據(jù)的 key。key 可以是 POJO 的屬性名稱,也可以是 map 結(jié)構(gòu)的 key。


          應(yīng)用場(chǎng)景:

          當(dāng)表單提交數(shù)據(jù)不是完整的實(shí)體類(lèi)數(shù)據(jù)時(shí),保證沒(méi)有提交數(shù)據(jù)的字段使用數(shù)據(jù)庫(kù)對(duì)象原來(lái)的數(shù)據(jù)。

          例如: 我們?cè)诰庉嬕粋€(gè)用戶時(shí),用戶有一個(gè)創(chuàng)建信息字段,該字段的值是不允許被修改的。在提交表單數(shù)據(jù)是肯定沒(méi)有此字段的內(nèi)容,一旦更新會(huì)把該字段內(nèi)容置為 null,此時(shí)就可以使用此注解解決問(wèn)題。


          1.7 SessionAttribute

          1.7.1 使用說(shuō)明

          作用: 用于多次執(zhí)行控制器方法間的參數(shù)共享。

          屬性: value:用于指定存入的屬性名稱

          type:用于指定存入的數(shù)據(jù)類(lèi)型。


          二、響應(yīng)數(shù)據(jù)和結(jié)果視圖

          2.1 返回值分類(lèi)

          2.1.1 字符串


          2.1.2 void

          Servlet 原始 API 可以作為控制器中方法的參數(shù): @RequestMapping("/testReturnVoid")

          public void testReturnVoid(HttpServletRequest request,HttpServletResponse response) throws Exception { }


          在 controller 方法形參上可以定義 request 和 response,使用 request 或 response 指定響應(yīng)結(jié)果:

          1、使用 request 轉(zhuǎn)向頁(yè)面,如下:

          request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);


          2、也可以通過(guò) response 頁(yè)面重定向: response.sendRedirect("testRetrunString")


          3、也可以通過(guò) response 指定響應(yīng)結(jié)果,例如響應(yīng) json 數(shù)據(jù): response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("json 串");


          2.1.3 ModelAndView

          ModelAndView 是 SpringMVC 為我們提供的一個(gè)對(duì)象,該對(duì)象也可以用作控制器方法的返回值。


          示例代碼:

          @RequestMapping("/testReturnModelAndView")

          public ModelAndView testReturnModelAndView() {

          ModelAndView mv=new ModelAndView();

          mv.addObject("username", "張三");

          mv.setViewName("success");

          return mv;

          }


          2.2 轉(zhuǎn)發(fā)和重定向

          2.2.1 forward 轉(zhuǎn)發(fā)

          controller 方法在提供了 String 類(lèi)型的返回值之后,默認(rèn)就是請(qǐng)求轉(zhuǎn)發(fā)。我們也可以寫(xiě)成:


          @RequestMapping("/testForward")

          public String testForward() {

          System.out.println("AccountController 的 testForward 方法執(zhí)行了");

          return "forward:/WEB-INF/pages/success.jsp";

          }

          注意:如果用了formward:則路徑必須寫(xiě)成實(shí)際視圖url,不能寫(xiě)邏輯視圖。

          它相當(dāng)于“request.getRequestDispatcher("url").forward(request,response)”使用請(qǐng)求 轉(zhuǎn)發(fā),既可以轉(zhuǎn)發(fā)到 jsp,也可以轉(zhuǎn)發(fā)到其他的控制器方法。


          2.2.2 Redirect 重定向


          2.3 ResponseBody 響應(yīng) json 數(shù)據(jù)

          2.3.1 使用說(shuō)明

          作用: 該注解用于將 Controller 的方法返回的對(duì)象,通過(guò) HttpMessageConverter 接口轉(zhuǎn)換為指定格式的數(shù)據(jù),如:json,xml 等,通過(guò)Response響應(yīng)給客戶端


          2.3.2 使用示例

          需求: 使用@ResponseBody 注解實(shí)現(xiàn)將 controller 方法返回對(duì)象轉(zhuǎn)換為 json 響應(yīng)給客戶端。

          前置知識(shí)點(diǎn): Springmvc 默認(rèn)用 MappingJacksonHttpMessageConverter 對(duì) json 數(shù)據(jù)進(jìn)行轉(zhuǎn)換,需要加入 jackson 的包。


          jsp 中的代碼:


          控制器中的代碼:


          三、SpringMVC 實(shí)現(xiàn)文件上傳

          3.1 文件上傳的回顧

          3.1.1 文件上傳的必要前提


          3.1.2 文件上傳的原理分析

          3.1.3 借助第三方組件實(shí)現(xiàn)文件上傳


          3.2 springmvc 傳統(tǒng)方式的文件上傳

          3.2.1 說(shuō)明

          傳統(tǒng)方式的文件上傳,指的是我們上傳的文件和訪問(wèn)的應(yīng)用存在于同一臺(tái)服務(wù)器上。 并且上傳完成之后,瀏覽器可能跳轉(zhuǎn)。


          3.2.2 實(shí)現(xiàn)步驟

          3.2.2.1 第一步:拷貝文件上傳的 jar 包到工程的 lib 目錄


          3.2.2.2 第二步:編寫(xiě) jsp 頁(yè)面


          3.2.2.3 第三步:編寫(xiě)控制器


          3.2.2.4 第四步:配置文件解析器


          3.3 springmvc 跨服務(wù)器方式的文件上傳

          3.3.1 分服務(wù)器的目的

          在實(shí)際開(kāi)發(fā)中,我們會(huì)有很多處理不同功能的服務(wù)器。例如:

          應(yīng)用服務(wù)器:負(fù)責(zé)部署我們的應(yīng)用

          數(shù)據(jù)庫(kù)服務(wù)器:運(yùn)行我們的數(shù)據(jù)庫(kù)

          緩存和消息服務(wù)器:負(fù)責(zé)處理大并發(fā)訪問(wèn)的緩存和消息

          文件服務(wù)器:負(fù)責(zé)存儲(chǔ)用戶上傳文件的服務(wù)器。

          分服務(wù)器處理的目的是讓服務(wù)器各司其職,從而提高我們項(xiàng)目的運(yùn)行效率。


          3.3.2 準(zhǔn)備兩個(gè) tomcat 服務(wù)器,并創(chuàng)建一個(gè)用于存放圖片的 web 工程


          3.3.3 拷貝 jar 包


          3.3.4 編寫(xiě)控制器實(shí)現(xiàn)上傳圖片


          3.3.5 編寫(xiě) jsp 頁(yè)面


          3.3.6 配置解析器

          開(kāi)源精選》是我們分享Github、Gitee等開(kāi)源社區(qū)中優(yōu)質(zhì)項(xiàng)目的欄目,包括技術(shù)、學(xué)習(xí)、實(shí)用與各種有趣的內(nèi)容。本期推薦的是一個(gè)基于springmvc的快速生成url和參數(shù) 的IDEA 插件——Restful Fast Request。


          Restful Fast Request是一個(gè)基于springmvc的幫助你快速生成url和參數(shù) 的IDEA 插件。同時(shí)也是一個(gè)http client工具,只需按一下方法左側(cè)的火箭小圖標(biāo),插件會(huì)自動(dòng)生成方法的url和參數(shù)顯示在工具窗口,再點(diǎn)擊發(fā)送請(qǐng)求即可在IDEA內(nèi)完成API調(diào)試,并且可以保存歷史請(qǐng)求,方便多次使用調(diào)試。


          Restful Fast Request功能:

          • 一鍵生成url和參數(shù)
          • 發(fā)送請(qǐng)求調(diào)試API(支持修改生成的參數(shù))
          • 域名定制及切換
          • 自定義參數(shù)解析
          • 字符串生成策略化
          • 保存API
          • 管理API(搜索過(guò)濾、修改API名稱)
          • 一鍵定位歷史保存的API到方法
          • API轉(zhuǎn)curl

          安裝:

          在IDEA插件Plugins中直接搜索Restful Fast Request

          使用示例:

          • 調(diào)試API發(fā)送請(qǐng)求

          • 針對(duì)響應(yīng)是文件的API

          點(diǎn)擊Send and download

          • API列表

          API列表name取值:

          1.如果方法使用了swagger的@io.swagger.annotations.ApiOperation,則取該注解的value值

          2.如果沒(méi)有swagger直接修飾,則取方法的javaDoc描述

          3.如果意思都沒(méi)有則返回New Request

          API的name值支持修改

          • 保存請(qǐng)求

          保存的請(qǐng)求默認(rèn)會(huì)放入Default Group中,支持拉拽放入別的組

          • 重新生成請(qǐng)求

          如果你已經(jīng)保存一個(gè)請(qǐng)求,但是想徹底重新修改其中的參數(shù),那么你可以選擇該操作

          • CURL 拷貝

          必須是先生成方法url及參數(shù)后,點(diǎn)擊工具欄

          • 快速添加header

          如果你的請(qǐng)求需要一個(gè)token而token可以通過(guò)一個(gè)登陸接口得到,那么你可以不用每次手動(dòng)添加,只需要訪問(wèn)一下登錄接口再通過(guò)以下操作來(lái)處理

          更多內(nèi)容大家可自行前往閱讀。

          開(kāi)源地址:fast-request: IntelliJ plugin Restful Fast Request一個(gè)基于springmvc的幫助你快速生成url和參數(shù)的IDEA 插件。IDEA 版postman工具

          — 完 —

          . SpringMVC執(zhí)行流程

          1.1 SpringMVC三大核心組件

          1.HandlerMapping處理器映射器:建立地址與方法的映射。
          HandlerMapping負(fù)責(zé)根據(jù)用戶請(qǐng)求url找到Handler即處理器,springmvc提供了不同的映射器實(shí)現(xiàn)不同的映射方式,例如:配置文件方式,實(shí)現(xiàn)接口方式,注解方式等。

          2.HandlerAdapter處理器適配器:根據(jù)地址調(diào)用方法。
          Handler 是繼DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler對(duì)具體的用戶請(qǐng)求進(jìn)行處理。

          3.ViewResolver 視圖解析器:處理ModelAndView數(shù)據(jù)和視圖。
          ViewResolver通過(guò)HandlerAdapter對(duì)處理器進(jìn)行執(zhí)行,這是適配器模式的應(yīng)用,通過(guò)擴(kuò)展適配器可以對(duì)更多類(lèi)型的處理器進(jìn)行執(zhí)行。

          1.2 SpringMVC執(zhí)行流程圖

          流程圖

          1.3 Spring執(zhí)行流程具體步驟(參考圖)

          1.用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet。
          2.DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器。
          3.處理器映射器根據(jù)請(qǐng)求url找到具體的處理器,生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。
          4.DispatcherServlet通過(guò)HandlerAdapter處理器適配器調(diào)用處理器。
          5.執(zhí)行處理器(Controller層,也叫后端控制器)。
          6.Controller執(zhí)行完成返回?cái)?shù)據(jù)和視圖(ModelAndView)。
          7.HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet。
          8.DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
          9.ViewReslover解析后返回具體的View視圖(JSP / HTML)。
          10.DispatcherServlet對(duì)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。
          11.DispatcherServlet響應(yīng)用戶,用戶看到界面和數(shù)據(jù)。

          1.4 總結(jié)流程

          Spring MVC所有的請(qǐng)求都經(jīng)過(guò)DispatcherServlet來(lái)統(tǒng)一分發(fā)。DispatcherServlet將請(qǐng)求分發(fā)給Controller之前,需要借助于Spring MVC提供的HandlerMapping定位到具體的Controller。

          HandlerMapping接口負(fù)責(zé)完成客戶請(qǐng)求到Controller映射。

          Controller接口將處理用戶請(qǐng)求,這和Java Servlet扮演的角色是一致的。一旦Controller處理完用戶請(qǐng)求,則返回ModelAndView(數(shù)據(jù)和視圖)對(duì)象給DispatcherServlet前端控制器。從宏觀角度考慮,DispatcherServlet是整個(gè)Web應(yīng)用的控制器;從微觀考慮,Controller是單個(gè)Http請(qǐng)求處理過(guò)程中的控制器,而ModelAndView是Http請(qǐng)求過(guò)程中返回的模型(Model)和視圖(View)。

          返回的視圖需要通過(guò)ViewResolver接口(視圖解析器)在Web應(yīng)用中負(fù)責(zé)查找View對(duì)象,從而將相應(yīng)結(jié)果渲染給客戶。

          2. 創(chuàng)建SpringMVC的三大組件

          SpringMVC中默認(rèn)提供的三大組件有可能過(guò)時(shí),我們可以手動(dòng)設(shè)置這三大組件,一般只需要設(shè)置ViewResolver 視圖解析器,設(shè)置它的前綴prefix和后綴suffix

          2.1 手動(dòng)一個(gè)個(gè)的設(shè)置處理器映射器(不推薦)

          <!--方式1:手動(dòng)一個(gè)個(gè)設(shè)置 -->
            <!-- 處理器映射器 -->
            <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
          
            <!--處理器適配器-->
            <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

          2.2 模型驅(qū)動(dòng)配置處理器映射器和處理器適配器,配置視圖解析器【***】

          <!--方式2:配置處理器映射器和處理器適配器 -->
            <!-- 在選擇mvc標(biāo)簽時(shí),一定要選擇最后的路徑是/mvc的選項(xiàng) -->
            <!-- 這行配置可以替換掉上邊的兩行配置(一步步設(shè)置) -->
            <mvc:annotation-driven/>
          
            <!-- 配置視圖解析器 -->
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          
          <!-- 前綴和后綴 相當(dāng)于 //WEB-INF/jsp/Xxx.jsp-->
            <!--定義頁(yè)面路徑的前綴-->
           <property name="prefix" value="/WEB-INF/jsp/"/>
            <!--定義頁(yè)面路徑的后綴-->
           <property name="suffix" value=".jsp"/>
            </bean>

          2.3【注意】如果mvc標(biāo)簽無(wú)效,頭文件模板。

          <mvc:annotation-driven/>無(wú)效,可能是頭文件不對(duì),下面是一個(gè)參考。

          <?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:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd 
           http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context.xsd 
          http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

          總結(jié):

          SpirngMVC的執(zhí)行流程,其實(shí)非常簡(jiǎn)單。 核心三大處理器處理器映射器(HandlerMapping) 處理URL找到對(duì)應(yīng)處理器(Handler),并將其返回給前端控制器。

          如果你還沒(méi)有掌握這些技術(shù),可以點(diǎn)贊+轉(zhuǎn)發(fā)私信回復(fù)【Java】來(lái)獲取完整的體系資料。


          主站蜘蛛池模板: 日韩三级一区二区| 激情内射亚洲一区二区三区| 无码精品人妻一区二区三区漫画| 亚洲国产欧美国产综合一区| 国产精品视频一区二区三区无码| 欧洲精品一区二区三区| 精品深夜AV无码一区二区| 成人国内精品久久久久一区| 国产一区二区不卡老阿姨| 亚洲宅男精品一区在线观看| 成人一区二区免费视频| 中文字幕在线观看一区| 痴汉中文字幕视频一区| 日韩精品无码Av一区二区| 国产综合无码一区二区色蜜蜜| 亚洲熟妇av一区| 亚洲一区中文字幕在线电影网| 亚洲一区二区电影| 亚洲AV本道一区二区三区四区| 人妻少妇一区二区三区| 国产成人一区二区三区在线| 国产在线精品一区二区在线观看| 中文字幕一区二区日产乱码| 日韩精品人妻一区二区中文八零| 国产一区二区四区在线观看| 国产综合无码一区二区辣椒| 国产AV一区二区三区无码野战| 精品一区二区三区在线视频| 福利一区二区三区视频在线观看| 综合人妻久久一区二区精品| 久久久91精品国产一区二区三区| 国产视频一区二区在线播放| 久久精品动漫一区二区三区| 亚洲制服丝袜一区二区三区 | 精品国产一区二区三区久久久狼 | 麻豆精品人妻一区二区三区蜜桃| 国产福利一区二区三区在线观看 | 一区二区国产在线观看| 国产精品资源一区二区| asmr国产一区在线| 免费无码毛片一区二区APP|