999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Struts框架技術(shù)簡(jiǎn)析

2012-09-25 01:29:10王剛
關(guān)鍵詞:頁(yè)面用戶(hù)

王剛

(陜西財(cái)經(jīng)職業(yè)技術(shù)學(xué)院信息工程系,陜西咸陽(yáng) 712000)

Struts框架技術(shù)簡(jiǎn)析

王剛

(陜西財(cái)經(jīng)職業(yè)技術(shù)學(xué)院信息工程系,陜西咸陽(yáng) 712000)

本文簡(jiǎn)要介紹了Struts框架技術(shù)及其相關(guān)內(nèi)容,并著重對(duì)Struts框架的組件和Struts框架的高級(jí)特性進(jìn)行了深入的探討。

Struts框架;Struts框架的組件;Struts框架的高級(jí)特性

1 Struts概述

作為Sun JavaEE平臺(tái)下MVC模式的Struts框架,來(lái)源于Craig McClanahan最初的構(gòu)思,它包含兩個(gè)主要的技術(shù)——Servlet和JSP。Struts是Apache組織提供的一項(xiàng)開(kāi)放源碼工程,使用起來(lái)簡(jiǎn)單、方便,實(shí)現(xiàn)的速度快,對(duì)于應(yīng)用系統(tǒng)的開(kāi)發(fā)可以很好地滿(mǎn)足。Struts主要指的是使用在建筑和舊式飛機(jī)中的起支撐作用的金屬架。之所以把這個(gè)框架命名為“Struts”,是提醒我們要記住那些在房屋、建筑物、橋梁以及踩高蹺時(shí)起著一定支撐作用的基礎(chǔ)支架,這也是對(duì)Struts最為典型的描述。建造一個(gè)建筑物時(shí),建筑工程師會(huì)考慮給建筑物的每一層建造相應(yīng)的支柱,以起到對(duì)整個(gè)建筑物的支撐作用。同樣,軟件工程師使用Struts的時(shí)候,會(huì)給業(yè)務(wù)應(yīng)用的每個(gè)層次提供相應(yīng)的支持,就是為了幫助開(kāi)發(fā)人員在采用MVC設(shè)計(jì)模型開(kāi)發(fā)Web應(yīng)用程序時(shí),減少相應(yīng)系統(tǒng)的開(kāi)發(fā)時(shí)間。如果想混合使用Servlets和JSP的優(yōu)點(diǎn)來(lái)構(gòu)建可擴(kuò)展的應(yīng)用,Struts將會(huì)是非常好的選擇。

Struts是一個(gè)通用的用來(lái)實(shí)現(xiàn)MVC模式的框架,其中包括模型、視圖、控制器和一個(gè)XML文件。在這個(gè)框架中,系統(tǒng)的狀態(tài)和業(yè)務(wù)邏輯是模型的主要表現(xiàn)形式,其中ActiomFormBean表現(xiàn)的是系統(tǒng)的有關(guān)狀態(tài),而JavaBean或EJB組件主要用來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯;而通過(guò)JSP就可以建立一個(gè)視圖,同時(shí)由于視圖本來(lái)就含有那些自定義的可用于擴(kuò)充的標(biāo)簽 (Tag1ib),因而就可以大大地簡(jiǎn)化相應(yīng)用戶(hù)界面的實(shí)現(xiàn)過(guò)程。通常是通過(guò)ActionServlet類(lèi)和Action類(lèi)來(lái)實(shí)現(xiàn)Struts框架的控制器,作為Struts框架中的核心組件ActionServlet類(lèi),它的主要作用就是把用戶(hù)相關(guān)的HTTP請(qǐng)求接收起來(lái),并與配置信息進(jìn)行核對(duì),將請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的Action對(duì)象。然而調(diào)用模型的有關(guān)方法是由Action類(lèi)來(lái)完成的,它可以對(duì)模型的狀態(tài)進(jìn)行更新,同時(shí)還應(yīng)輔助進(jìn)行對(duì)應(yīng)用程序的流程控制;Struts有兩個(gè)相應(yīng)的配置文件web.xml和struts-config.xml,其中web.xml除了要對(duì)ActionServlet進(jìn)行相應(yīng)的配置以外,還要對(duì)Web表示層中使用的有關(guān)struts標(biāo)簽庫(kù)進(jìn)行相應(yīng)的聲明。而Strutsconfig.xml則描述的是與Struts相關(guān)的文件,主要是用來(lái)存儲(chǔ)描述用戶(hù)請(qǐng)求的路徑以及相應(yīng)的Action映射關(guān)系的配置信息的。

