久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

struts2核心工作流程與原理(推薦閱讀)

時間:2019-05-12 02:51:43下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《struts2核心工作流程與原理》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《struts2核心工作流程與原理》。

第一篇:struts2核心工作流程與原理

struts2核心工作流程與原理 收藏

這是Struts2官方站點提供的Struts 2 的整體結構。

一個請求在Struts2框架中的處理大概分為以下幾個步驟: 1.客戶端提起一個(HttpServletRequest)請求,如上文在瀏覽器中輸入”http://localhost:8080/TestMvc/add.action”就是提起一個(HttpServletRequest)請求。

2.請求被提交到一系列(主要是三層)的過濾器(Filter),如(ActionContextCleanUp、其他過濾器(SiteMesh等)、FilterDispatcher)。注意這里是有順序的,先ActionContextCleanUp,再其他過濾器(SiteMesh等)、最后到FilterDispatcher。

3.FilterDispatcher是控制器的核心,就是mvc中c控制層的核心。下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher進行初始化并啟用核心doFilter

其代碼如下:

1.public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)throws IOException, ServletException...{

2.HttpServletRequest request =(HttpServletRequest)req;

3.HttpServletResponse response =(HttpServletResponse)res;

4.ServletContext servletContext = filterConfig.getServletContext();

5.// 在這里處理了HttpServletRequest和HttpServletResponse。

6.DispatcherUtils du = DispatcherUtils.getInstance();7.du.prepare(request, response);//正如這個方法名字一樣進行locale、encoding以及特殊request parameters設置

8.try...{

9.request = du.wrapRequest(request, servletContext);//對request進行包裝 10.} catch(IOException e)...{

11.String message = “Could not wrap servlet request with MultipartRequestWrapper!”;12.LOG.error(message, e);

13.throw new ServletException(message, e);14.}

15.ActionMapperIF mapper = ActionMapperFactory.getMapper();//得到action的mapper

16.ActionMapping mapping = mapper.getMapping(request);// 得到action 的 mapping 17.if(mapping == null)...{

18.// there is no action in this request, should we look for a static resource?

19.String resourcePath = RequestUtils.getServletPath(request);

20.if(“".equals(resourcePath)&& null!= request.getPathInfo())...{

21.resourcePath = request.getPathInfo();22.}

23.if(”true“.equals(Configuration.get(WebWorkConstants.WEBWORK_SERVE_STATIC_CONTENT))

24.&& resourcePath.startsWith(”/webwork“))...{

25.String name = resourcePath.substring(”/webwork“.length());

26.findStaticResource(name, response);27.} else...{

28.// this is a normal request, let it pass through 29.chain.doFilter(request, response);30.} 31.// WW did its job here 32.return;33.}

34.Object o = null;35.try...{

36.//setupContainer(request);

37.o = beforeActionInvocation(request, servletContext);

38.//整個框架最最核心的方法,下面分析

39.du.serviceAction(request, response, servletContext, mapping);40.} finally...{

41.afterActionInvocation(request, servletContext, o);

42.ActionContext.setContext(null);43.} 44.}

45.du.serviceAction(request, response, servletContext, mapping);

46.//這個方法詢問ActionMapper是否需要調用某個Action來處理這個(request)請求,如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy 47.48.public void serviceAction(HttpServletRequest request, HttpServletResponse response, String namespace, String actionName, Map requestMap, Map parameterMap, Map sessionMap, Map applicationMap)...{

49.HashMap extraContext = createContextMap(requestMap, parameterMap, sessionMap, applicationMap, request, response, getServletConfig());//實例化Map請求,詢問ActionMapper是否需要調用某個Action來處理這個(request)請求

50.extraContext.put(SERVLET_DISPATCHER, this);51.OgnlValueStack stack =(OgnlValueStack)request.getAttribute(ServletActionContext.WEBWORK_VALUESTACK_KEY);

52.if(stack!= null)...{

53.extraContext.put(ActionContext.VALUE_STACK,new OgnlValueStack(stack));54.} 55.try...{

56.ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(namespace, actionName, extraContext);

57.//這里actionName是通過兩道getActionName解析出來的, FilterDispatcher把請求的處理交給ActionProxy,下面是ServletDispatcher的 TODO:

58.request.setAttribute(ServletActionContext.WEBWORK_VALUESTACK_KEY, proxy.getInvocation().getStack());59.proxy.execute();

60.//通過代理模式執行ActionProxy 61.if(stack!= null)...{

62.request.setAttribute(ServletActionContext.WEBWORK_VALUESTACK_KEY,stack);63.}

64.} catch(ConfigurationException e)...{ 65.log.error(”Could not find action“, e);

66.sendError(request, response, HttpServletResponse.SC_NOT_FOUND, e);

67.} catch(Exception e)...{ 68.log.error(”Could not execute action“, e);

69.sendError(request, response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);70.} 71.} 72.FilterDispatcher詢問ActionMapper是否需要調用某個Action來處理這個(request)請求,如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy。

