亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Spring的企業(yè)級(jí)Web項(xiàng)目架構(gòu)設(shè)計(jì)研究

        2019-10-08 06:27:21王悅張雷
        軟件 2019年6期

        王悅 張雷

        摘 ?要: 闡述了企業(yè)級(jí)web項(xiàng)目開發(fā)的需求特點(diǎn),架構(gòu)設(shè)計(jì)的基本原則和思路,提出了使用多層結(jié)構(gòu)的Web項(xiàng)目架構(gòu)思想,分析了不同層次的業(yè)務(wù)范圍和功能特點(diǎn),研究了表示層、控制器層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層的主要功能及面相接口編程的實(shí)現(xiàn)方案。

        關(guān)鍵詞: Spring;表示層;控制器層;業(yè)務(wù)邏輯層;數(shù)據(jù)持久化層

        中圖分類號(hào): TP311. 11 ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.06.012

        本文著錄格式:王悅,張雷. 基于Spring的企業(yè)級(jí)Web項(xiàng)目架構(gòu)設(shè)計(jì)研究[J]. 軟件,2019,40(6):5356

        【Abstract】: This paper expounds the requirements and characteristics of enterprise-level web project development, the basic principles and ideas of architecture design, and puts forward the idea of multi-tier web project architecture. It also analyses the business scope and functional characteristics of different levels, and studies the main functions of presentation layer, controller layer, business logic layer and data persistence layer, as well as the implementation scheme of face-to-face interface programming.

        【Key words】: Spring; Presentation layer; Controller layer; Business logic layer; Data persistence layer

        0 ?引言

        伴隨著信息社會(huì)的到來(lái),各類型的應(yīng)用系統(tǒng)不斷涌現(xiàn),在Web領(lǐng)域的應(yīng)用系統(tǒng)開發(fā)中,占據(jù)主導(dǎo)地位的JAVA技術(shù)往往采用Spring框架作為Web項(xiàng)目開發(fā)的主體技術(shù)。Spring框架從誕生到如今已經(jīng)經(jīng)歷了多個(gè)版本,精簡(jiǎn)了大量配置操作,減少了J2EE的使用難度,是業(yè)界較為推崇的主流開源框架。

        在企業(yè)級(jí)項(xiàng)目開發(fā)中,對(duì)于項(xiàng)目開發(fā)的可管理性、科學(xué)性、項(xiàng)目化等方面提出了更高的要求,由于企業(yè)級(jí)項(xiàng)目開發(fā)具有開發(fā)人員多、項(xiàng)目復(fù)雜度高等特點(diǎn),為實(shí)現(xiàn)高內(nèi)聚、低耦合的原則,必須在團(tuán)隊(duì)化項(xiàng)目開發(fā)中有一整套完整的、可分解的、易于

        對(duì)接的架構(gòu)設(shè)計(jì)模型作為開發(fā)的基礎(chǔ),對(duì)架構(gòu)進(jìn)行科學(xué)、合理的分層設(shè)計(jì),達(dá)到原子化的架構(gòu)模型設(shè)計(jì)。

        1 ?基于Spring的企業(yè)級(jí)項(xiàng)目架構(gòu)

        一般來(lái)說(shuō),基于Spring的企業(yè)級(jí)架構(gòu)分為六個(gè)層次,分別是表示層、控制器層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層、數(shù)據(jù)存儲(chǔ)層和操作系統(tǒng)層。

        由圖1可知,表示層是用戶與系統(tǒng)交流的接口層,是用戶直接與系統(tǒng)進(jìn)行信息交互的重要一層,該層又可以叫做用戶接口層,簡(jiǎn)稱UI(user interface);表示層的下面是控制器層,該層負(fù)責(zé)將表示層提交的信息處理后給到下一層業(yè)務(wù)邏輯層,同時(shí)也將業(yè)務(wù)邏輯層的結(jié)果返回給表示層,負(fù)責(zé)相關(guān)頁(yè)面的跳轉(zhuǎn)等操作;業(yè)務(wù)邏輯層是整個(gè)系統(tǒng)的核心,該層定義了系統(tǒng)的主要業(yè)務(wù)需求的實(shí)現(xiàn)與管理[1];數(shù)據(jù)持久化層是負(fù)責(zé)將系統(tǒng)信息在系統(tǒng)與數(shù)據(jù)存儲(chǔ)層之間的操作管理;數(shù)據(jù)存儲(chǔ)層一般是脫離于Web項(xiàng)目的獨(dú)立子系統(tǒng),常用的如MySql數(shù)據(jù)管理系統(tǒng)、Oracle數(shù)據(jù)管理系統(tǒng)等,用于對(duì)數(shù)據(jù)的存取進(jìn)行管理;操作系統(tǒng)層是項(xiàng)目運(yùn)行的環(huán)境,負(fù)責(zé)與網(wǎng)絡(luò)、硬件之間進(jìn)行對(duì)接,是獨(dú)立于Web項(xiàng)目的系統(tǒng)。

        2 ?Spring的表示層

        Spring框架的表示層(Presentation layer)設(shè)計(jì)往往采用較為傳統(tǒng)的Html+Css+JavaScript組合或者Html+Thymeleaf組合,Html是頁(yè)面編程語(yǔ)言,一種標(biāo)準(zhǔn)的標(biāo)簽語(yǔ)言,在大多數(shù)的項(xiàng)目開發(fā)中,其都是一種前端開發(fā)標(biāo)準(zhǔn);Css是頁(yè)面美化的主要工具,近些年來(lái),隨著移動(dòng)設(shè)備的興起對(duì)于多設(shè)備兼容等問(wèn)題的出現(xiàn),Css也推出了Css3這個(gè)版本,可以有效的解決多設(shè)備自適應(yīng)問(wèn)題;JavaScript動(dòng)態(tài)前端編程語(yǔ)言,可以實(shí)現(xiàn)實(shí)時(shí)的前后端信息交互,是目前較為流行的動(dòng)態(tài)前端的主要技術(shù)[2]。

        Thymeleaf是一個(gè)前后端兼顧的框架,可以將后臺(tái)代碼直接在前端頁(yè)面中調(diào)用,同時(shí)可以將前端信息直接帶入后端,結(jié)合Spring框架可以做到很好的前后端互動(dòng)。其在前端的調(diào)用中一般需要在文件中添加th:標(biāo)簽,在后面加入相應(yīng)的代碼可以實(shí)現(xiàn)前后代碼的互動(dòng)。在Spring項(xiàng)目開發(fā)中Thymeleaf是一個(gè)很好的前后端兼容框架,常常被各大項(xiàng)目所采用[3]。

        3 ?Spring的控制器層

        控制器層(Controller Layer)是MVC設(shè)計(jì)模型中的一個(gè)重要環(huán)節(jié),模型(model)、視圖(View)、控制器(Controller)是一種經(jīng)典的設(shè)計(jì)模型,其將項(xiàng)目開發(fā)分為了三個(gè)層次,也就是視圖、控制器、模型,在Spring框架的企業(yè)級(jí)開發(fā)中,在MVC的基礎(chǔ)上更加細(xì)致的劃分了開發(fā)層次,但是控制器層仍然采用MVC中的Controller。

        Spring MVC框架是Spring技術(shù)體系滿足Web項(xiàng)目開發(fā)中采用MVC架構(gòu)時(shí)所設(shè)計(jì)的一個(gè)專用框架,在該框架下,開發(fā)人員可以使用豐富的庫(kù)資源實(shí)現(xiàn)表示層與控制器層之間的交互,滿足前后端信息的傳遞與處理[4]。在Spring MVC框架中常常使用Annotation的方式聲明控制器類,該種情況下的控制器工作流程是,用戶通過(guò)表示層傳遞過(guò)來(lái)的請(qǐng)求信息將被DispatcherServlet控制器攔截,HandlerMapping處理映射關(guān)系,找到對(duì)應(yīng)的處理器,生產(chǎn)處理器對(duì)象及處理器攔截器,DispatcherServlet通過(guò)返回的信息選擇合適的HandlerAdapter(處理適配器),HandlerAdapter調(diào)用并執(zhí)行Handler(這里就是后端控制器,也就是開發(fā)人員開發(fā)的注解Controller類),Handler按照程序執(zhí)行處理后,將返回一個(gè)ModelAndView對(duì)象,該對(duì)象包含對(duì)應(yīng)的返回結(jié)果前端視圖,DispatcherServlet根據(jù)該前端視圖將結(jié)果返回,前端渲染視圖展示結(jié)果。

        DispatcherServlet的配置有兩種方式,Xml和Annotation兩種,Xml配置較為常用,其在Web.xml文件中添加對(duì)應(yīng)的標(biāo)簽。

        ……

        org.springframework.web.servlet. DispatcherServlet

        contextConfigLocation

        /WEB-INF/myspring/ dispatcherConfigs.xml

        1

        1確保Web一旦啟動(dòng)首先運(yùn)行該Servlet,由此可以使得Dispatcher Servlet第一個(gè)被調(diào)用,從而攔截所有Web請(qǐng)求;Annotation的方式是通過(guò)實(shí)現(xiàn)包org.springframework. web中的接口WebApplicationInitializer,并且實(shí)現(xiàn)其onStartup()方法,使用XmlWebApplicationContext創(chuàng)建上下文對(duì)象context,通過(guò)該對(duì)象設(shè)置配置文件路徑,使用ServletRegistration.Dynamic創(chuàng)建dispatcher對(duì)象,由該對(duì)象設(shè)置加載優(yōu)先級(jí)為1,保證當(dāng)Web啟動(dòng)時(shí)首個(gè)啟動(dòng)該Servlet,并且由“/”設(shè)置攔截所有請(qǐng)求[5]。

        public class MyWebA implements WebApplicationInitializer {

        @Override

        public void onStartup(ServletContext arguments) throws Exception {

        XmlWebApplicationContext mycontext = new XmlWebApplicationContext();

        mycontext.setConfigLocation("/WEB-INF/myspring/dispatcherConfigs.xml");

        ServletRegistration.Dynamic mydispatcher = arguments.addServlet("mydispatcher", new DispatcherServlet (mycontext));

        mydispatcher.setLoadOnStartup(1);

        mydispatcher.addMapping("/");

        }

        }

        Spring MVC的核心是一個(gè)配置文件,該文件被存儲(chǔ)在類路徑下,該文件負(fù)責(zé)將DispatcherServlet攔截下來(lái)的Web請(qǐng)求加以分類處理,例如:根據(jù)擴(kuò)展名的不同交由不同的后端控制器處理,一般該配置文件由兩種配置方案處理,一種是使用該配置文件的Xml配置方式,另一種是由Annotation注解的方式加以處理,但是第二種方案仍然需要Spring MVC配置文件的存在。

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

        ……

        ……

        上面是一個(gè)簡(jiǎn)單的Spring MVC配置文件,其中的元素表示,當(dāng)有結(jié)尾為firstController的請(qǐng)求時(shí),由cm.springmvc.controller.FirstController該類加以處理,F(xiàn)irstController是控制器類。以上這個(gè)是一個(gè)有Xml配置的Spring MVC示例,當(dāng)有多個(gè)控制器需要處理時(shí),這種方式就會(huì)顯得較為臃腫,使用Annotation注解的方式實(shí)現(xiàn)控制器的注冊(cè)是企業(yè)級(jí)項(xiàng)目開發(fā)中常常被采用的一種方案,其實(shí)現(xiàn)更為靈活,不會(huì)增加整個(gè)配置文件的負(fù)擔(dān),只需要在Spring MVC的配置文件添加,在該包下面由@Controller注解標(biāo)注的控制器類就會(huì)被檢索到,當(dāng)我們需要添加新的控制器時(shí)只需在該包下創(chuàng)建新的類即可滿足項(xiàng)目需求,從而簡(jiǎn)化項(xiàng)目開發(fā)的管理成本。

        4 ?Spring的業(yè)務(wù)邏輯層

        業(yè)務(wù)邏輯層(Business Logic Layer)是企業(yè)開發(fā)的核心層,是考驗(yàn)一個(gè)項(xiàng)目是否成功的關(guān)鍵所在,其接受上層控制器層傳遞的信息、命令,調(diào)用相關(guān)的算法、下層的數(shù)據(jù)持久化層完成相關(guān)業(yè)務(wù)的處理,并將結(jié)果返回給控制器層,該層是整個(gè)Web項(xiàng)目的核心,控制中樞,在很多大的Web項(xiàng)目中該層都是由設(shè)計(jì)人員首要考慮完成、豐富和實(shí)現(xiàn)的內(nèi)容,由于業(yè)務(wù)邏輯層由業(yè)務(wù)而生,不同的業(yè)務(wù)有不同的需求,所以在Spring框架中并未設(shè)置專屬的類庫(kù)加以封裝,而是由設(shè)計(jì)者采用面向接口編程IOP(Interface-oriented programming)的思維模式設(shè)計(jì)而成,基本思路是,將業(yè)務(wù)中需要實(shí)現(xiàn)的方法統(tǒng)一的由一個(gè)Service接口來(lái)管理,方法具體實(shí)現(xiàn)的內(nèi)容則由實(shí)現(xiàn)該接口的類來(lái)實(shí)現(xiàn),接口可以設(shè)置某一業(yè)務(wù)領(lǐng)域的統(tǒng)一方法名,分支領(lǐng)域的業(yè)務(wù)實(shí)現(xiàn)有所不同,可以為每個(gè)分支領(lǐng)域設(shè)置一個(gè)實(shí)現(xiàn)類來(lái)實(shí)現(xiàn)相關(guān)方法,從而實(shí)現(xiàn)“思想統(tǒng)一,但具體事情具體分析”的特性。

        從目錄結(jié)構(gòu)來(lái)講,業(yè)務(wù)邏輯會(huì)有一個(gè)統(tǒng)一的包,往往采用services結(jié)尾,例如:com.gdkm.services,其中com是公司的簡(jiǎn)稱,gdkm是項(xiàng)目的簡(jiǎn)稱,services代表業(yè)務(wù)邏輯的總目錄,不同的業(yè)務(wù)邏輯可以存放在該目錄下的子目錄中,從而實(shí)現(xiàn)統(tǒng)一、規(guī)范的管理。在某一分支目錄下創(chuàng)建業(yè)務(wù)邏輯,一般是由一個(gè)接口對(duì)應(yīng)多個(gè)實(shí)現(xiàn)類的方式,每個(gè)接口也可以設(shè)置一個(gè)上層父接口,從而實(shí)現(xiàn)代碼復(fù)用。例如:我們要對(duì)賬號(hào)進(jìn)行相關(guān)的業(yè)務(wù)處理,可以構(gòu)建一個(gè)AccountService接口,在該接口中設(shè)置多個(gè)業(yè)務(wù)邏輯處理方法,addAccount(Account account)、findAccountById(Int id)、saveAccount(Account account)、deleteAccount(Int id),分別對(duì)應(yīng)的處理添加賬號(hào),查詢賬號(hào),保存賬號(hào),刪除賬號(hào)的業(yè)務(wù)邏輯,根據(jù)不同的分支領(lǐng)域這些業(yè)務(wù)的實(shí)現(xiàn)由不同的實(shí)現(xiàn)方法來(lái)實(shí)現(xiàn),那就要?jiǎng)?chuàng)建不同的實(shí)現(xiàn)類來(lái)完成,實(shí)現(xiàn)類的命名一般是AccountServiceImp1、AccountServiceImp2以此類推,或者可以將Imp由具體可表示業(yè)務(wù)的簡(jiǎn)稱所取代,這就要由設(shè)計(jì)團(tuán)隊(duì)來(lái)規(guī)范和統(tǒng)一管理[6]。在實(shí)現(xiàn)類中,每個(gè)方法會(huì)根據(jù)業(yè)務(wù)的需要調(diào)用相關(guān)的Api和數(shù)據(jù)持久化層對(duì)象,例如:需要將表示層提交的文件保存到對(duì)應(yīng)的服務(wù)器目錄中,這時(shí)就要對(duì)文件上傳這類業(yè)務(wù)加以處理,可以通過(guò)處理List這個(gè)集合加以處理,并根據(jù)系統(tǒng)設(shè)定的文件存儲(chǔ)方案保存上傳文件,這些操作都需要在具體的業(yè)務(wù)邏輯實(shí)現(xiàn)類中來(lái)完成。

        由上面的分析可知,這一層的設(shè)計(jì)規(guī)范性尤為重要,良好的規(guī)范制定將決定這層結(jié)構(gòu)的設(shè)計(jì)是否符合具體項(xiàng)目的開發(fā)與實(shí)施,甚至是影響整個(gè)項(xiàng)目是否成功的關(guān)鍵所在,有經(jīng)驗(yàn)的架構(gòu)師和分析師會(huì)將相關(guān)的標(biāo)準(zhǔn)和規(guī)范制定清晰,并在實(shí)際的開發(fā)中對(duì)相關(guān)開發(fā)人員加以指導(dǎo),強(qiáng)調(diào)該層次規(guī)范操作的重要性,從而保證項(xiàng)目的順利實(shí)施[7]。

        5 ?Spring的數(shù)據(jù)持久化層

        數(shù)據(jù)持久化層(Data Persistence Layer)是負(fù)責(zé)將項(xiàng)目運(yùn)行中的數(shù)據(jù)信息持久的保存起來(lái)[8],例如:用戶在項(xiàng)目中修改了自己的信息,該信息被保存到數(shù)據(jù)庫(kù)中,這一行為就是一個(gè)持久化的過(guò)程。Spring在持久化的技術(shù)上有自己獨(dú)立的一套技術(shù)體系Spring Data,該套技術(shù)體系中幾乎包括了現(xiàn)有的持久化技術(shù)的全部領(lǐng)域,包括Spring Data Commons、Spring Data JDBC、Spring Data JDBC Ext、Spring Data JPA、Spring Data KeyValue、Spring Data LDAP、Spring Data MonGoDB、Spring Data Redis、Spring Data REST等技術(shù)解決方案,數(shù)據(jù)庫(kù)存儲(chǔ)、非數(shù)據(jù)庫(kù)存儲(chǔ);關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)、非關(guān)系型數(shù)據(jù)庫(kù)等等多個(gè)領(lǐng)域的技術(shù)解決方案Spring Data均給出了相關(guān)技術(shù)支撐。

        在實(shí)際的企業(yè)級(jí)項(xiàng)目開發(fā)中,由于底層采用的存儲(chǔ)方式有所不同,為滿足大多數(shù)持久化操作的需求,往往采用Dao模式進(jìn)行規(guī)范,也就是通過(guò)創(chuàng)建數(shù)據(jù)訪問(wèn)對(duì)象的方式加以設(shè)計(jì),該種模式是一種典型的面相接口編程IOP(Interface-oriented programming)思維,前面業(yè)務(wù)邏輯層使用了該種模式,在數(shù)據(jù)持久化層設(shè)計(jì)中也是如此。有別于業(yè)務(wù)邏輯層的設(shè)計(jì),數(shù)據(jù)持久化層的接口設(shè)計(jì)較為簡(jiǎn)單,一般包括增加、刪除、修改、查詢四類操作,較為復(fù)雜的是查詢操作,可以根據(jù)實(shí)際需要設(shè)計(jì)多個(gè)具體的查詢方法[9]。接口要統(tǒng)一的創(chuàng)建一個(gè)包加以管理,例如:com.gdkm.dao,com是公司名稱,gdkm是項(xiàng)目名稱,dao代表所有的數(shù)據(jù)持久化操作庫(kù)。實(shí)際開發(fā)中可以為每個(gè)細(xì)致的操作設(shè)計(jì)特定的Dao層接口和具體實(shí)現(xiàn)類,例如:賬號(hào)管理的AccountDao,在該接口中創(chuàng)建對(duì)應(yīng)的增加、刪除、修改、查詢方法,save(Account account)、update(Account account)、deleteById(int id)、findById(int id)、findAll()、findByName(Stirng name),以上的方法對(duì)應(yīng)添加、更新、刪除、通過(guò)id查詢、查詢所有、通過(guò)名字查詢幾個(gè)方法,根據(jù)具體要求創(chuàng)建對(duì)應(yīng)的實(shí)現(xiàn)類,實(shí)現(xiàn)類中通過(guò)調(diào)用Spring Data中的具體庫(kù)來(lái)實(shí)現(xiàn)每個(gè)具體的方法,從而實(shí)現(xiàn)數(shù)據(jù)持久化操作。

        6 ?結(jié)束語(yǔ)

        綜上所述,企業(yè)級(jí)項(xiàng)目開發(fā)中對(duì)可管理性、科學(xué)性、項(xiàng)目化等方面提出了更高的要求,堅(jiān)持以實(shí)現(xiàn)高內(nèi)聚、低耦合的Web項(xiàng)目為原則,將Spring項(xiàng)目開發(fā)分為了表示層、控制器層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久化層,研究了各個(gè)層面所設(shè)計(jì)的業(yè)務(wù)領(lǐng)域和實(shí)現(xiàn)方法,著重分析了Spring的控制器層和業(yè)務(wù)邏輯層的設(shè)計(jì)原則、主要技術(shù)和實(shí)現(xiàn)過(guò)程,對(duì)表示層和數(shù)據(jù)持久化層進(jìn)行了深入的分析和研究,從以上的研究可知使用Spring框架開發(fā)的Web項(xiàng)目具有技術(shù)框架成熟、層次劃分清晰、組織架構(gòu)鮮明、人員分工明確等特點(diǎn),適合于中大型的企業(yè)級(jí)軟件項(xiàng)目建設(shè)[10]。

        參考文獻(xiàn)

        [1] Phillip Webb, Dave Syer et al, Spring Boot Reference Guide, https://spring.io/projects/spring-data, Pivotal team, 2019.

        [2] wilkinsona,springboot Reporting Issues, https://github.com/ spring-projects/spring-boot,github.com, 2019.

        [3] 姚云飛, 杜洪波, 梁建輝. 基于 SpringMVC 框架畢業(yè)設(shè)計(jì)管理系統(tǒng)設(shè)計(jì)[J]. 軟件, 2018, 39(01): 91-93.

        [4] 李敏. 基于struts2-hibernate-spring 的Java Web 系統(tǒng)國(guó)際化設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件, 2016, 37(02): 166-169.

        [5] 董恒競(jìng). 一種企業(yè)移動(dòng)應(yīng)用平臺(tái)架構(gòu)設(shè)計(jì)[J]. 軟件, 2016, 37(01): 136-138.

        [6] 韓凌波. 基于mvc 架構(gòu)的普法考試系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件, 2015, 36(3): 132-134.

        [7] 趙康, 李康, 孟晨宇, 等. 基于C/S架構(gòu)的遠(yuǎn)程協(xié)助和管理系統(tǒng)[J]. 軟件, 2015, 36(4): 14-17.

        [8] 黃沛. 基于RESTful架構(gòu)的科技信息共享接口系統(tǒng)的設(shè)計(jì)[J]. 軟件, 2018, 39(7): 170-172.

        [9] 陳瑞, 基于Springboot高并發(fā)Java Web開發(fā)模式[J]. 電腦編程技巧與維護(hù), 2019(04): 27-30.

        [10] 張雷, 王悅, 基于SpringBoot微服務(wù)架構(gòu)下的MVC模型研究[J]. 安徽電子信息職業(yè)技術(shù)學(xué)院學(xué)報(bào), 2018, 17(4): 1-9.

        久久国产精品无码一区二区三区| 国产99久久久国产精品免费看 | 亚洲视频精品一区二区三区| 国产羞羞视频在线观看| 亚洲综合AV在线在线播放| 亚洲一区二区三区在线观看播放| 久久99久久99精品观看| 黑人一区二区三区啪啪网站| 日本女u久久精品视频| 中文字幕人妻久久久中出| 无遮挡很爽很污很黄的女同| 精品国产天堂综合一区在线 | 国产AV国片精品有毛| 免费视频成人 国产精品网站| 久久精品国产亚洲av蜜桃av| 我想看久久久一级黄片| 中文字日产幕码三区国产| 电驱蚊液可以插一晚上吗| 亚洲av成人无码一区二区三区在线观看 | 国产激情久久久久久熟女老人av| 国产成人精品电影在线观看 | 欧美伊人亚洲伊人色综| 日本黄色高清视频久久| 日本乱熟人妻中文字幕乱码69| 最新中文字幕人妻少妇| 人人爽人人澡人人人妻| 成人片黄网站色大片免费观看app| 亚洲人妻无缓冲av不卡| 午夜宅男成人影院香蕉狠狠爱| 中文字幕乱码亚洲在线| 国产香港明星裸体xxxx视频| 国产一区二区三区免费观看在线| 国产又黄又大又粗的视频| 日韩在线无| 亚洲国产精品久久九色| 国产黄色一区二区福利| 看日本全黄色免费a级| 让少妇高潮无乱码高清在线观看| 首页动漫亚洲欧美日韩| 国产成人精品男人的天堂网站| 亚洲二区精品婷婷久久精品|