JSP技術(shù)對(duì)動(dòng)態(tài)頁(yè)面處理邏輯進(jìn)行封裝,通常通過(guò)Java編程語(yǔ)言類(lèi)的XML標(biāo)簽和scriptlets來(lái)進(jìn)行。與此同時(shí),借助于tags和scriptlets相關(guān)的網(wǎng)頁(yè)還可以把保存在服務(wù)端的資源的應(yīng)用邏輯調(diào)用出來(lái)。將網(wǎng)頁(yè)邏輯與網(wǎng)頁(yè)設(shè)計(jì)和顯示分開(kāi)來(lái),通過(guò)JSP技術(shù)就可實(shí)現(xiàn)。因此,JSP技術(shù)可以更好地支持可復(fù)用的基于構(gòu)件的系統(tǒng)設(shè)計(jì),因而采用JSP技術(shù)可以輕易地實(shí)現(xiàn)Web應(yīng)用程序。如果要訪問(wèn)JSP頁(yè)面的請(qǐng)求,那么首先必須把其中相關(guān)的程序通過(guò)Web服務(wù)器執(zhí)行,然后客戶(hù)端會(huì)接收到程序執(zhí)行的結(jié)果以及JSP文件中有關(guān)的HTML代碼。JSP通常把一個(gè)有關(guān)的HTML文本回傳給客戶(hù)端,那么客戶(hù)通過(guò)瀏覽器很容易對(duì)相關(guān)內(nèi)容進(jìn)行直接瀏覽。

HTML源程序代碼以及嵌入HTML之中的Java源程序代碼組合在一起就構(gòu)成了JSP的頁(yè)面。通常,借助于頁(yè)面客戶(hù)端發(fā)出請(qǐng)求,服務(wù)器接收到請(qǐng)求以后,通過(guò)對(duì)這些Java源程序代碼加工,就可以生成相應(yīng)的HTML頁(yè)面,然后將其傳遞給客戶(hù)端瀏覽器。JavaServlet是JSP必不可少的組成部分,是JSP的技術(shù)基礎(chǔ),要成功實(shí)現(xiàn)大型的Web應(yīng)用系統(tǒng),只有把JavaServlet和JSP很好地結(jié)合起來(lái)才能實(shí)現(xiàn)。與Java技術(shù)相同,JSP操作簡(jiǎn)單,實(shí)現(xiàn)容易,是一種完全面向?qū)ο蟮姆椒ǎ磺移渚哂衅脚_(tái)無(wú)關(guān)性,開(kāi)發(fā)出的系統(tǒng)穩(wěn)定、可靠,主要面向互聯(lián)網(wǎng)等特征。可以用一個(gè)簡(jiǎn)單的公式來(lái)表示JSP,即JSP=HTML+Java。

Struts最大的一個(gè)優(yōu)點(diǎn)就是它是一種開(kāi)源軟件,同時(shí),標(biāo)簽庫(kù)和頁(yè)面導(dǎo)航也在某些方面反映出了Struts的優(yōu)勢(shì)。標(biāo)簽庫(kù)是Struts的標(biāo)記庫(kù),靈活運(yùn)用可以極大地提高開(kāi)發(fā)效率。由于頁(yè)面導(dǎo)航的存在,因而開(kāi)發(fā)出來(lái)的系統(tǒng)結(jié)構(gòu)更加合理,層次也比以前更清晰,所以它是Struts今后主要發(fā)展的對(duì)象。只要配置好一個(gè)文件,通過(guò)該文件就可以輕易地把系統(tǒng)相應(yīng)的各個(gè)部分聯(lián)系起來(lái),所以非常有利于系統(tǒng)今后的維護(hù)工作。特別是要繼續(xù)去實(shí)現(xiàn)某個(gè)項(xiàng)目,而又換了一批不同的技術(shù)人員時(shí),它的這種優(yōu)點(diǎn)表現(xiàn)得更加突出。雖然Struts具備這些優(yōu)勢(shì),但初次接觸該技術(shù)的開(kāi)發(fā)人員仍需要不斷地學(xué)習(xí),有時(shí)還需要打亂技術(shù)人員編寫(xiě)網(wǎng)頁(yè)的固有方式。