4.ActionProxy通過Configuration Manager(struts.xml)詢問框架的配置文件,找到需要調用的Action類.如上文的struts.xml配置

1.

2. 3.

4.

5.

6.

7.class=”edisundong.AddAction“ > 8.add.jsp 9. 10. 11. 12.如果提交請求的是add.action,那么找到的Action類就是edisundong.AddAction。

5.ActionProxy創建一個ActionInvocation的實例,同時ActionInvocation通過代理模式調用Action。但在調用之前ActionInvocation會根據配置加載Action相關的所有Interceptor。(Interceptor是struts2另一個核心級的概念)

下面我們來看看ActionInvocation是如何工作的:

ActionInvocation 是Xworks 中Action 調度的核心。而對Interceptor 的調度,也正是由ActionInvocation負責。ActionInvocation 是一個接口,而DefaultActionInvocation 則是Webwork 對ActionInvocation的默認實現。

Interceptor 的調度流程大致如下:

1.ActionInvocation初始化時,根據配置,加載Action相關的所有Interceptor。

2.通過ActionInvocation.invoke方法調用Action實現時,執行Interceptor。

Interceptor將很多功能從我們的Action中獨立出來,大量減少了我們Action的代碼,獨立出來的行為具有很好的重用性。XWork、WebWork的許多功能都是有Interceptor實現,可以在配置文件中組裝Action用到的Interceptor,它會按照你指定的順序,在Action執行前后運行。那么什么是攔截器。

攔截器就是AOP(Aspect-Oriented Programming)的一種實現。(AOP是指用于在某個方法或字段被訪問之前,進行攔截然后在之前或之后加入某些操作。)

攔截器的例子這里就不展開了。struts-default.xml文件摘取的內容:

1.< interceptor name =”alias“ class =”com.opensymphony.xwork2.interceptor.AliasInterceptor“ /> 2.< interceptor name =”autowiring“ class =”com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor“ />

3.< interceptor name =”chain“ class =”com.opensymphony.xwork2.interceptor.ChainingInterceptor“ />

4.< interceptor name =”conversionError“ class =”org.apache.struts2.interceptor.StrutsConversionErrorInterceptor“ /> 5.< interceptor name =”createSession“ class =”org.apache.struts2.interceptor.CreateSessionInterceptor“ />

6.< interceptor name =”debugging“ class =”org.apache.struts2.interceptor.debugging.DebuggingInterceptor“ /> 7.< interceptor name =”external-ref“ class =”com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor“ />

8.< interceptor name =”execAndWait“ class =”org.apache.struts2.interceptor.ExecuteAndWaitInterceptor“ />

9.< interceptor name =”exception“ class =”com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor“ /> 10.< interceptor name =”fileUpload“ class =”org.apache.struts2.interceptor.FileUploadInterceptor“ />

11.< interceptor name =”i18n“ class =”com.opensymphony.xwork2.interceptor.I18nInterceptor“ />

12.< interceptor name =”logger“ class =”com.opensymphony.xwork2.interceptor.LoggingInterceptor“ />

13.< interceptor name =”model-driven“ class =”com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor“ /> 14.< interceptor name =”scoped-model-driven“ class =”com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor“ /> 15.< interceptor name =”params“ class =”com.opensymphony.xwork2.interceptor.ParametersInterceptor“ />

