首頁 > 文章中心 > mvc框架

      mvc框架

      前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇mvc框架范文,相信會為您的寫作帶來幫助,發現更多的寫作思路和靈感。

      mvc框架

      mvc框架范文第1篇

      (中國礦業大學〈北京〉機電與信息工程學院,中國 北京 100083)

      【摘要】一個好的設計模式能夠有效地建立系統結構,降低系統復雜度。模型-視圖-控制器(mvc)就是一個框架級的設計模式,它可以分離數據訪問和數據表現,讓開發人員可以開發一個可伸縮性強的、便于擴展的控制器,來維護整個流程。本文在介紹了MVC模式的發展、概念以及實現的基礎上,詳細介紹了MVC模式在Struts框架中的具體應用。

      關鍵詞 MVC模式;Struts框架;應用研究

      0引言

      MVC模式最早由Trygve Reenskaug在1978年提出,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代為程序語言Smalltalk發明的一種軟件設計模式。并且由于其鮮明特點,廣泛受到程序開發人員的青睞。使用MVC模式的目的是實現一種動態的程式設計,使之簡化對后續程序的修改和擴展,并且可以重復利用程序的某一部分。而基于MVC模式的Struts框架,可以將問題進行劃分,成為一個個的小模塊,這樣使得問題更容易得到解決,系統結構更加清晰,另外當問題發生變化或者當技術有所改變時,我們可以進行代碼重用,這能夠極大的提高開發人員的開發效率。所以基于MVC模式的Struts框架非常適合開發大型的復雜系統。本文詳細介紹了MVC模式的基本思想,以及Struts框架的體系結構。

      1MVC模式概述

      1.1MVC架構

      MVC英文即Model-View-Controller,即把一個應用的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣一個應用被分成三個層——模型層、視圖層、控制層。模型(Model):就是業務流程/狀態的處理以及業務規則的制定。視圖(View)代表用戶交互界面,對于Web應用來說,可以概括為HTML界面,但有可能為XHTML、XML和Applet。隨著應用的復雜性和規模性,界面的處理也變得具有挑戰性。控制(Controller)可以理解為從用戶接收請求,將模型與視圖匹配在一起,完成用戶的請求。這實際上是一種模型的變化-傳播機制。模型、視圖、控制器三者之間的關系和各自的主要功能,如圖1所示。

      1.2MVC模式的優勢與不足

      MVC能夠被眾多的web應用系統作為主流框架,主要原因在于它具有巨大而眾多的優勢,這主要體現在下面幾個方面。

      (1)MVC可以讓一個正在運行著的模型,同時建立和使用多個視圖,并且,MVC中具有一種特殊的機制,那就是內置數據監聽機制,依靠觀察者模式,這種機制可以監聽模型層數據的更新,并且能夠同步將視圖層的數據進行更新,以此來實現同步響應。

      (2)在視圖和控制器之間,是相互透明和獨立的。這種特點,可以讓開發人員根據需要來動態的定制控制器和視圖之間的關聯關系,以此開發相對復雜的應用系統。同樣因為視圖和模型之間是相互獨立、分別存在的,所以如果在做跨平臺的系統移植時,把一個模型單獨移植到新的平臺進行工作就會相對比較簡單。我們僅僅需要在新的平臺上將視圖重新設計,并且重新運行控制器。

      (3)由于MVC是一種思想,是一種潛在框架結構,因此我們可以在此模型的基礎上建立客制化的應用框架,以此來滿足客戶的個性化需求。

      雖然MVC具有很多的優點,但是也有一些不足的地方,例如,使得系統結構更加復雜,從而增加了實現的難度。此外,MVC適用于相對規模比較大的系統,如果系統實現的功能結構相對比較簡單,那么如果嚴格遵循MVC模式,反而會使得系統結構復雜度增加,并且還有可能由于進行跟多的更新操作,導致系統運行效率降低。另外,視圖與控制器之間的耦合性過強。雖然在理論上,視圖與控制器之間是相互分離的,但是在實際的應用中,視圖和控制器之間的耦合性還是比較強的。如果視圖中沒有控制器的話,那么他的應用將會非常有限,反之亦然。這種強耦合阻礙了組件的獨立復用。還有,視圖通過模型界面訪問數據的效率很低,這是由于在模型層中提供的接口是不相同的,因此視圖為了獲得足夠多的顯示數據,往往需要進行多次調用,這種方式訪問數據的效率比較低,并且對系統操作性能也有一定的影響。

      綜上所述,通過對MVC模式的分析,可以看出MVC模式的作用是很明顯的,并且在大的系統結構中作用會更加明顯。

      2MVC模式基本實現方法

      實現MVC模式的方法不止一種,例如使用Struts或jsf等MVC模式的框架,本身就是一個實現。下面主要來介紹一種簡單的基本實現方法。

      2.1Model的實現

      在Model的實現過程中,最關鍵的地方在于定義一個具有存儲多個數據更新的用的監聽對象向量。并且根據這個向量可以編寫出下面的兩個函數,以此來分別實現添加數據業務時監聽對象的添加和發生更新時能及時把消息發送給所有的監聽對象:

      //當注冊模型發生修改時需通知的對象

      public void addChangeListener(View cv) throwsException{

      //** 1添加cv到變化監聽隊列

      changeListeners. add(cv);

      }

      //觸發模型變化事件

      private void fireModelChangeEvent(Objectf){

      View V;

      for ( int i=0; i<changeListeners. size(); i++){

      try {

      //將變化通知隊列中的每個視圖

      System. ou.t println(dMode:l fireModelChangeEvent loopd+i);

      v=(View)changeListeners. get( i);

      v. handleChange(f);

      }catch(Exception e){

      System out println(e toString());

      }

      }

      }

      2.2View的實現

      在視圖的實現過程中,關鍵的地方有三點。第一點是我們在進行視圖構造函數時,需要將視圖注冊到指定的模型對象中去(model addChangeListener(view));第二點需要做的就是定義一個能夠存放和它所關聯的控制器對象的向量,并且我們需要根據這個向量的對象,定義增加動作監聽者的注冊方法(public void addUserGestureListener(Controllerb));最后,我們還得需要為視圖編寫一個能夠依靠傳入對象的類型來顯示不同的界面的方法。通過上面所說的三個關鍵點,視圖就能夠實現接收模型更新的通知、發送動作到控制器,并且能夠接受控制器對顯示界面的控制。

      2.3Controller的實現

      相對于模型的實現和視圖的實現,控制器的實現要簡單很多。因為對于控制器來說,只需定義一個模型對象和視圖對象就能能實現。模型對象是為了方便在函數中進行調用其業務的行為,視圖對象是為了方便于將控制器的動作注冊到視圖中去,使他們可以成為該視圖的動作接收者。

      3基于MVC模式的Struts框架

      所謂的基于MVC模式的STRUTS框架,實際上就是把JavaServlet、JSP、自定義標簽(TagLib)、JavaBeans、XML和信息資源(Resource Bundles)整合到一個統一的框架中,由此組成了一個可復用的MVC設計。Struts框架本身帶有自己的控制器,同時還整合了其它的一些能夠實現模型層和視圖層的技術,而且,Struts框架提供了許多可供擴展和定制的地方。同時,Struts提供自定義標記庫,通過這些自定義標記可以順利完成和系統的Model部分交互,通過使用這些自定義標記創建的JSP表單,可以實現和Model部分中的ActionForm的映射,以此來完成對用戶數據的封裝。圖2顯示了Struts的工作流程。

      (1)Struts框架總控制器(ActionServlet),作用是用來完成所有初始化工作。當啟動總控制器之后,首先會讀取Struts-config.xml 的配置信息,目的是為相應的對象進行不同的Struts模塊初始化。當在Web容器啟動時,初始化動作也會自動完成,總控制器完成初始化動作后,將通過URL匹配映射截獲所有以.do結尾的URL請求。

      (2)用戶向Web應用程序器提交一個請求的方法有兩種,一種是提交表單,另一種是調用URL,而用戶請求的數據會通過HTTP協議上傳給Web服務器。

      (3)控制器接收HTTP請求,然后控制器首先會通過ActionConfig找出對應該請求的Action子類,如果沒有找到對應的Action,控制器直接會把請求轉發給JSP或者靜態頁面。如果有對應的Action,并且這個Action有一個相應的ActionForm,ActionForm首先會被控制器實例化,然后會使用HTTP請求的數據來填充其屬性, 然后保存在ServletContext 中,這樣就可以被其它Action對象或者JSP調用。

      (4)控制器根據配置信息將請求切換到具體的ActionFormBean也一并傳給這個Action的execute()方法。

      (5)Action一般其中只包含一個execute()方法, 它的作用是負責執行相應的業務邏輯,然后會返回一個ActionForward對象, 控制器會通過這個ActionForward對象來進行轉發工作。

      (6)根據業務處理時產生的不同結果,Action會返回一個目標相應對象給總控制而這個目標相應對象對應的是一個具體的JSP頁面或者另外一個Action。

      (7)總控制器根據業務功能Action返回的目標響應對象,將HTTP請求轉換到這個目標響應對象中, 通常來說,它是一個具體的JSP頁面。

      (8)目標響應對象(JSP)將結果頁面展現給用戶。

      4結論

      綜上所述,MVC模式已經被廣泛的應用于軟件開發之中,它可以通過對復雜度的簡化,使程序結構更加直觀。軟件系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。而使用基于MVC模式的Struts框架極大的提高了控制層的靈活性,增加了代碼的可重用性。并且由基于MVC模式的Struts框架構建的復雜系統可以分離數據訪問和數據表現,讓開發人員可以開發一個可伸縮性強、便于擴展的控制器,來維護整個流程。因此在結構復雜的系統中基于MVC模式的Struts框架有著很大的優勢和發展前景。

      參考文獻

      [1][美]Ivor Horton.Java 2 入門經典 JDK5[M].潘曉雷,于浚泊,,等,譯.北京:機械工業出版社,2005:1-1058.

      [2]賴英旭,劉增輝,李毛毛.MVC模式在B/S系統開發中的應用研究[J].微計算機信息,2006,22(10-3):62-64.

      [3]孫衛琴.精通Struts:基于MVC的Java Web設計與開發[M].北京:電子工業出版社,2004,8:7-35.

      [4]菜劍,景楠. Java Web應用開發:J2EE和Tomcat[M].2版.北京:清華大學出版社,2005,1:35-250.

      [5]孫衛琴,李洪成.Tomcat與Java.Web開發技術詳解[M].北京:電子工業出版社,2004,4:29-134.

      [6]殷兆麟,張永平,姜淑娟.Java網絡高級編程[M].北京:清華大學出版社,北京交通大學出版社,2005,5:94-235.

      mvc框架范文第2篇

      【關鍵詞】mvcjava應用程序框架實踐探索

      一、框架的設計

      1、設計目標

      設計目標是完成應用程序通用的部分,這樣程序員就可以將自己的精力和注意力放在具體程序的業務邏輯上,而和業務邏輯沒有關系的部分就可以被忽略。框架使用的是MVC模式,該模式可以把數據的顯示和數據分開。對于程序員來說,其工作就是把核心數據放到表示數據的類之中,此外將相應的方法添加到其中。從本質上將,框架屬于完整的程序,因此其運行不需要添加一行代碼。關于框架支持的應用程序的分類:(1)單文檔單視圖。也就是說在應用程序中存在一個文檔。此外,只有一種類型的一個視圖。(2)多文檔類型。在同一個應用程序實例中,應用程序可以將多個文檔框架窗口打開。

      2、MVC 模式的使用

      之所以使用MVC 模式,是因為其具有以下優點:(1)MVC 模式和該框架的設計目標相符。(2)可以建立和使用多個視圖。(3)視圖與控制器的可接插性。(4)模型的可移植性。(5)MVC模式有很多的應用,比如:java的可視化組件就對其進行了使用。

      3、類的劃分

      應用程序框架中的類主要包括以下幾個方面:應用程序類、文檔類、視圖類、子框架窗口類、事件類、框架窗口類、狀態欄類、工具欄類、菜單欄類等。

      4、類之間的關系

      文檔類,視圖類和控制類之間的關系如圖1所示。

      圖1 文檔類、視圖類和控制類之間的關系

      應用程序類和文檔管理類的關系見圖2。

      圖2應用程序類和文檔管理類的關系

      視圖類和子框架窗口類的關系見圖3。

      圖3 視圖類和子框架窗口類的關系

      二、框架中消息流程

      命令消息的流程。框架中的命令消息分為:數據操作命令消息和框架命令消息兩類。框架命令消息:在原始框架中,有新建文檔命令,將文檔命令打開,對文檔命令進行保存,另存文檔命令和退出程序命令。數據操作命令消息:消息流程是:用戶操作控制類對象框架窗口子框架窗口視圖文檔視圖。

      "激活"消息流程。一定要讓視圖的視覺狀態和在框架中真實狀態一致。當視圖處于活動狀態時,需要滿足以下幾個條件:(1)視圖處于接受操作的狀態。(2)和視圖有關的子框架窗口處于活動狀態。(3)文檔管理器表示活動文檔的成員指向該文檔。激活"消息的傳送流程設計見圖4。

      圖4"激活"消息的傳送流程設計

      1、模板功能的實現

      可以生成某個類實例的對象就是模板。一個模板可以生成若干個對象,也可以只生成一個對象。模板功能的實現思路:程序員需要先創建一個類的對象,之后將其注冊到框架。在需要時,框架對該對象進行使用,這樣就可以生成其他對象。

      2、文檔類的實現

      文檔類對數據的公共操作包括:新建文檔,打開文檔,另存文檔,保存文檔操作,關閉文檔操作。文檔數據的存取。文檔類型不同,那么其中的數據也就有差異。因此,還沒有一種方法把全部種類的文檔的數據序列化到文件,因此需要提供這兩個抽象接口。

      3、視圖類的實現

      視圖類的方法有:視圖更新方法,接受激活消息的方法,關閉視圖類實例的方法。此外,視圖必須捕獲激活事件。

      視圖類子類XxView的設計。第一步對父類的構造函數進行調用,第二步對數據成員變量、可視化組件實施初始化,最后把這些組件添加到視圖之中。需要實現的方法是ViewMvc getInstance().

      4、 文檔管理類的設計

      文檔管理類可以被分為兩類:(1)僅僅用于單文檔模式,這一類只管理一個文檔。(2)用于多文檔模式。這一類可以管理多個文檔。

      文檔管理類基類 DocumentManager的設計。面對對象理論主要強調的是針對接口進行編程,這樣做對于系統的擴展和維護是十分有利的。在文檔管理類的設計中使用該原則的目的是讓單文檔管理器和多文檔管理器的差異對于框架透明。我們可以可以提取這兩種管理器的共同操作,因此就可以形成一個接口。對這個接口我們命名為:DocumentManager。DocumentManager有:(1)新建文檔接口。文檔管理器主要對文檔進行管理,比如:銷毀、創建以及初始化等。因此,框架處理用戶的"新建......"命令時,需要調用文檔管理器的新建文檔接口。(2)打開文檔接口。文檔的打開可以說是文檔創建的一種方式,因此框架在響應用戶"打開......"命令時,也會把這一任務交給文檔管理器。此時,文檔管理器就會打開文檔。(3)關閉文檔接口。文檔的銷毀即文檔的關閉,因此當響應用戶退出程序命令時,會對文檔管理器進行委托,關掉全部的文檔。(4)接收文檔激活消息的接口。如果試圖激活,那么和試圖有關的文檔此時也會被激活。該文檔被激活的消息需要被發送到文檔管理器,這樣做的目的是方便讓文檔管理器激活這一文檔。

      結束語:

      21世紀軟件工業發展的一大趨勢是軟件構件化。目前,工業化的軟件復用已經進化到了面向領域的應用框架。框架是一種可復用設計,主要表現形式是:構件實例間交互的方法。筆者對mvc的java應用程序框架的實踐進行了分析和探討,希望對大家有借鑒的意義。

      參考文獻:

      mvc框架范文第3篇

      關鍵詞:MVC模式;Struts;Web應用

      中圖分類號:G642 文獻標識碼:A

      傳統的Web應用開發工具(ASP、JSP)將頁面顯示、商業邏輯和數據處理大部分都集中在頁面代碼中,Web應用擴展維護比較困難,在大型Web應用開發中愈發顯得力不從心。MVC設計模式將頁面顯示、商業邏輯和數據處理相分離,最大限度地降低系統各部分之間的耦合性,提高代碼重用率,易于分工協作。而Struts是一個為開發基于MVC模式的應用架構的開源框架。

      1MVC設計模式

      MVC設計模式是一種著名的用戶界面軟件開發設計模式,它是模型-視圖-控制器(Model-View-Controller)縮寫。在MVC設計模式中,它把應用程序分成了3個核心部分,原理如圖1所示。

      (1) 模型(Model)。模型封裝了用戶數據和處理數據的業務邏輯,體現了應用程序的當前狀態,而且可以將用戶數據狀態的變化提供給多個顯示該數據的視圖共用。

      (2) 視圖(View)。視圖提供了用戶界面,是用戶和應用程序的交互的窗口,既接受用戶輸入,也把模型數據狀態顯示給用戶,但是視圖不負責任何業務邏輯處理,僅僅是將用戶輸入數據傳遞給控制器或將模型數據顯示給用戶。

      (3) 控制器(Controller)。控制器連接了模型和視圖,根據用戶請求判斷將請求交給哪個模型來完成,然后調用視圖來顯示模型處理后的用戶請求結果。

      MVC設計模式將應用程序進行了分層,提高了軟件的可擴展性、可維護性。

      2Struts框架

      Struts框架繼承了MVC設計模式的特性,是J2EE體系架構的一種輕量級實現。其工作原理如圖2所示:

      (1) 控制器的實現。Struts框架中采用了ActionServlet和Action類以及Struts-config.xml配置文件作為控制器的實現。其中,Struts-config.xml配置文件配置了不同用戶請求及對應的具體業務邏輯組件來供ActionServlet類查詢。ActionServlet類是中心Servlet,負責處理所有的用戶請求。當用戶提出請求,ActionServlet類最先對請求進行處理,它將根據Struts-config.xml配置文件將用戶請求映射到具體的Action類;而當Action類調用模型組件處理好用戶請求,并返回了處理結果后,仍然由ActionServlet類根據Struts-config.xml配置文件將結果轉發到視圖提供給用戶,或者轉發另外一個Action做進一步處理。Action類實現了具體的業務邏輯,它接受用戶的輸入,然后調用具體的模型組件來完成用戶請求。

      (2) 視圖的實現。Struts構架主要采用了JSP作為視圖的實現,它提供了豐富的JSP標簽庫支持應用程序的開發,而且引入了ActionForm組件(實質為JavaBean)作為用戶表單的封裝來完成數據的傳輸。

      (3) 模型的實現。Struts框架對模型――即復雜的數據持久化層沒有提供太多的支持,但是這也就是說開發人員有更多自由來選擇合適量級的持久化技術,比如Hibernate、EJB等。

      3Struts工作流程

      對于采用Struts 框架的Web應用,其具體工作流程如下:

      (1) 客戶端通過本地瀏覽器向服務器發出一個請求;

      (2) 控制器接收請求,找到對應的Action;

      (3) Action類執行建立在模型組件基礎上的業務邏輯;

      (4) 一旦Action類處理完業務邏輯,它把控制權返回給ActionServlet;

      (5) 當ActionServlet把Action類的處理結果傳送到指定的視圖中。

      4Web開發中的應用

      以一個Web考試系統中的考生注冊子系統為例,說明Struts 在Web程序開發中的應用。考生在注冊頁面上輸入考生名、密碼等相關信息,若注冊成功,控制將轉向一個顯示注冊成功的頁面,否則控制將轉向一個顯示失敗的頁面。具體步驟如下:

      (1) 項目建立。

      (2) 實現視圖功能的用戶界面的設計。Struts中,JSP 頁面中利用Struts框架提供的taglib 標記庫的標記能夠大大提高開發效率。在該系統中,其注冊頁面reguserinfo.jsp 概要如下:

      //引用Struts bean 標記

      UserName:

      Password:

      (3) 實現模型功能的組件設計。模型部分包含了應用程序的業務邏輯。

      ① 系統狀態組件(FormBean),即實體模型類,它繼承自ActionForm類,用來存放表單數據,與注冊頁面的表單對應的數據Bean如下:

      …;

      public class UserForm extends ActionForm{

      public String getUserID(){return userID;}

      public void setUserID(String userID)

      {this.userld= userID;}

      }

      ② 指令類組件(ActionBean),它擴展了Action 類,主要是用來控制應用程序的流程,當注冊考生按“Submit”按鈕后,來自用戶的請求被Servlet 送到指令類組件RegUserAction,指令類調用相應的業務邏輯進行處理,然后把請求轉發給相關的JSP,其程序概要為:

      …;

      public class RegUserAction extends Action

      {

      public ActionForward perform(ActionMapping

      mapping, ActionForm form, HttpServletRequest

      req, HttpServletResponse response) {

      //獲取注冊信息,并據此做相應操作

      }

      }

      (4) 實現控制器功能的指令。控制器類ActionServlet的核心是Struts-config.xml 配置文件,它包含了應用程序的整個邏輯流程。在考生注冊信息過程中,用reguserinfo.jsp實現注冊頁面;用UserForm(擴展了ActionForm)封裝了表單數據;用RegUserAction實現了考生注冊信息并控制了應用程序流程;而在Struts-config.xml 配置文件里實現了注冊頁面(reguserinfo.jsp)、數據Bean(UserForm)、邏輯Bean(RegUserAction)之間的聯系,其配置信息為:

      name="userForm"scope="request">

      當在注冊頁面上單擊“Submit”按鈕時,考生請求被提交給ActionServlet, ActionServlet 根據Struts-config.xml 中的配置信息,把/reguser.do 的URL映射到RegUserAction,把考生注冊信息封裝到UserForm,由RegUserAction 完成

      注冊操作,然后轉發給“/regsuccess.jsp”。

      (5) 系統運行。 完成整個系統的功能實現。

      5總結

      Struts體系框架自從2001年7月了1.0版之后,已經越來越得到Java開發者的支持,實踐證明,Struts體系框架的確是一個優秀的框架,大大縮短了Java Web應用程序的開發周期,提高了系統開發效率。

      參考文獻:

      [1] 孫衛琴. 精通Struts:基于MVC的JavaWeb設計與開發[M]. 北京:電子工業出版 ,2004.

      [2] 閻宏. Java與模式[M].北京:電子工業出版社,2002.

      [3] Ted Husteel, Cedric Dumoulin, David Wiwerfeldt, et al.《Struts in Action》[M]. ManningPublication co.2001.

      Application Methods of Struts Framework Based on MVC Designed Pattern

      XU Cong, WANG Ya-xuan

      (Software College, Dalian University of Foreign Language, Dalian 116044, China)

      mvc框架范文第4篇

      關鍵詞:Ajax技術;Struts框架;異步響應;JavaScript

      中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)34-1650-03

      The Research of Web Application Framework Based on the Collaboration of Ajax Technology and MVC Pattern

      HE Xi-chun, XIONG Qian-xing, WU Ting

      (Department of Computer Science and Technology, Wuhan University of Technology, Wuhan 430063, China)

      Abstract: There are many problems in the existing Electronic Application System with the B/S mode. For example: The user always needs to wait for a long time for the result; the server always has to be under large pressure; a large part of resources at the client-side are leaved unused and so on.. This article studies the Ajax technology at first, and then combines it with the Struts Framework based on the MVC design pattern. With the collaborative work from the two parts, we can promote the response speed of the Web applications based on the B/S mode and construct a more effective web-application framework.

      Key words: Ajax technology; Struts framework; asynchronous response; JavaScript

      隨著Internet的飛速發展,基于Web的諸多應用以其豐富而生動的界面和方便使用等特點在信息化的建設中發揮的作用日益顯著。隨著服務器端開發技術的成熟,越來越多的開發人員開始親睞B/S(Browser/Server)的設計模式。如何克服B/S模式自身的一些問題:例如用戶體驗不如C/S模式;服務器端壓力過大,沒有充分利用客戶端的資源,也就成為應用系統需要研究的新問題。例如,某大型水路征稽系統,就是一個典型的電子政務系統。該系統集征稽與管理為一體,征稽部分幫助完成用戶開票操作,管理部分用于數據的統計分析和查詢。征稽部分對實時性和數據的準確性要求很高,

      并且用戶輸入的過程中涉及到相關數據的驗證。綜合起來,就是要求服務器既能提供相當于本地系統似的響應速度,又可以提供大量數據的統計查詢。

      針對以上問題,本文提出將Ajax技術與MVC模式相結合的新型web框架應用到電子系統中。為了避免頁面的臃腫和維護的困難,在中間層上采用MVC的設計模式。同時利用Ajax技術實現瀏覽器與服務器無刷新交互,數據的按需獲取與頁面的部分加載,極大的緩解網絡流量。將Ajax的優越性,與現有的MVC設計模式相結合,使得Web應用不僅層次分明,可重用性強,具有高的健壯性和可伸縮性,而且具有良好、豐富的用戶體驗。

      1 基于MVC模式的Struts框架介紹

      MVC(Model-View-Control)模式,就是模型-視圖-控制器模式,其核心思想是將程序劃分

      成相互獨立又能協同工作的三個部分,現在是web應用程序普遍采用的開發模式。Struts即是MVC設計模式一種實現。

      1) 控制器:控制層,起到控制整個業務流程(Flow Control)的作用,實現視圖和模型部分的協同工作。在Struts中起著控制器的作用的是ActionServlet。所有的控制邏輯利用Struts一config.xml文件來配置。

      2) 視圖:視圖是應用程序中與用戶實現交互的界面相關的部分,即表示層,通常實現數據的輸入和輸出功能。主要是由JSP來控制頁面的輸出。

      3) 模式:模型是應用程序的主體部分。模型表示業務數據,或者業務邏輯,具有實現具體的業務邏輯、狀態管理的功能。

      模型-視圖-控制器模式工作流程見圖1。

      Struts框架優點顯而易見:可以將邏輯處理與頁面顯示清楚分開;頁面顯示可以使用JSP標簽庫,從而大大提高開發效率;通過一個配置文件,既可以把握整個系統各部之間的聯系,又可以大大減少后期維護的工作量。但是在服務器端提供了良好而成熟的架構實現的Struts框架,在客戶端卻沒有相應的架構,這使Struts在一些交互性強的頁面應用不理想,導致刷新頁面頻繁,延長用戶的等待時間。在上例的系統中,存在很多用戶交互頻繁的頁面,這也導致系統效率低下,造成服務器資源和網絡資源的浪費。

      2 Ajax的工作原理

      Ajax(Asynchronous JavaScript and XML)并不是一門新的語言或技術,實際上它是幾項技術按一定方式的組合,在共同的協作中發揮各自的作用。

      傳統的web應用遵循一種請求/響應的模式,對于每個請求都會重新加載整個頁面。Ajax的工作原理相當于在用戶和服務器之間加了一個中間層,使用戶操作與服務器響應異步化,從而消除了網絡交互過程中的“處理―等待―處理”的缺點[1]。每當需要更新時,客戶端Web頁面的修改是異步的和逐步增加的。并且客戶端的瀏覽器可以分擔一部分的業務邏輯,而不再僅僅是顯示內容;服務器傳送的僅僅是數據,而不是內容。這樣,Ajax在提交Web頁面內容時大大提高了用戶界面響應的速度。在基于Ajax的應用程序中沒有必要長時間等待整個頁面的刷新。頁面中需要更新的那部分才進行更改,如果可能的話,更新是在本地完成的,并且是異步的。所以基于Ajax技術的應用程序可以給用戶提供桌面程序般的使用體驗。基于Ajax的web模型和Ajax引擎模型見圖2。

      由于Ajax技術本身的優越性,基于Ajax技術的Web型框架現在已經應用到很多程序中。例如Gmail、Google Map、Google Suggest就是幾個經典的Ajax應用。本文中重點要討論的就是將Ajax技術與現有的MVC開發模式相結合,應用到項目開發中。

      3 Ajax技術與MVC模式相結合的web框架

      綜合上面所分析的,基于MVC模式的Struts是一種框架,雖然它可以很好的將業務邏輯和表示分離,但是大多數的Struts應用都是標準的“如同一個平面文檔Web頁面”的結構。Ajax是一項技術,它的優勢是使得Web頁面看起來接近像用戶所期望的桌面應用的動態應用程序,而不是一個平面的顯示文檔。將Ajax技術應用到Struts框架中,可以充分的發揮兩者的優點,形成一種高效的web應用框架。

      3.1 Ajax技術與MVC相結合的方法

      Ajax中實現異步響應的onReadyStateChange事件具有在客戶端程序中的事件監聽功能。在MVC模式中,視圖相當于用戶看到的頁面,通過內置的Ajax對象一步方式給控制器發送請求,Ajax中的onReadyStateChange則開始監聽;控制器接受到頁面發送過來的請求(Get或者Post方式),通過請求判斷后發送給相應的業務或者數據模型;則業務或者數據模型開始執行業務操作,執行完畢后直接給頁面發送數據更新的通知。頁面中Ajax對象的onReadyStateChange接收到數據的更新通知后,根據實際的情況用DOM進行頁面更新。從上面的結合原理上可以了解,Ajax技術與Struts框架的結合要體現在頁面和控制器之間,進行異步的控制。通過分析,在Struts框架中應用Ajax技術,實際上就是加入一個Ajax引擎,這個引擎主要是用來發送Ajax異步請求到服務器和接收服務器的Ajax響應,并動態更新頁面,由于采用的是Struts框架,那么無論是發送請求還是接收響應,都應該完成到StrutsForm形式和StrutsAction形式的轉換。具體的結合方式可參見圖3中所示。

      用戶的瀏覽器在執行任務時就裝載了Ajax引擎,Ajax引擎用JavaScript語言編寫,它負責解釋執行用戶界面及與服務器之的交互。Ajax引擎允許用戶與應用軟件之間的交互過程異步進行,獨立于用與網絡服務器間的交流。用JavaScript調用Ajax引擎來代替產生一個HTTP用戶動作,內存中的數據編輯、頁面導航、數據校驗這些不需要重新載入,整個頁面的需求可以交給Ajax來執行。

      通過分析Ajax技術與Struts框架結合的原理,可以知道Ajax作為一項技術,能夠很方便的融入到基于MVC模式的Struts框架中。它并不需要任何新的庫文件或者服務器代碼;只需要使用現有的Struts庫文件和Action類。關鍵是在Struts的應用中根據實際業務的需要,以模塊為單位加入Ajax的相關設置。首先需要確定哪些部分需要動態顯示,然后將她們更新到Ajax的異步通信執行。

      以Ajax技術的實現框架DWR為例。它能夠把服務器端Java對象的方法公開給JavaScript代碼。所以在這個引擎里,它最重要的就是提供了一個Java類到JavaScript對象的映射機制,也即是DWRServlet。DWR是作為Web應用程序中的Servlet部署的。而在Struts的視圖、控制和模型三個組件中,ActionServlet就是它的控制器(Controller)。那么要將兩個框架結合起來,其實也就是將DWRServlet和Actionservlet結合起來,作為整合框架的核心-MVC模式的新的控制器。

      3.2 新型web框架的應用

      某大型的水路征稽系統中的開票業務和協議簽訂業務,對系統的響應速度要求很高,且在運行的過程中,需要對用戶的每一步輸入的信息進行驗證。這樣的需求,可以通過應用Ajax技術和Struts架構相結合的新型框架來滿足。

      以統繳業務為例,該模塊幫助用戶完成協議的簽訂和電子協議的生成。首先需要在系統的web.xml文件中配置DWR和Struts這兩個Servlet以及其映射。

      ……

      <servlet>

      <servlet-name>action</servlet-name>

      <servlet-class>

      org.apache.struts.action.ActionServlet

      </servlet-class>

      <init-param>

      <param-name>application</param-name>

      <param-value>ApplicationResources</param-value>

      </init-param>

      <init-param>

      <param-name>config</param-name>

      <param-value>/WEB-INF/struts-config.xml</param-value>

      </init-param>

      <init-param>

      <param-name>debug</param-name>

      <param-value>2</param-value>

      </init-param>

      <init-param>

      <param-name>detail</param-name>

      <param-value>2</param-value>

      </init-param>

      <load-on-startup>2</load-on-startup>

      </servlet>

      ……

      <!----以上是指定Struts的ActionServlet--->

      <servlet>

      <servlet-name>dwr-invoker</servlet-name>

      <servlet-class>

      org.directwebremoting.servlet.DwrServlet

      </servlet-class>

      <init-param>

      <param-name>debug</param-name>

      <param-value>true</param-value>

      </init-param>

      ……

      </servlet>

      <!---以上是指定DWR的DWRServlet---->

      要調用的JavaBean方法需要在DWR的配置文件dwr.xml中進行聲明,建立映射,如:

      <create creator="new" javascript="getSnxyxx" scope="page">

      <param name="class"

      value="edu.whut.cwts.tj.xy.getSnxyxx" />

      </create>

      在頁面中直接調用相關的JavaBean:

      function funcresult(result)

      {

      if(result=="1")//如果公司名稱驗證通過,獲取該公司到目前的協議情況

      {var result;

      getSnxyxx.getallxxdwmc.value, dwxz.value,funcresult);

      }

      ……}

      function funcresult(result)

      {//對公司協議信息的顯示

      ……

      }

      DWR允許用戶像調用JavaScript的函數一樣調用Java方法,對于Struts框架中的ActionForm類和Action類也可以直接通過DWR調用,只需要在dwr.xml文件根據實際業務需要,對用到的類進行如上的聲明即可。程序中,根據實際業務需要有的地方DWR進行實現,有的地方用Struts來實現,有的需要兩者結合實現,進行靈活控制,開發高效的水路電子征稽系統。

      4 結束語

      本文將現在比較流行的Ajax技術與成熟的開發模式MVC相結合,可以充分發揮兩者的優點,組成更為合理高效的新型web框架。Ajax技術可以異步響應頁面請求,使得頁面的展現更加靈活動態;基于MVC模式的Struts框架使得系統的開發,測試和維護更加科學合理。將這種新型web框架應用到應用系統的開發中,有利于改善B/S模式應用系統中普遍存在的問題,充分利用客戶端的資源,減輕服務器端壓力,給用戶提供基于web的功能和桌面級的用戶體驗。

      參考文獻:

      [1] 游麗珍,郭宇春,李純喜.Ajax引擎的原理和應用[J].微計算機信息,2006,6(9):205-207.

      [2] 佘名高,吳海林,熊童滿,等.Ajax在Struts中的應用[J].計算機技術與發展,2007,10(17):69-72.

      mvc框架范文第5篇

      【關鍵詞】MVC模式;Joomla!;Web系統;專家答疑組件

      【中圖分類號】G40-057 【文獻標識碼】A 【論文編號】1009―8097(2009)06―0097―04

      軟件開發中,通常用耦合度和內聚度作為衡量模塊獨立程度的機制。傳統的Web系統開發,常常圍繞著事件驅動的界面表示層來組織開發,此開發模式把數據處理、程序功能和界面層代碼完全雜糅在一起,不利于模塊間的復用,降低了系統各模塊間的獨立性,系統模塊間具有高耦合度。MVC模式由于把數據處理、程序輸入輸出控制和數據表示分離開來,并描述了三者之間的通訊方式,提高了系統各模塊間的獨立性與模塊的可復用性,很好的解決了上述傳統Web系統開發中所遇到的問題。

      在Web系統開發中,對于MVC模式的實現主要有三種技術框架:基于ASP.NET的框架、基于PHP的框架、基于JSP的框架。基于ASP.NET的框架的最大弱點是不具有跨平臺性,依賴于Window平臺,安全性與穩定性較弱且版權使用費用昂貴;基于JSP的框架的最大弱點是開發周期長,技術實現復雜,只合適大型Web系統項目應用;而實現MVC模式的PHP的框架由于具有跨平臺性、安全性與穩定性高、開發周期短、開源(軟件免費使用)等特征在中小型Web系統開發中得到了廣泛的應用。作者通過文獻調研發現,研究ASP.NET的框架與JSP的框架在Web系統開發中應用的文獻 較多,而對于實現MVC模式的PHP框架在Web系統開發中的應用研究則很少。

      目前,基于MVC模式的PHP技術框架眾多,如Symfony、Zend Framework、Joomla!、Drupal等,開發者依據開發需求靈活的選擇框架,本文則選取Joomla!框架, 探討其在Web系統開發中如何進行組件擴展開發。首先,本文分析了基于MVC模式的Joomla!框架在Web系統擴展開發中的應用 設計思想、技術方法;其次,重點分析了Joomla!框架在Web系統擴展開發中的擴展機制;最后,以某外語教育出版社高等英語教學網專家答疑組件擴展開發為案例,剖析了Joomla!框架擴展機制在Web系統擴展開發中的實現。

      一 Joomla!框架應用于Web系統的組件擴展設計

      由于Joomla!框架具有自帶的用戶注冊管理、新聞、媒體管理等組件,并且擁有優秀的擴展能力等優勢,提高了開發的效率和靈活性,因此它在中小Web系統開發中得到了廣泛應用。Joomla!框架的組件概念即是完成一定功能的應用程序。下面圍繞Joomla!框架的Web組件擴展問題分別對Joomla!框架應用于Web系統組件擴展開發的設計思想、技術方法進行探討。

      1 Joomla!框架組件擴展的MVC模式設計思想

      為了克服傳統Web開發中將數據處理、程序功能和界面代碼完全雜糅在一起的問題,Joomla!框架應用于Web系統組件擴展開發遵循MVC模式設計思想,如圖1所示,包含三個部分:模型(Model)視圖(View)和控制器(Controller) ,分別對應于內部數據數據表示和輸入輸出控制。

      模型用于封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法;視圖是模型的外在表示,一個模型可以對應一個或者多個視圖,視圖是程序系統與外界的接口;控制器起到 溝通模型和視圖的作用,用于控制應用程序的流程。它處理來自用戶的行為事件和數據模型的改變事件,并對事件進行響應。

      如圖1所示,Joomla!框架遵循MVC設計思想進行Web系統擴展開發采用如下的數據交換機制:控制器――視圖和控制器――模型方法。控制器是視圖和模型之間進行數據交換的紐帶,在控制器――視圖方法中,控制器根據用戶輸入直接調用不同視圖改變響應流程,或與模型交互后獲得需要顯示的數據,再調用視圖改變響應流程;而在控制器――模型方法中,控制器與模型交換,控制器將輸入數據傳遞給模型處理,控制器中也可以從模型中抽取數據。

      2 Joomla!框架組件擴展的技術方法

      采用Joomla!框架進行Web系統的組件擴展開發,要求開發者編程語言必須使用PHP技術,數據庫使用MySQL、 Web服務器通常推薦開源的(免費使用)的Apache。Joomla!官方的最新框架版本采用分層架構機制:框架層、應用層、擴展層,框架層由Joomla!的基本類庫和插件組成;應用層由應用程序類構成;擴展層由組件、模塊、模板構成,其架構機制如圖2所示。

      Joomla!框架應用于Web系統擴展開發的方法對于Web系統交互界面設計人員來說是采取模板定制方案,將設計好的Web頁面與CSS樣式遵循Joomla!模板定制機制,將已經設計好的模板嵌入到Joomla!框架中,依據客戶的不同需求進行個性化Web系統外觀的設計;對于Web系統編程人員來說,Joomla!框架已經為Web系統中最常用的功能進行了實現 ,如果Web系統開發有另外的功能需求,可以使用Joomla!框架進行Web系統的擴展開發,即遵循Joomla!框架擴展開發的規范與機制編寫組件、模塊、插件來滿足Web系統開發的功能需求。

      二 Joomla!框架應用于Web系統的組件擴展機制

      對于Web系統編程人員來說,應用Joomla!框架進行Web系統擴展開發需要遵循Joomla!框架擴展開發的規范與機制開發組件、模塊、插件來滿足Web系統的功能需求。Joomla!框架最重要的擴展機制當屬組件擴展機制,圖3所示為Joomla!框架的組件擴展機制MVC模式圖。

      Joomla!框架中JModelJController JView三個類分別對應于圖3中的ModelController View部分,其中JController類是JModel類和JView類數據交換的紐帶,這三個類與Joomla!框架中的JDispatcher類, JRoute類等互相配合,進行Web組件擴展開發。

      JModel類是Joomla!框架組件擴展機制的事務邏輯處理模塊,其是最終負責處理客戶請求的模塊。它能夠處理用戶的大多數需求,快速的從數據庫中獲取請求數據,協調事務,保證應用程序各部分間的事務組合;JController類是Joomla!框架組件擴展機制的控制模塊。此模塊首先接收客戶端發送的與網絡協議相關的請求,然后解析請求并轉換為事物邏輯模塊(JModel)的輸入參數, 調用相應的事務邏輯模塊進行處理,最后根據事物邏輯模塊的處理結果調用相應的用戶視圖模塊(JView)生成結果頁面,返回至瀏覽器;JView是Joomla!框架組件擴展機制的用戶視圖模塊。此模塊的主要功能是根據事務邏輯模塊(JModel)處理結果生成返回至客戶端的頁面。

      開發者應用Joomla!框架進行組件擴展開發,都需要繼承JModel類、JView類、JController類,形成如圖4所示的Joomla!框架組件擴展開發機制圖,開發者借助于圖4的流程,運用PHP編程語言對上述三個類分別進行繼承,完成Web系統擴展組件的開發。開發者依據此模式進行Web系統開發,提高了代碼的可復用程度,節省了開發的時間,提高了開發效率;Joomla!框架通過提供擴展組件的方式來滿足Web系統的功能擴展,提高了系統各個部分之間的獨立性,降低了Web系統模塊間的耦合度。

      三 組件擴展案例――高等英語教學網專家答疑組件

      本文以某外語教育出版社高等英語教學網專家答疑組件的擴展開發為案例,具體闡述Joomla!框架組件擴展機制在Web系統組件擴展開發中的應用流程和實現方法。

      1 專家答疑組件的擴展開發需求

      為教師的教學, 和學生的學習提供異步專家指導;專家也可以發表指導英語教學和學習的文章;對于教師和學生的問題應分開顯示;對于教師和學生的提問應有歸類和按類別顯示功能;支持關鍵字搜索;頁面支持圖片與附件功能;教師與學生提問審核功能;教師與學生的提問具有優先功能;具有創建管理問題種類功能。

      2 專家答疑組件的組成

      Joomla!框架的擴展組件由后臺管理與前臺顯示兩大部分構成。專家答疑組件的后臺管理具有對問題的管理分類審核 優先 與上傳附件功能;專家答疑組件的前臺顯示專家的指導和教師與學生的提問,并顯示問題的搜索和分類界面。

      3 專家答疑組件的數據庫設計

      Joomla!框架的組件擴展開發使用MySQL數據庫,在已存在的數據庫中新建組件開發所需要的表。專家答疑組件,在已存在的數據庫中新建專家答疑數據表,它包含主鍵標識符、問題標題、問題答案、問題分類、疑問主體、關鍵詞、創建時間這些字段。通過繼承Joomla!框架中的JTable類,將得到一個專家答疑表類文件存放在Tables文件夾中,它將在組件擴展的Model部分存儲數據方法中得到調用。

      4 專家答疑組件的后臺管理開發

      遵循Joomla!框架的組件擴展開發機制和流程,應該包括三個部分:Model、Controller和View,進行組件開發的時候,通常創建Models文件夾存放 組建開發中的Model文件;Controllers文件夾存放 組件開發中的Controller文件;Views文件夾存放 組件開發中的View文件。下面將以專家答疑組件為例具體闡述Model、Controller、View這三個部分的開發。

      專家答疑組件的Models文件夾中包含有QuestionanswersModel和QuestionanswerModel文件,它們都繼承自Joomla!框架中的Jmodel類,負責對問題管理列表和單個問題進行數據邏輯處理。這兩個類除了擁有共同的Jmodel的父類方法,還共同擁有數據保存方法、數據刪除方法,代碼的可復用程度得到很大提高。對于 處理多個問題列表的QuestionanswersModel類還具有分頁方法,方便用戶進行瀏覽。在數據保存方法中通過對專家答疑表類的調用,將信息綁定到相應的數據庫的表中,簡化了開發者對于 數據保存的處理,提高了開發者的效率。

      專家答疑組件的Controllers文件夾中包含QuestionanswerController文件,這個文件包含一個QuestionanswerController類,它繼承自Joomla!框架中的Jcontroller類。除了文件夾之外,還有一個默認的QuestionansersController類,Joomla!組件擴展開發,通常把這個默認的類放在Controllers文件夾外,它的作用是默認情況下,調用組件Views文件夾下問題管理列表這個頁面。而QuestionanswerController類是通過一系列方法與專家答疑組件中的Model類進行聯系,從而調用專家答疑組件中的對應的單個問題頁面將結果返回給瀏覽器。這個類除了擁有父類Jcontroller的方法外,還具有對于 問題進行編輯的方法、對于 問題進行保存的方法、對于 問題進行刪除的方法 、取消操作的方法。對于 問題的添加和編輯方法,通過設置調用專家答疑組件中的相關View文件夾下的類,直接將頁面返回給瀏覽器;對于 問題進行保存、刪除的方法是通過調用專家答疑組件中的QuestionanswerModel中的數據保存和刪除方法來完成;對于 取消操作的方法是通過進行 地址的重新定位來實現。在Joomla!組件開發中,Controllers文件夾下的各個控制類文件都擁有上述的共同方法,在開發的時候,除了調用不同的Model和View外,其他的代碼都大致相同,代碼在很大程度上可以進行復用。

      專家答疑組件中的Views文件夾下有兩個子文件夾,它們分別是專家答疑的問題管理顯示頁面和單個問題顯示頁面。兩個子文件夾下都包含一個模板文件夾和對應的View類,模板文件夾可以存放若干個模板文件,以供View類進行選擇調用,將所獲得的數據填入到模板文件中形成顯示頁面。它使數據處理與功能代碼與界面表示層代碼得以分離,避免了代碼的雜糅,提高了各部分間的獨立性。專家答疑組件擁有QuestionanswersView類和QuestionanswerView類,它們都繼承自Joomla!框架中的Jview類。它們通常運用一個顯示方法將數據填入到指定的模板文件中,由于專家答疑組件的顯示頁面都具有單一的模板文件,所以沒有涉及到模板的選擇調用。

      5 專家答疑組件的前臺開發

      由于專家答疑組件的前臺開發和上述的后臺管理開發方法完全一樣,所以限于篇幅不再重復敘述。但是需要指出的是前臺開發除了多個問題顯示和單一具體顯示功能外,還具有問題搜索和問題分類顯示功 。開發者僅僅需要在其Models文件夾、Controllers文件夾和Views文件夾增加相應的類文件即可,不會影響到其他部分的功能代碼,很方便為組件增加 額外的功能,提高了組件各個部分之間的獨立性,降低了系統之間的耦合度。

      6 專家答疑組件的安裝

      經過上述五個步驟,就完成了專家答疑組件的開發,開發者最后還需要建立一個XML文件,將專家答疑組件所擁有的文件按照層次順序添加到XML中,完成安裝的XML文件后, 進行壓縮成ZIP格式的文件進行安裝使用,專家答疑組件的后臺問題管理頁面效果圖如下所示。

      四 結束語

      本文以某外語教育出版社高等英語教學網的專家答疑組件開發為案例詳細闡述了應用Joomla!框架進行Web系統組件擴展開發的機制和流程,限于篇幅,對于Joomla!框架的Module和Plugin開發沒有涉及。通過遵循Joomla!框架的MVC組件擴展機制,我們在開發過程中提高了系統各個部分的獨立性與代碼的可復用程度,降低了系統各部分之間的耦合度。

      參考文獻

      [1] MVC模式研究的綜述.任中芳,張華,閆明松等 [J].計算機應用研究,2004,10:1-2.

      [2] MVC模型在Web程序中的應用及java實現.張瑩,許俊華,張毅, 等[J].計算機工程與應用,2001,17:160-161.

      [3] 基于的MVC設計模式的研究.林慶,朱翠苗, 等[J].計算機工程與設計,2008,1:167-168.

      [4]Dan Rahmel.Professional Joomla![M].US: Wiley Publishing Inc,2007.

      [5]Dan Rahmel.Beginning Joomla! [M].US: press Publishing, 2007.

      [6]James Kennard. Mastering Joomla!! 1.5 Extension and Framework Development [M].Birmingham: Packt publishing, 2007.

      [7]Joseph LeBlanc. Learning Joomla!!1.5 Extension Development [M].Birmingham: Packt publishing, 2007.

      [8] [EB/OL].

      [9] [EB/OL].

      [10] [EB/OL].

      [11] [EB/OL].

      A Study on the Application of MVC-Based Joomla! Framework in Extension and Exploration of Web Components

      HU Qian-jinCAI Yong-zhou WU Min

      (University of Science and Technology of China, Center of Modern Educational Technology, Hefei Hubei, 230026)

      相關期刊更多

      鐵道建筑技術

      部級期刊 審核時間1個月內

      中國鐵道建筑集團有限公司

      大眾硬件

      部級期刊 審核時間1個月內

      科學出版社

      現代雷達

      北大期刊 審核時間1-3個月

      中國電子科技集團公司

      久久亚洲AV成人无码电影| 亚洲一区电影在线观看| 在线播放亚洲第一字幕| 亚洲国产成人综合精品| 亚洲国产精品无码久久久秋霞2 | 亚洲欧好州第一的日产suv| 亚洲入口无毒网址你懂的| 亚洲福利视频网址| 亚洲精品一卡2卡3卡三卡四卡| 亚洲国产成人久久综合碰碰动漫3d| 国产亚洲成av人片在线观看| 亚洲自偷自偷偷色无码中文| 国产亚洲AV手机在线观看| 亚洲色成人WWW永久网站| 亚洲级αV无码毛片久久精品| 亚洲色婷婷六月亚洲婷婷6月| 亚洲老妈激情一区二区三区| 亚洲精品无码专区在线在线播放| 精品亚洲综合久久中文字幕| 久久久久亚洲AV成人无码网站 | 亚洲欧美日韩综合久久久久| 亚洲日韩看片无码电影| 亚洲成熟丰满熟妇高潮XXXXX | 亚洲avav天堂av在线不卡| 蜜芽亚洲av无码精品色午夜| 亚洲精品视频在线播放| 亚洲一级黄色大片| 国产亚洲福利在线视频| 亚洲av永久无码精品秋霞电影秋 | 亚洲综合另类小说色区色噜噜| 一本久到久久亚洲综合| 亚洲男人在线无码视频| 亚洲色大成网站WWW久久九九| 亚洲国产成人久久综合碰碰动漫3d | 亚洲av无码不卡一区二区三区| 亚洲日本在线观看| 亚洲国产成人手机在线电影bd | 国产精品亚洲аv无码播放| 亚洲三级电影网址| 亚洲午夜一区二区电影院| 亚洲欧美国产日韩av野草社区|