2 Struts框架的組件分析

2.1 ActionServlet

在Struts中,ActionServlet主要是接收來(lái)自于用戶(hù)的HTTP請(qǐng)求,同時(shí)依據(jù)系統(tǒng)配置信息的要求,把相應(yīng)的請(qǐng)求傳遞給有關(guān)的的Action對(duì)象。在實(shí)施的過(guò)程中,首先要判斷有沒(méi)有Action對(duì)象,如果沒(méi)有,應(yīng)該設(shè)計(jì)出來(lái)相應(yīng)的對(duì)象;然后在請(qǐng)求被接收的同時(shí),會(huì)有一個(gè)相應(yīng)的Action實(shí)例收到通過(guò)控制器傳來(lái)的Action對(duì)象,當(dāng)然,在進(jìn)行傳遞的時(shí)候也會(huì)判斷有沒(méi)有相應(yīng)的實(shí)例,如果沒(méi)有,同樣應(yīng)該先把相應(yīng)實(shí)例的execute()方法設(shè)計(jì)出來(lái)。

在Struts的框架中,ActionServlet主要承擔(dān)的是中心控制器的角色,會(huì)自動(dòng)地去繼承javax.servlet.http包中的HttpServlet類(lèi)。為了對(duì)來(lái)自終端的請(qǐng)求及時(shí)響應(yīng),通常它會(huì)把中心的一個(gè)位置給留下來(lái)。ActionServlet控制器所起的主要作用就是把HTTP客戶(hù)端的請(qǐng)求信息組合起來(lái),通過(guò)相應(yīng)的已經(jīng)配置好的文件進(jìn)行描述,將其傳遞到相應(yīng)的處理器中。通常,中心控制器會(huì)給所有表示層的請(qǐng)求提供一個(gè)集中的訪問(wèn)點(diǎn)。一旦開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中遇到問(wèn)題,只要通過(guò)這個(gè)控制器的一些有關(guān)概念,這些問(wèn)題的困難程度就被有效地降低了,如管理視圖、會(huì)話及表單數(shù)據(jù)。相應(yīng)地,它也具備某些通用機(jī)制,如錯(cuò)誤及異常處理、導(dǎo)航、國(guó)際化、數(shù)據(jù)驗(yàn)證、數(shù)據(jù)轉(zhuǎn)換。

當(dāng)用戶(hù)的請(qǐng)求被傳遞到服務(wù)器端的時(shí)候,首先ActionServlet控制器會(huì)獲得相應(yīng)的信息。當(dāng)控制器接收到相關(guān)的請(qǐng)求后,會(huì)把這些請(qǐng)求信息傳遞到相應(yīng)的輔助類(lèi)中去,此時(shí)這些輔助的類(lèi)就會(huì)去處理那些相關(guān)的業(yè)務(wù)操作,而這些相關(guān)的操作必須對(duì)應(yīng)用戶(hù)的請(qǐng)求。在上面提到的Struts那個(gè)輔助類(lèi)就是 org.apache.struts. action.Action。一般情況下,開(kāi)發(fā)人員應(yīng)該主動(dòng)去繼承Aciton類(lèi),那樣有助于實(shí)現(xiàn)開(kāi)發(fā)人員自己的Action實(shí)例。

2.2 Action