16.< interceptor name =”prepare“ class =”com.opensymphony.xwork2.interceptor.PrepareInterceptor“ />

17.< interceptor name =”static-params“ class =”com.opensymphony.xwork2.interceptor.StaticParametersInterceptor“ />

18.< interceptor name =”scope“ class =”org.apache.struts2.interceptor.ScopeInterceptor“ />

19.< interceptor name =”servlet-config“ class =”org.apache.struts2.interceptor.ServletConfigInterceptor“ />

20.< interceptor name =”sessionAutowiring“ class =”org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor“ />

21.< interceptor name =”timer“ class =”com.opensymphony.xwork2.interceptor.TimerInterceptor“ />

22.< interceptor name =”token“ class =”org.apache.struts2.interceptor.TokenInterceptor“ />

23.< interceptor name =”token-session“ class =”org.apache.struts2.interceptor.TokenSessionStoreInterceptor“ /> 24.< interceptor name =”validation“ class =”com.opensymphony.xwork2.validator.ValidationInterceptor“ />

25.< interceptor name =”workflow“ class =”com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor“ /> 26.< interceptor name =”store“ class =”org.apache.struts2.interceptor.MessageStoreInterceptor“ />

27.< interceptor name =”checkbox“ class =”org.apache.struts2.interceptor.CheckboxInterceptor“ />

28.< interceptor name =”profiling“ class =”org.apache.struts2.interceptor.ProfilingActivationInterceptor" /> 29.一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。如上文中將結構返回“add.jsp”,但大部分時候都是返回另外一個action,那么流程又得走一遍………

第二篇:MVC以及Struts2工作流程

MVC是一種軟件架構的思想,將一個軟件系統劃分成三種不同類型的模塊,分別是模型(model),用于封裝業務邏輯。視圖(view),提供用戶操作的接口(提供業務數據的展現,并且,用戶也可以通過視圖來提交請求)??刂破鳎╟ontroller),將視圖與模型解耦,也就是說視圖要向控制器發送請求,由控制器來決定調用哪一個模型來處理,反過來,模型處理之后的結果也交給控制器,由控制器來選擇合適的視圖來展現。

Model:使用java類來實現(也可以使用spring容器管理的javabean,ejb等)View:使用jsp Controller:使用servlet或者filter 優點:

1.model可以被多個view共享,model處理之后的結果可以使用不同的界面來展現,多種不同類型的界面,可以調用相同的model 來處理。

2.model可以當便測試(如,將業務邏輯寫在了servlet力需要部署servlet然后才能測試)如果也業務邏輯寫在一個java類當中,測可以立即測試 3.方便分工合作 4.方便代碼的維護 缺點:

增加代碼量(相應的開發周期要延長,并且,要相應增大了設計的難度)。所以,一般來說,對于需要良好的可維護性且項目規模比較大的項目可以用MVC。

Struts2框架的工作流程圖

Struts2框架的工作流程

1)服務器啟動,創建StrustsPrepareAndExecuteFilter對象,并解析struts.xml配置文件

2)客戶端發出action請求后,控制器會調用ActionMapper(Action映射器)完成請求與Action組件之間的映射,便于調用Action處理

3)通過ActionMapper處理后,接著調用ActionProxy(Action代理)提取請求對應的配置文件信息,創建ActionInvocation(Action執行者)對象,ActionProxy通過ConfigurationManager(配置管理器)解析和獲取struts的配置信息 4)通過ActionInvocation完成攔截器、Action和Result組件的調用 5)生成響應信息后,為客戶端響應

第三篇:Struts2核心攔截器---學習筆記

Struts2的核心——攔截器

在struts2中,攔截器(Interceptor)是其核心的組件,當我們訪問一個action時,我們可以通過攔截器的配置,做一些需要的操作。

我們可以寫我們自己的攔截器,但是要實現或繼承struts2給我們提供的接口或類。

①.我們實現Interceptor接口,該接口是struts2提供的攔截器接口,位于com.opensymphony.xwork2.interceptor包下,其提供了類似與filter的一些方法,我們必須實現它的方法:destroy()、init()、intercept(ActionInvocation)。

