• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于MVC設計模式的Struts框架研究

      2015-01-02 02:42:44陳星王寧吳特楊東
      科技視界 2015年1期
      關鍵詞:監(jiān)聽視圖框架

      陳星王寧吳特楊東

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

      0 引言

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

      1 MVC模式概述

      1.1 MVC架構(gòu)

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

      圖1 MVC模型

      1.2 MVC模式的優(yōu)勢與不足

      MVC能夠被眾多的web應用系統(tǒng)作為主流框架,主要原因在于它具有巨大而眾多的優(yōu)勢,這主要體現(xiàn)在下面幾個方面。

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

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

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

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

      綜上所述,通過對MVC模式的分析,可以看出MVC模式的作用是很明顯的,并且在大的系統(tǒng)結(jié)構(gòu)中作用會更加明顯。

      2 MVC模式基本實現(xiàn)方法

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

      2.1 Model的實現(xiàn)

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

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

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

      2.2 View的實現(xiàn)

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

      2.3 Controller的實現(xiàn)

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

      3 基于MVC模式的Struts框架

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

      圖2 struts的工作流程圖

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

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

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

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

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

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

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

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

      4 結(jié)論

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

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

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

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

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

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

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

      [7][美]Marco Pistoia,Nataraj Nagaratnam,等.企業(yè)級 Java 安全性:構(gòu)建安全的J2EE應用[M].尹亞,明喻衛(wèi),嚴進寶,譯.北京:清華大學出版社,2005,3:72-109.

      猜你喜歡
      監(jiān)聽視圖框架
      框架
      千元監(jiān)聽風格Hi-Fi箱新選擇 Summer audio A-401
      廣義框架的不相交性
      5.3 視圖與投影
      視圖
      Y—20重型運輸機多視圖
      SA2型76毫米車載高炮多視圖
      網(wǎng)絡監(jiān)聽的防范措施
      電子制作(2017年20期)2017-04-26 06:58:02
      WTO框架下
      法大研究生(2017年1期)2017-04-10 08:55:06
      應召反潛時無人機監(jiān)聽航路的規(guī)劃
      赤峰市| 平果县| 丹巴县| 兴仁县| 昌都县| 蒲城县| 子长县| 永川市| 札达县| 正镶白旗| 兴化市| 贺兰县| 酒泉市| 靖宇县| 浠水县| 柳河县| 玛纳斯县| 周宁县| 曲靖市| 洪湖市| 宁海县| 合阳县| 应用必备| 神农架林区| 山西省| 简阳市| 三台县| 江孜县| 济宁市| 闻喜县| 喜德县| 微山县| 太仆寺旗| 铅山县| 繁昌县| 宣化县| 翁源县| 吉林市| 大庆市| 新竹县| 桂林市|