一個(gè)Action類(lèi)的角色,就是作為行動(dòng)和業(yè)務(wù)邏輯處理適配器之間的客戶(hù)端的請(qǐng)求,其主要做的就是需要把它從業(yè)務(wù)邏輯中分離開(kāi)來(lái)。為了實(shí)現(xiàn)這種分離,有映射點(diǎn)存在于多個(gè)客戶(hù)請(qǐng)求和Action類(lèi)之間。通常情況下,Action類(lèi)還有很多的輔助功能,如:認(rèn)證(授權(quán))、日志(記錄)、數(shù)據(jù)驗(yàn)證(驗(yàn)證)。

Execute()是Action主要使用的方法。當(dāng)客戶(hù)發(fā)出的請(qǐng)求被Controller收到的時(shí)候,這個(gè)請(qǐng)求將被移動(dòng)到一個(gè)相應(yīng)的Action實(shí)例中,如果找不到相應(yīng)的實(shí)例,控制器就會(huì)重新創(chuàng)建一個(gè)實(shí)例,然后找到這個(gè)重新創(chuàng)建出來(lái)的Action實(shí)例的execute()方法,再去調(diào)用它。對(duì)于應(yīng)用系統(tǒng)中的Action類(lèi)來(lái)說(shuō),Struts框架會(huì)為每個(gè)類(lèi)創(chuàng)建一個(gè)相應(yīng)的實(shí)例。因?yàn)橥粋€(gè)實(shí)例被所有用戶(hù)使用,就必須保證在多線程環(huán)境下運(yùn)行客戶(hù)的Action類(lèi)。圖1就是execute()方法如何被訪問(wèn)的過(guò)程:

圖1 Action實(shí)例的execute()方法

2.3 ActionForm

ActionForm主要用于對(duì)用戶(hù)的請(qǐng)求參數(shù)進(jìn)行封裝。為了使請(qǐng)求參數(shù)順利地通過(guò)JSP頁(yè)面的表單域,一定要保證表單域的名稱(chēng)和ActionForm參數(shù)是相同的。同時(shí),要在struts-config.xml文件中對(duì)所有的Action進(jìn)行配置,該文件還包含有表單元素。因而ActionForm中定義的所有元素,都應(yīng)該對(duì)應(yīng)一個(gè)相應(yīng)的表單form-bean元素。

請(qǐng)求對(duì)象的參數(shù)一般被保存在ActionForm派生的對(duì)象中,他們和用戶(hù)之間是緊密相關(guān)的。通常,通過(guò)RequestProcessor來(lái)創(chuàng)建出一個(gè)相應(yīng)的ActionForm的類(lèi)。這是發(fā)生在已經(jīng)完成向前的一個(gè)URL,該URL是映射到控制器servlet而不是JSP和相應(yīng)的動(dòng)作映射指定表單的屬性的。出現(xiàn)這個(gè)情況時(shí),如果在特定的范圍之內(nèi)沒(méi)有發(fā)現(xiàn),RequestProcessor將利用各種可能的方法嘗試著實(shí)現(xiàn)一個(gè)新的ActionForm對(duì)象的表單bean。在特定范圍內(nèi),可利用元素之中的屬性name找到相應(yīng)的ActionForm對(duì)象。此時(shí)RequestProcessor就會(huì)對(duì)表單的屬性進(jìn)行重新設(shè)置,填寫(xiě)表單與請(qǐng)求中的參數(shù),再通過(guò)調(diào)用表單對(duì)象的相關(guān)驗(yàn)證方法,通過(guò)服務(wù)器端對(duì)用戶(hù)的有關(guān)輸入進(jìn)行驗(yàn)證。作為一種默認(rèn)的行為,如果想要去調(diào)用一種驗(yàn)證方法,只有給驗(yàn)證ActionMapping對(duì)象的值設(shè)置為true的屬性。如果是g.apache.struts.taglib.html.Errors Tag來(lái)通知用戶(hù)驗(yàn)證的結(jié)果是不正確的,那就說(shuō)明此次最終驗(yàn)證的就是一個(gè)ActionErrors對(duì)象。ActionForm還有一個(gè)作用,那就是保存一個(gè)視圖引用的中間模型狀態(tài)給用戶(hù)。