public class MyInterceptor implements Interceptor {

public void destroy(){

System.out.println(“destroy”);} public void init(){ } public String intercept(ActionInvocation invocation)throws System.out.println(“init”);Exception {

System.out.println(“intercept”);

String resultString= invocation.invoke();System.out.println(“finish”);return resultString;}

②.我們可以繼承AbstractInterceptor類,該類是一個抽象類,它位于com.opensymphony.xwork2.interceptor包下,它實現了Interceptor接口,并完成了對destroy()方法和init()方法的實現,但保留了抽象方法interceptor(),以供自定義的攔截器來重寫其方法,完成特定的需求。

public class MyInterceptor1 extends AbstractInterceptor {

} @Override

public String intercept(ActionInvocation invocation)throws

System.out.println(“intercept1”);

String result=invocation.invoke();

System.out.println(“finish1”);Exception { return result;}

③.上面兩個是對action進行的攔截,粒度比較粗,當然struts2也給我們提供了對action中方法的攔截。這時,我們自己寫的類就要繼承struts

2給我們提供的方法過濾類,該

于MethodFilterInterceptor com.opensymphony.xwork2.interceptor包下,但該類已經完成了對interceptor()方法的簡單實現,而提供了一個doIntercept()方法。

public class MyInterceptor2 extends MethodFilterInterceptor { @Override

protected String doIntercept(ActionInvocation invocation)throws Exception {

System.out.println(“methodFilterInterceptor2”);String result=invocation.invoke();System.out.println(“finish2”);

return result;} }

寫好了我們自己的攔截器類,還需要在struts.xml文件進行配置來告訴struts2框架,我們的攔截器要攔截的action、方法。

首先,我們要在package包下增加一個新的元素標簽 ,在該標簽下,我們就可以定義我們自己寫的攔截器,如:

class=“com.test.interceptor.MyInterceptor”>

定義了一個name是myInterceptor的攔截器(即實現了Interceptor接口的那個攔截器),類似的,我們定義了上面我們已寫的3個攔截器。

name=“myInterceptor”

class=“com.test.interceptor.MyInterceptor”>

請注意下面代碼,我們定義了(攔截器棧),在struts2中還有攔截器棧,一個攔截器棧中可以包含多個攔截器,當我們要在某一個action上進行多個攔截時,我們可以將其放入一個攔截器棧中,這樣在action中配置的時候,只需配置攔截器棧就可以了。

name=“myInterceptor”>

name=“myInterceptor1”>

defaultStack這個攔截器棧是struts2,提供的一個默認攔截器棧,其中實現了一些常用功能,如:struts2的檢驗框架,當我們在聲明package時候會有extends屬性,其值為struts-default,而defaultStack就定義在struts-default包類,進而就被我們的package所繼承。

name=“defaultStack”>

在攔截器的配置中,我們可以為package配置一個默認的攔截器或攔截器棧,如果我們不指定,其值就為父包繼承下來的defaultStack。

name=“myStack”>

/result.jsp

/login2.jsp /login2.jsp

/output.jsp

/success.jsp

/register4.jsp

/success.jsp /register2.jsp 我們在action中,對我們寫的攔截器進行配置,這里要注意,我們在配置自己寫的攔截器后,默認的攔截器,就不起作用了,如果還需要struts2默認的攔截器提供的功能,我們就要手動配置下了。另外,在攔截器中有

標簽,可以對攔截器類中定義的屬性賦值,這里是告訴攔截器,只攔截abc()方法。

abc

第四篇:全自動吹塑機的工作流程和原理

全自動吹塑機的工作流程和原理

第一,吹塑機英語全稱BLOW MOULDING MACHINE.簡稱BMM.其基本工作原理為:向軟化的熱塑性的型坯中充氣,使其緊貼到封閉模具的冷卻表面,被吹脹的型坯凝固,形成中空塑料制品.第二,我們就從螺桿開始吧.<其他我們不說>吹塑機的螺桿.有單螺桿 雙螺桿和多螺桿因其制造的產品不同而不同<本人在德國KAUTEX學習時看到過十二根螺桿的吹塑機>就說說單螺桿.現在的螺桿大都是用電機帶動<以前有過液壓傳動>用變頻器控制螺桿轉速.螺桿的機筒外面有加熱線圈用來溶化塑料.有于每種塑料的溶點不同所以你在設計加熱線圈應有三種溫度功能顯示.<而在電氣柜里每個加熱線圈的固態繼電器都有電流互感器以電流表的形式表示出來清楚可看>一為設定溫度如200度.二為最高允許溫度如250度,<溫度過高塑料的流動性會加快影響產品質量>到達最高溫度螺桿會自停.并報警顯示.三為最低允許溫度如160<溫度過低塑料的流動性會很低不但會影響產品質量而螺桿的剪切力會很大.對螺桿的傷害很大>到過最低溫度螺桿會自停.并報警顯示.而螺桿的溫度在最高溫度或最低溫度時電機無法起動!

第三,模頭.模頭分為連續式和儲料式我們就說連續式吧.模頭的主要做為一把溶化的塑料均勻的以中空的型狀擠出來以利于吹塑.二為最主要的控制型坯的壁厚以液壓的方法來控制主要是用伺服比例閥上下的移動工作來控制??陂_口大小從而控制型坯的壁厚.所以你在設計模頭控制時我有以下幾點意見.一在模頭液壓沒起動時.螺桿電機不可能起動.二在模頭口模完全封閉時螺桿電機也不能起動.第四,模具一般吹塑的模具大多是二半的.在工作時把從模頭擠出來的型坯合在一起然后吹塑.它的標準程序一般是這樣的:移模-合模-鎖模-加壓-吹針進入-吹氣-排氣-泄壓-開模-移模-進入下一個循環.所以見意你在設計控制時.要求你做到.移模不到位不合模,合模不到位不鎖模.鎖模不到位不加壓.加壓不到位吹針不進入.吹針進入不到位不吹氣.排氣時壓力不到設定泄壓值時.模具不開模.開模不到位不移模.移模不到位下一個循環停止工作并報警.每一個動作不到位都能報警并在PLC或操作面板能清楚的顯示.還有是冷卻水溫度正常.過高或過低都能顯示過高或過低時能報警并能顯示不一定要求停機?

現在的吹塑機一般二臺液壓泵一為伺服液壓專用用于控制模頭主要為控制型坯的壁厚.二為吹塑機液壓系統用.如移模.合模等等.因為你知道液壓這東東是有各種電磁閥.液壓油缸和各種連接機構組成一個系統.極其繁瑣.在有于每個產品的生產和要求不同而它的生產工藝也會不同所以它的工作程序和要求也會不同.所以真的不好說啊!我怕誤人子弟啊.我就簡單的說一點吧.第一安全要放在第一位的也就是說在一個封閉的吹塑機任意打開一個門液壓泵都要停止<伺服油泵例外>只有在人工確認復位后才能重新啟動.液壓油位都要求有傳感器低于液位時能報警并顯示.液壓油溫度傳感器常溫和過高都能顯示過高時能停機.液壓在過載時以報警并停機和顯示.氣壓要求能顯示常態和過高和過低.在過高和過低能報警并顯示.并要求能用按鈕控制總進氣.并在任意一個門打開時都能切斷總進氣也只有在人工確認復位后才能重新啟動.

第五篇:簡單的struts2中英文切換的國際化開發流程

實現Struts2國際化流程

實現的功能效果圖:

當你選擇 美式英語:

加載全局資源文件

首先 在struts.xml 配置文件 中 配置 struts.custom.i18n.resources常量

需要實現中英文切換的兩個資源文件:

如下是把漢字 轉換 成 Unicode 編碼的 資源文件

然后在login.jsp頁面加上如下代碼:

以及js:

跳轉到的action JAVA 程序國際化的關鍵類是 ResourceBundle,它有如下一個靜態方法: getBundle(String baseName,Locale locale);根據Locale 加載資源文件,而Locale就是代表一個國家/語言。不同的國家/語言環境由不用的Locale代表,baseName 為messageResource的資源文件代表不同的國家語言環境

下載struts2核心工作流程與原理(推薦閱讀)word格式文檔
下載struts2核心工作流程與原理(推薦閱讀).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    市場部工作職責和核心工作流程(5篇)

