• 
    

    
    

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

      Struts1框架與Struts2框架的對(duì)比分析

      2010-04-05 17:05:29劉曉峰
      電大理工 2010年2期
      關(guān)鍵詞:基類(lèi)線程表達(dá)式

      劉曉峰

      遼寧廣播電視大學(xué)(沈陽(yáng)110034 )

      0 引言

      Struts2是Apache的開(kāi)源框架之一,Struts2與Struts1相比。有很多革命性的改進(jìn),但它并不是新發(fā)布的框架,而是在WebWork框架基礎(chǔ)上發(fā)展起來(lái)的。因?yàn)镾truts2是Webwork的升級(jí).而不是一個(gè)全新的框架,因此穩(wěn)定性、性能等各方面都有很好的保證:而且吸收了Struts1和WebWork兩者的優(yōu)勢(shì)。

      1 Struts1框架與Struts2框架簡(jiǎn)介

      1.1 Struts1框架簡(jiǎn)介

      Struts1最初由程序員Craig R.Mcclanahan發(fā)布,Apache軟件基金會(huì)于2002年接手該項(xiàng)目。Struts1提供了一個(gè)極好的框架,可以容易地整合JSP、Servlet和Java代碼。隨著Java的發(fā)展,Struts1已經(jīng)成為MVC設(shè)計(jì)模式的常用架構(gòu),并被廣大的程序員所接受,在Web開(kāi)發(fā)應(yīng)用中獲得了巨大成功。

      1.2 Struts2框架簡(jiǎn)介

      Struts2采用一種非常松耦合的設(shè)計(jì),讓系統(tǒng)Action不再與Sevlet API耦合,增強(qiáng)了單元的測(cè)試性。Struts2具有強(qiáng)大的標(biāo)簽庫(kù),這些標(biāo)簽不僅提供了表現(xiàn)層的數(shù)據(jù)處理,同時(shí)還提供了國(guó)際化、Ajax、上傳下載的功能。

      2 Struts1框架與Struts2框架的對(duì)比分析

      Struts2相對(duì)于Struts1已經(jīng)發(fā)生了很多變化,使用起來(lái)更簡(jiǎn)單、便捷。下面是Struts2與Struts1的特性比較:

      (1)Action類(lèi)

      Struts1要求Action類(lèi)要擴(kuò)展自一個(gè)抽象基類(lèi)。Struts1的一個(gè)共有的問(wèn)題是面向抽象類(lèi)編程而不是面向接口編程。

      Struts2的Action類(lèi)實(shí)現(xiàn)了一個(gè)Action接口,連同其他接口一起來(lái)實(shí)現(xiàn)可選擇和自定義的服務(wù)。Struts2提供一個(gè)名叫ActionSupport的基類(lèi)來(lái)實(shí)現(xiàn)一般使用的接口。當(dāng)然,Action接口不是必須的。任何使用execute方法的POJO對(duì)象可以被當(dāng)作Struts2的Action對(duì)象來(lái)使用。

      (2)線程模型

      Struts1的Action類(lèi)是單例類(lèi),因?yàn)橹挥幸粋€(gè)實(shí)例來(lái)控制所有的請(qǐng)求。單例類(lèi)策略造成了一定的限制,并且給開(kāi)發(fā)帶來(lái)了額外的煩惱。Action資源必須是線程安全或者同步的。

      Struts2 的Action對(duì)象為每一個(gè)請(qǐng)求都實(shí)例化對(duì)象,所以沒(méi)有線程安全的問(wèn)題。

      (3)Servlet依賴(lài)

      Struts1的Action類(lèi)依賴(lài)于Servlet API,當(dāng)Action被調(diào)用時(shí),以 HttpServletRequest和HttpServletResponse作為參數(shù)傳給execute方法。

      Struts2的Action和容器無(wú)關(guān)。Servlet上下文被表現(xiàn)為簡(jiǎn)單的Maps,允許Action被獨(dú)立的測(cè)試。Struts2的Action可以訪問(wèn)最初的請(qǐng)求(如果需要的話)。但是,盡可能避免或排除其他元素直接訪問(wèn)HttpServletRequest或HttpServlet-Response。

      (4)易測(cè)性

      測(cè)試Struts1的主要問(wèn)題是execute方法暴露了Servlet API這使得測(cè)試要依賴(lài)于容器。第三方的擴(kuò)展,如Struts TestCase,提供了一套Struts1的模擬對(duì)象(來(lái)進(jìn)行測(cè)試)。

      Struts2的Action可以通過(guò)初始化、設(shè)置屬性、調(diào)用方法來(lái)測(cè)試。依賴(lài)注入的支持也使測(cè)試變得更簡(jiǎn)單。

      (5)捕獲輸入

      Struts1使用ActionForm對(duì)象來(lái)捕獲輸入。象Action一樣,所有的ActionForm必須擴(kuò)展基類(lèi)。

      Struts2直接使用Action屬性作為輸入屬性,消除了對(duì)第二個(gè)輸入對(duì)象的需求。輸入屬性可能是有自己(子)屬性的rich對(duì)象類(lèi)型。

      (6)表達(dá)式語(yǔ)言

      Struts1整合了JSTL,所以它使用JSTL的表達(dá)式語(yǔ)言。表達(dá)式語(yǔ)言有基本的圖形對(duì)象移動(dòng),但是對(duì)集合和索引屬性的支持很弱。

      Struts2使用JSTL,但是也支持一個(gè)更強(qiáng)大和靈活的表達(dá)式語(yǔ)言--OGNL。

      (7)將值綁定到頁(yè)面

      Struts1使用標(biāo)準(zhǔn) JSP機(jī)制來(lái)綁定對(duì)象到頁(yè)面上下文。

      Struts2使用“ValueStack”技術(shù),使 taglib能夠訪問(wèn)值而不需要把你的頁(yè)面(view)和對(duì)象綁定起來(lái)。ValueStack策略允許通過(guò)一系列名稱(chēng)相同但類(lèi)型不同的屬性重用頁(yè)面(view)。

      (8)類(lèi)型轉(zhuǎn)換

      Struts1的ActionForm屬性經(jīng)常都是String。Struts1使用 Commons-Beanutils來(lái)進(jìn)行類(lèi)型轉(zhuǎn)換。轉(zhuǎn)換每一個(gè)類(lèi),而不是為每一個(gè)實(shí)例配置。

      Struts2使用OGNL進(jìn)行類(lèi)型轉(zhuǎn)換。提供基本和常用對(duì)象的轉(zhuǎn)換器。

      (9)驗(yàn)證

      Struts1支持在ActionForm的validate方法中手動(dòng)校驗(yàn),或者通過(guò)Commons Validator的擴(kuò)展來(lái)校驗(yàn)。同一個(gè)類(lèi)可以有不同的校驗(yàn)內(nèi)容,但不能校驗(yàn)子對(duì)象。

      Struts2支持通過(guò)validate方法和XWork校驗(yàn)框架來(lái)進(jìn)行校驗(yàn)。XWork校驗(yàn)框架使用為屬性類(lèi)類(lèi)型定義的校驗(yàn)和內(nèi)容校驗(yàn),來(lái)支持 chain校驗(yàn)子屬性。

      (10)Action執(zhí)行控制

      Struts1支持每一個(gè)模塊有單獨(dú)的生命周期,但是模塊中的所有 Action必須共享相同的生命周期。

      Struts2支持通過(guò)攔截器堆棧為每一個(gè)Action創(chuàng)建不同的生命周期。堆棧能夠根據(jù)需要和不同的Action一起使用。

      3 結(jié)束語(yǔ)

      Struts2框架整合了Struts1和WebWork的優(yōu)點(diǎn),其最大的特點(diǎn)就是其簡(jiǎn)單性。從Apache官方的宣傳來(lái)看,Struts2不久將會(huì)替代Struts1。

      [1]王舂林,耿祥義.淺析Struts2框架. 現(xiàn)代經(jīng)濟(jì)信息, 2009

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

      [3]閆術(shù)卓,楊強(qiáng).Struts2技術(shù)詳解:基于 WebWork核心的MVC開(kāi)發(fā)與實(shí)踐.電子工業(yè)出版社,2008

      猜你喜歡
      基類(lèi)線程表達(dá)式
      基于C#面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝、繼承和多態(tài)分析
      一個(gè)混合核Hilbert型積分不等式及其算子范數(shù)表達(dá)式
      表達(dá)式轉(zhuǎn)換及求值探析
      淺析C語(yǔ)言運(yùn)算符及表達(dá)式的教學(xué)誤區(qū)
      淺談linux多線程協(xié)作
      空戰(zhàn)游戲設(shè)計(jì)實(shí)例
      一種基于用戶(hù)興趣的STC改進(jìn)算法
      虛機(jī)制在《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》中的教學(xué)方法研究
      Linux線程實(shí)現(xiàn)技術(shù)研究
      議C語(yǔ)言中循環(huán)語(yǔ)句
      商(2012年11期)2012-07-09 19:07:55
      砚山县| 兴海县| 通化县| 镇坪县| 运城市| 濉溪县| 吉水县| 塘沽区| 兰坪| 香格里拉县| 左权县| 泰来县| 塔河县| 沧州市| 南安市| 阳曲县| 金溪县| 泾川县| 大港区| 观塘区| 玉林市| 轮台县| 莫力| 梨树县| 通海县| 涪陵区| 青浦区| 六枝特区| 长泰县| 新兴县| 那坡县| 蕉岭县| 平江县| 长春市| 来宾市| 原阳县| 北安市| 张北县| 麻栗坡县| 宝丰县| 阿拉善右旗|