如果RequestProcessor查找到了一個(gè)相應(yīng)的表單對(duì)象,它就會(huì)把這個(gè)表單對(duì)象轉(zhuǎn)送給請(qǐng)求處理器相應(yīng)的execute(…)方法。通常,一個(gè)ActionForm對(duì)象也可以通過(guò)請(qǐng)求處理器來(lái)實(shí)現(xiàn)。實(shí)現(xiàn)表單對(duì)象就是為了給中間模型狀態(tài)使用的JSP提供一個(gè)合適的請(qǐng)求范圍,這就可以保證有效期滿(mǎn)后對(duì)象是不存在的。在沒(méi)有特別聲明的情況下,全部表單的保存形式都表現(xiàn)為會(huì)話范圍。在會(huì)話過(guò)程中,如果表單對(duì)象脫離了有效性而獨(dú)立存在,極有可能出現(xiàn)浪費(fèi)內(nèi)存的情況;同時(shí),必須保持相同請(qǐng)求處理器存儲(chǔ)在會(huì)話中的對(duì)象的生命周期的軌道。通過(guò)使用相應(yīng)的表單bean為那些橫跨多個(gè)用戶(hù)交互形式的有關(guān)表單來(lái)獲取相應(yīng)的表單數(shù)據(jù)。在進(jìn)行反饋的時(shí)候表單bean可以被用來(lái)保存中間模型的狀態(tài),而這個(gè)狀態(tài)就是通過(guò)自定義標(biāo)簽發(fā)生變化的。盡最大的可能不要使視圖的標(biāo)簽用法和Java代碼相結(jié)合,所以要做好相應(yīng)的工作分工。通常由web制作組來(lái)解決標(biāo)志的有關(guān)問(wèn)題,而由應(yīng)用程序的開(kāi)發(fā)組來(lái)解決Java代碼的相關(guān)問(wèn)題。

3 Struts框架的高級(jí)特性

3.1 驗(yàn)證

通常情況下,不會(huì)對(duì)用戶(hù)的輸入進(jìn)行驗(yàn)證,但是,一旦出現(xiàn)下面所描述的情況時(shí),就需要通過(guò)使用表單bean來(lái)進(jìn)行驗(yàn)證: (1)表單bean覆蓋超類(lèi)的驗(yàn)證方法; (2)元素作為Struts配置文件,它的驗(yàn)證屬性已經(jīng)確定或者將其默認(rèn)的值設(shè)為T(mén)RUE。一般情況下,bean能夠具備的相關(guān)驗(yàn)證也是針對(duì)那些比較起來(lái)不是很難的問(wèn)題,因?yàn)閎ean中通常就沒(méi)有那些與業(yè)務(wù)邏輯有關(guān)的應(yīng)用程序的信息。比如,是否每個(gè)用戶(hù)都在必需的字段中輸入了相應(yīng)的數(shù)據(jù)?Struts框架的各個(gè)組成部分可以進(jìn)行核查。

3.2 使用異常處理聲明

如果要對(duì)應(yīng)用程序的相關(guān)邏輯流程進(jìn)行定義,不要通過(guò)寫(xiě)死在代碼中來(lái)實(shí)現(xiàn),這是一個(gè)較成熟的經(jīng)驗(yàn),通常推薦使用的是在代碼以外通過(guò)使用配置的方法來(lái)進(jìn)行。這樣的例子在J2EE中是非常多的。從實(shí)現(xiàn)EJB的安全性和事務(wù)性行為到描述JMS消息和目的地之間的關(guān)系,很多時(shí)候都可以在程序以外對(duì)其運(yùn)行時(shí)的有關(guān)處理流程進(jìn)行定義。在先前版本的Struts框架中,開(kāi)發(fā)人員必須自己來(lái)處理在Struts應(yīng)用之中發(fā)生錯(cuò)誤的情況。在最新的版本中,這一點(diǎn)已經(jīng)得到了很大的改善。其中,為了便于在系統(tǒng)缺省處理action類(lèi)實(shí)施過(guò)程中出現(xiàn)的錯(cuò)誤,Struts Framework通常會(huì)提供一個(gè)內(nèi)置的名為ExceptionHandler的類(lèi)來(lái)實(shí)現(xiàn)。這作為一個(gè)技巧,也是很多有關(guān)framework可擴(kuò)展的接口之一。