    中興通軌道技術公司 市場部工作職責及核心業務流程 市場部工作職責及核心業務流程 ---中興通軌道技術公司 一、市場部主要工作 1、信息搜集及分析(情報機構) 了解行業發展......

    公司產品補貨核心工作流程

    公司產品補貨核心工作流程流程:產品補貨版本:1子流程:采購訂單的生成編號:2.1.1.3要素:應用訂單限制地點:總部輸入—可供貨品—建議訂貨數量—裝載規定(如最低訂貨量)輸出:最終的采購......

    Struts2中的攔截器與過濾器學習

    攔截器是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法后調用一個方法 ,比如動態代理就是攔截器的簡單實現,過濾器是在java web中,你傳入的request,......

    工作流程與制度

    工作流程與制度 工作流程與制度1 一、在科主任領導下,負責本科的醫療、培訓、宣傳、講座工作。二、對病員進行檢查、診斷、治療,開寫醫囑并檢查執行情況,同時還要做一些必要的......

    公司分銷商訂貨管理核心工作流程

    公司分銷商訂貨管理核心工作流程流程:訂單管理版本:1子流程:送貨和開票編號:2.2.4.1要素:退貨管理地點:總部/分部公司分銷售客戶運作經理會計/財務部銷售部客戶服務部管理系統部人......

    安全閥與溢流閥工作原理一致

    安全閥與溢流閥工作原理一致,作用均是起調壓、定壓及穩壓,絕大多數情況下是一個東西,名稱的不同只是使用上的區別,在定量泵系統中作用是溢流,而在變量泵系統中起安全保護作用,同時......

    小學班隊工作原理與實踐

    1、小學教育的全面性體現在兩個方面: 教育對象的普及性、教育實施的全面性 2、小學教育的特點:活動性、趣味性、藝術性 。 3、現代小學生的時代特征:主體意識趨向,開放精神趨向......

    書記員工作原理與實務試卷

    《書記官工作原理與實務》期末試卷(2010.06) 題號一二三四五總分 得分判卷人得分一、填空題(本大題20個空,每空1分,共20分) 1.書記員是審判工作的人員,在法官指導下工作,書記員實行......

主站蜘蛛池模板: 五月婷婷开心中文字幕| 亚洲国产成人超a在线播放| 色欲av久久一区二区三区久| 深夜国产一区二区三区在线看| 国产美女自慰在线观看| 加勒比久久综合网天天| 最新av中文字幕无码专区| 香蕉久久人人97超碰caoproen| 国产成人免费永久播放视频平台| 无码av免费一区二区三区四区| 亚洲日韩乱码中文无码蜜桃臀网站| 国产精品久久久久久亚洲毛片| 亚洲人成影院在线无码按摩店| 亚洲中文无码永久免费| 日韩精品无码一区二区| 亚洲综合色在线视频www| 久久人妻无码一区二区三区av| 丰满少妇被粗大的猛烈进出视频| 国产美女精品一区二区三区| 亚洲人成人77777网站| 午夜爽爽爽男女免费观看一区二区| 国产精品麻豆成人av电影艾秋| 久久国产精久久精产国| 久久精品黄aa片一区二区三区| 国产成人亚洲精品无码电影| 亚洲人成人一区二区三区| 国语对白做受xxxxx在线中国| 精品国产亚洲福利一区二区| 亚洲色偷偷偷网站色偷一区| 日本一区二区三区免费播放视频站| 成人免费无码精品国产电影| 日韩人妻无码精品二专区| 日本一本草久国产欧美日韩| 亚洲精品成人网站在线播放| 在办公室被c到呻吟的动态图| 色噜噜狠狠狠综合曰曰曰| 人人妻人人澡人人爽超污| 午夜寂寞视频无码专区| 亚洲中文字幕在线第二页| 中文字幕v亚洲日本在线电影| 九九影院理论片私人影院|