通常,作為Struts的默認(rèn)異常處理程序類(lèi),其運(yùn)行的結(jié)果就是生成一個(gè)相應(yīng)的ActionError對(duì)象,與此同時(shí),還應(yīng)注意要把其保存在特定域內(nèi)(Scope)的對(duì)象之中。如果用戶(hù)遇到一系列相關(guān)的問(wèn)題,可通過(guò)使用JSP頁(yè)面利用錯(cuò)誤類(lèi)來(lái)告訴用戶(hù)所發(fā)生的問(wèn)題。這樣,如果用戶(hù)還不滿(mǎn)意的話,可以輕易地去實(shí)現(xiàn)屬于自己的ExcepionHandler類(lèi)。

3.3 使用應(yīng)用模塊

由于應(yīng)用模塊這個(gè)概念的出現(xiàn),Struts的應(yīng)用可以被劃分為不同的模塊,而各個(gè)模塊都有屬于自己的Struts配置文件,如JSP頁(yè)面和Action。這個(gè)功能非常好地解決了開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中遇到的一些難以處理的問(wèn)題。允許同時(shí)出現(xiàn)多個(gè)配置文件,解決了文件配置單一的問(wèn)題,使得并行開(kāi)發(fā)更加可行。如果應(yīng)用模塊同意,Struts可以按照應(yīng)用系統(tǒng)本身所具有的功能對(duì)這些相應(yīng)的模塊進(jìn)行分解。實(shí)踐證明這樣是最符合邏輯的,也是最好的。

如果沒(méi)有必要將一個(gè)項(xiàng)目劃分成為很多模塊,一個(gè)缺省的應(yīng)用模塊會(huì)被Struts框架所支持。這樣,就能創(chuàng)建相關(guān)的應(yīng)用程序,且該應(yīng)用程序還具有較好的可移植性,因?yàn)閼?yīng)用程序會(huì)自動(dòng)作為缺省的應(yīng)用模塊。每一個(gè)Struts的應(yīng)用模塊都應(yīng)該設(shè)計(jì)好一個(gè)屬于自己的單獨(dú)的配置文件。創(chuàng)建的Action和ActionForm是屬于自己的且和其他模塊是相對(duì)獨(dú)立的,對(duì)異常處理而言那是更多的。在每個(gè)應(yīng)用模塊創(chuàng)建好屬于自己獨(dú)立的配置文件后,各個(gè)模塊中的Action就應(yīng)該準(zhǔn)備好被調(diào)用了。因而,Struts框架所準(zhǔn)備好的SwitchAction類(lèi)就被用到了。同時(shí),應(yīng)用模塊的名字也會(huì)被Struts主動(dòng)加入到URL中,就和應(yīng)用程序的名字被Struts主動(dòng)加入到URL中是一樣的。作為對(duì)框架新的擴(kuò)展的應(yīng)用模塊,它是非常有利于使用并行方式的團(tuán)隊(duì)開(kāi)發(fā)的。如果團(tuán)隊(duì)是非常小的,那就沒(méi)必要用到這個(gè)特性了,也沒(méi)有必要使用模塊化了。當(dāng)然,就算是只有一個(gè)應(yīng)用模塊,系統(tǒng)還是一樣應(yīng)該正常地運(yùn)作。

[1]孫衛(wèi)琴.精通Struts:基于MVC的JavaWeb設(shè)計(jì)與開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2007.

[2]李智淵.采用Struts框架實(shí)現(xiàn)MVC設(shè)計(jì)模式[J].甘肅科技縱橫,2005(4):13-14.

[3]蔡劍,景楠.Java Web應(yīng)用開(kāi)發(fā):J2EE和Tomcat[M].2版.北京:清華大學(xué)出社,2005.

Technical Overview of the Struts Framework

WANG Gang
(Information Engineering Department of Shanxi Technical College of Finance&Economics, Xianyang 712000,China)

This article briefly introduces the Struts framework and related contents,and mainly discusses the components and advanced features of the Struts framework.

Struts framework;components of Struts framework;advanced features of Struts framework

TP312

A

1008-178X(2012)09-0025-04

2012-02-03

王 剛(1978-),男,陜西咸陽(yáng)人,陜西財(cái)經(jīng)職業(yè)技術(shù)學(xué)院信息工程系講師,從事計(jì)算機(jī)應(yīng)用研究。

猜你喜歡
頁(yè)面用戶(hù)
微信群聊總是找不到,打開(kāi)這個(gè)開(kāi)關(guān)就好了
大狗熊在睡覺(jué)
刷新生活的頁(yè)面
關(guān)注用戶(hù)
關(guān)注用戶(hù)
關(guān)注用戶(hù)
Camera360:拍出5億用戶(hù)
100萬(wàn)用戶(hù)
如何獲取一億海外用戶(hù)
同一Word文檔 縱橫頁(yè)面并存
主站蜘蛛池模板: 青青草国产在线视频| 中文字幕欧美日韩| 亚洲性日韩精品一区二区| 天堂av高清一区二区三区| 国内精品伊人久久久久7777人| 欧美激情视频在线观看一区| 中文字幕在线播放不卡| 亚洲av无码久久无遮挡| av色爱 天堂网| 日本91在线| 久久精品丝袜| 99久久精品国产综合婷婷| 69免费在线视频| 一本大道无码高清| 欧美国产综合视频| 国产亚洲视频中文字幕视频| 亚洲人成网站日本片| 国产成人乱无码视频| 特级毛片免费视频| 香蕉eeww99国产精选播放| 国产91特黄特色A级毛片| 日韩a在线观看免费观看| 国产精品一区二区久久精品无码| 国产91在线|中文| 毛片基地视频| 国产一二三区在线| 亚洲男人天堂网址| 日本手机在线视频| 强奷白丝美女在线观看| 亚洲最猛黑人xxxx黑人猛交| 天天躁日日躁狠狠躁中文字幕| 国产在线一区视频| 国模在线视频一区二区三区| 中国丰满人妻无码束缚啪啪| 日韩欧美在线观看| 日韩精品免费一线在线观看| 一本二本三本不卡无码| 另类欧美日韩| 亚洲成人在线网| 欧美在线精品怡红院| 91年精品国产福利线观看久久| 91精品最新国内在线播放| 色久综合在线| 永久成人无码激情视频免费| 亚洲国产精品无码久久一线| 免费a在线观看播放| 青青草原国产免费av观看| 精品少妇人妻av无码久久| 亚洲福利视频一区二区| 专干老肥熟女视频网站| 欧美一级在线播放| 99久久99视频| 国产一区二区三区在线观看免费| 国模私拍一区二区| 91精品国产自产在线老师啪l| 久久久波多野结衣av一区二区| 久久综合色天堂av| 日韩中文字幕亚洲无线码| 日本午夜在线视频| 亚洲视频在线网| 一级不卡毛片| 99在线观看精品视频| 久久久久国产一区二区| 国产精品制服| 思思99思思久久最新精品| 国产极品嫩模在线观看91| 老司机午夜精品视频你懂的| 国产高清无码第一十页在线观看| 亚洲成人在线网| 无码高潮喷水专区久久| 91免费片| 久久精品嫩草研究院| 欧美不卡在线视频| 国产成人a在线观看视频| 97se亚洲综合在线韩国专区福利| 国产成人a在线观看视频| 欧美自拍另类欧美综合图区| 最新国产午夜精品视频成人| 在线观看亚洲精品福利片| 女人18一级毛片免费观看 | 无遮挡国产高潮视频免费观看| 国产男女XX00免费观看|