0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

在項目設計應用中如何選擇框架,Struts和Spring框架對比

電子設計 ? 來源:電子設計工程 ? 作者:郁諾 ? 2020-08-10 09:19 ? 次閱讀

1 引言

基于Web的MVC framework在J2EE的世界內(nèi)已是空前繁榮。TTS網(wǎng)站上幾乎每隔一兩個星期就會有新的MVC框架發(fā)布。目前比較好的MVC,老牌的有Struts,Webwork。新興的MVC框架有Spring MVC,Tapestry,JSF等。這些大多是著名團隊的作品,另外還有一些邊緣團隊的作品,也相當出色,如Dinamica,VRaptor等。這些框架都提供了較好的層次分隔能力。在實現(xiàn)良好的MVC分隔的基礎上,提供一些現(xiàn)成的輔助類庫,同時也促進了生產(chǎn)效率的提高。如何選擇一個好的框架應用在項目設計中,將會對項目的效率和可重用具有至關重要性。

2 Struts框架

Struts是Apache軟件基金Jakarta項目的一部分。Struts框架的主要架構設計和開發(fā)者是Craig R.McClanahan。Struts是目前Java Web MVC框架中不爭的王者。經(jīng)過長達五年的發(fā)展,Struts已逐漸成長為一個穩(wěn)定、成熟的框架,并占有MVC框架最大的市場份額。但Struts某些技術特性已經(jīng)落后于新興的MVC框架。面對Spring MVC,Webwork2這些設計更精密,擴展性更強的框架,Struts受到了前所未有的挑戰(zhàn)。但就產(chǎn)品開發(fā)的角度,Struts仍然是最穩(wěn)妥的選擇。

Struts由一組相互協(xié)作的類(組件),Serlvet以及jsp tag lib組成。基于Stmts構架的Web應用程序基本上符合JSPModel2的設計標準,是MVC設計模式的一種變化類型。根據(jù)對framework的描述,很容易理解為什么說Struts是一個Web framwork,而不僅僅是一些標記庫的組合。但Struts也包含了豐富的標記庫和獨立于該框架工作的實用程序類。Struts有其自己的控制器(Controller),同時整合了其他的一些技術去實現(xiàn)模型層(Model)和視圖層(View)。在模型層,Struts可以很容易的與數(shù)據(jù)訪問技術相結合,包括EJB,JDBC和Obiect Relation Bridge。在視圖層,Struts能夠與JSP,VelocityTemplares,XSL等等這些表示層組件相結合。

Struts的體系結構,Struts framework是MVC模式的體現(xiàn),分別從模型、視圖、控制描述struts的體系結構(Architec-ture)。

(1)從視圖角度(View)主要由JSP建立,Struts自身包含了一組可擴展的自定義標簽庫(TagLib),可簡化創(chuàng)建用戶界面的過程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags這幾個Taglib。有關其詳細資料請參考Struts用戶手冊。

(2)從模型角度(Model) 模型主要是表示一個系統(tǒng)的狀態(tài)(有時候,改變系統(tǒng)狀態(tài)的業(yè)務邏輯操作也劃分到模型中)。在Struts中,系統(tǒng)的狀態(tài)主要有ActiomForm Bean體現(xiàn),一般情況下,這些狀態(tài)是非持久性的。如果需要將這些狀態(tài)轉(zhuǎn)化為持久性數(shù)據(jù)存儲,Struts本身也提供了Utitle包,可以方便與數(shù)據(jù)庫操作。

(3)從控制器角度(Controller) 在Struts framework中,Controller主要是ActionServlet,但是對于業(yè)務邏輯的操作則主要由Action,ActionMapping,ActionForward這幾個組件協(xié)調(diào)完成(也許這幾個組件,應該劃分到模型中的業(yè)務邏輯一塊)。其中,Action扮演了真正的業(yè)務邏輯的實現(xiàn)者,而ActionMapping和ActionForward則指定了不同業(yè)務邏輯或流程的運行方向。

對于Struts如何控制、處理客戶請求,通過對Struts的4個核心組件介紹來具體說明。這幾個組件是:ActionServlet;Action Classes;Action Mapping(此處包括ActionForward);ActionFrom Bean。

3 Spring框架

Spring實際上是《Expert One—on—One J2EE Design andDevelopment》一書中所闡述的設計思想的具體實現(xiàn)。在One—on一One一書中,Rod Johnson倡導J2EE實用主義的設計思想,并隨書提供了一個初步的開發(fā)框架實現(xiàn)(interface2l開發(fā)包)。而Spring正是這一思想的更全面和具體的體現(xiàn)。RodJohnson在interface21開發(fā)包的基礎之上,做了進一步的改造和擴充,使其發(fā)展為一個更加開放、清晰、全面、高效的開發(fā)框架。

Spring是一個開源框架,由Rod Johnson創(chuàng)建并且在其著作《J2EE設計開發(fā)編程指南》里進行了描述。它是為了解決企業(yè)應用開發(fā)的復雜性而創(chuàng)建。Spring使用基本的JavaBeans完成以前只可能由EJB完成的事情變得可能。然而,Spring的用途不僅限于服務器端的開發(fā)。從簡單性、可測試性和松耦合的角度,任何Java應用都可以從Spting中受益。Spring是一個輕量的控制反轉(zhuǎn)和面向切面的容器框架。這些描述過于簡單。但的確概括出Spring。

(1)輕量從大小與開銷而言Spting都是輕量的。完整的Spring框架可在一個大小1 MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴于輕量。

(2)控制反轉(zhuǎn) Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術促進了松耦合。當應用了IoC,對象被動地傳遞它們的依賴而不是自己創(chuàng)建或者查找依賴對象??梢哉J為IoC與JNDI相反,不是對象從容器中查找依賴,而是容器在對象初始化時不等被請求就將依賴傳遞給它。

(3)面向切面Spring包含對面向切面編程的豐富支持,允許通過分離應用的業(yè)務邏輯與系統(tǒng)服務(例如審計與事物管理)進行內(nèi)聚性的開發(fā)。應用對象只做它們應該做的,完成業(yè)務邏輯,僅此而已。并不負責(甚至是意識)其它的系統(tǒng)關注點,例如日志或事物支持。

(4)容器 Spring包含和管理應用對象的配置和生命周期,在此意義上它是一種容器。可以配置每個bean如何被創(chuàng)建,基于一個配置原形為bean創(chuàng)建一個單獨的實例或每次需要時都生成一個新的實例以及它們是如何相互關聯(lián)的。然而,Spring不應該被混同于傳統(tǒng)重量的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。

(5)框架Spring使由簡單的組件配置和組合復雜的應用成為可能。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里,Spr4ng提供了很多基礎功能(事務管理、持久性框架集成等等),并留有應用邏輯開發(fā)。

例如:Spring有3個重點,一個是面向接口編程:一個是控制反轉(zhuǎn);另外一個就是依賴注入。有了控制反轉(zhuǎn)就有了聲明性的bean,在application.xml也就是Spring的核心配置文件里面聲明bean的屬性,對應的類,引用名稱,這些是為編碼時要用到的bean做準備的,對應web應用程序,Spring有專門的類SpringContextLoader,等等。另外在web.xml里可以用context-param子節(jié)點將application.xml納入范圍,這樣容器在加載web應用時,就將對應的bean加載了,剩下的是如何引用這些bean的問題,這里用到Spring的接口注入,也是spring用的最多的依賴注入方式。例如:這有兩個類,一個是Main.java,一個是Demo.java.這里Main里面用到了Demo;

在項目設計應用中如何選擇框架,Struts和Spring框架對比

注意看到Main里面需要用到Demo的實例,因此,需要硬編碼,即靜態(tài)綁定(在編譯期間就需要綁定),這絕對會增大后期維護工作量,至少每次擴展或者修改類以后需要重新編譯已存在的iavabean組件。

Spring的依賴注入有機會實現(xiàn)動態(tài)綁定,原理很簡單,用到了接口,接口是不能生成實例的,再加上iava的多態(tài),接口可指向它的實現(xiàn)類。

所以試著為bean添加一個接口

}

注意看加重部分,用Spring提供的兩個類,BeanFactory,和xmhxxxxx,直接讀取配置文件。然后用getBean(id);取得bean,這個時候返回的對象是范型,比如Object obj=beanFac-tory.getBean(demo);將改后的寫在下面,但沒測試過。

這樣就解耦了,實現(xiàn)無侵入式。不要忘記要將需要的bean在配置文件里面聲明。

所有Spring這些特征使編寫更干凈、更易管理、并且更易于測試的代碼。也為Spring中的各種子框架提供了基礎。

4 結語

人們?nèi)找鎸﹂_源框架的重視.使得很多項目的成本大大降低,并且投放使用以及維護速度都增加了。現(xiàn)在的開源框架都有很高的質(zhì)量,提供了很好的文檔,一些書籍讓開發(fā)者做參考。即便如此,兩大因素使得J2EE領域充滿了不確定性:開源領域和J2EE“標準”的沖突和AOP的日益重要。

開源和標準之間的沖突表現(xiàn)在兩個方面。一個是表現(xiàn)層,JSF的身后有Sun公司和其他的一些大公司,而在這個領域有Struts等開源產(chǎn)品與之競爭。在中間層,EJB3.0采用J2SE5.0的annotations實現(xiàn)了依賴注入(dependency iniection)的功能,但這個功能只是Spring的一個子集。

在這兩個領域,開源產(chǎn)品都更加革新。JSP借鑒了ASP.NET,而Tapestry則采用了WebObjects的思想。

同樣的,不知道EJB3.0為何要嘗試著標準化依賴注入,即使這樣會使之不可避免地喪失很多功能。EJB 3.0也要進入程序編寫領域,而J2EE規(guī)范在這方面還沒有涉足。

于此同時,AOP的重要性在J2EE社區(qū)猛增,在使用上,AOP也越來越受到開發(fā)者的青睞。像Spring、dynaop等被稱作“帶著雙拐的AOP”實現(xiàn),提升了AOP的知名度。而純粹的AOP技術比如AspectJ,在將來的幾年也會流行起來。

其次,JBoss通過JCP和EJB3.0保持一致,它極大地推動了AOP技術。但即使如此,JCP還沒有轉(zhuǎn)向AOP跡象。

下一代的J2EE規(guī)范將擁抱更簡單的POJ0編程模型,就像Spring和Hibermate做的一樣。J2EE開發(fā)者也注定要從“欺詐客戶”轉(zhuǎn)到以自己的編程經(jīng)驗開發(fā)。這次改變將受到大多數(shù)人的歡迎,不像以前那樣每一個新規(guī)范發(fā)布后,最終都沒有能很好的實現(xiàn)。

責任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16042

    瀏覽量

    176787
  • 接口
    +關注

    關注

    33

    文章

    8381

    瀏覽量

    150583
  • 數(shù)據(jù)

    關注

    8

    文章

    6772

    瀏覽量

    88655
收藏 人收藏

    評論

    相關推薦

    Struts框架技術J2EE的研究和應用

    Struts框架技術J2EE的研究和應用J2EE簡介J2EE是一個開放的、基于標準的平臺,可以開發(fā)、部署和管理N層結構的、面向Web的、以服務器為中心的企業(yè)級應用,它是利用Java
    發(fā)表于 11-13 22:07

    Spring框架的設計理念

    Spring作為現(xiàn)在最優(yōu)秀的框架之一,已被廣泛的使用,51CTO也曾經(jīng)針對Spring框架的hqC應用做過報道。本文將從另外一個視角試圖剖
    發(fā)表于 07-15 08:17

    一文解析Spring框架

    Spring框架詳解 - 03
    發(fā)表于 06-17 17:15

    基于Struts框架和Procedure的Web開發(fā)模式

    介紹基于MVC設計模式的Struts框架的組成和實現(xiàn)原理,總結該開發(fā)框架的應用特點和開發(fā)步驟。分析和比較其他基于Struts開發(fā)模式特點的
    發(fā)表于 04-23 10:16 ?79次下載

    基于Struts框架構建績效考核管理系統(tǒng)

    績效考核管理系統(tǒng)是企業(yè)對員工績效進行量化考核的手段。首先分析了構建系統(tǒng)的目的,然后對基于MVC設計模式的struts框架進行了介紹,通過舉例具體闡明了采用struts
    發(fā)表于 08-12 10:00 ?21次下載

    基于Hibernate與Struts框架的物流管理系統(tǒng)的實現(xiàn)

    基于使用單一框架構建企業(yè)級應用時存在拓展性差,結構復雜的問題,給出使用Struts 結合Hibernate 開源框架進行整合開發(fā)的實例,同時探討如何配置和靈活應用Struts和Hibe
    發(fā)表于 09-12 16:22 ?7次下載

    基于Struts和Hibernate框架的Web應用的設計與

    基于J2EE 平臺的框架技術是目前開發(fā)Web 應用的主流技術。其中,Struts 框架基于MVC 設計模式,清晰地劃分了控制部分、業(yè)務邏輯和視圖,實現(xiàn)了各層之間的解耦;而Hibernate 對JDBC 提供
    發(fā)表于 09-14 16:21 ?32次下載

    基于Struts框架的科技管理系統(tǒng)的設計

    總結傳統(tǒng)B/S架構的科技管理系統(tǒng)存在的許多弊端的基礎上,探討Struts框架的體系結構及實現(xiàn)MVC設計模式的機制,詳細分析科技管理系統(tǒng)的主要功能,并利用Struts
    發(fā)表于 12-29 17:30 ?0次下載

    MVC框架實例—Spring MVC配置

    本文旨在讓您在使用Spring MVC框架配置完成日常工作的時候更加輕松。根據(jù)Spring MVC框架配置,為基于本技術開發(fā)的項目提供一系列
    發(fā)表于 12-14 17:37 ?3164次閱讀

    spring mvc框架介紹

    。使用 Spring 可插入的 MVC 架構,可以選擇是使用內(nèi)置的 Spring Web 框架還是 Struts 這樣的 Web
    發(fā)表于 11-17 16:28 ?2316次閱讀
    <b class='flag-5'>spring</b> mvc<b class='flag-5'>框架</b>介紹

    spring框架定時器使用與配置

    Spring是于2003 年興起的一個輕量級的Java 開發(fā)框架,由Rod Johnson創(chuàng)建。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式)輕量級開源框架
    發(fā)表于 01-26 17:11 ?1720次閱讀

    Java Web開發(fā)教程之Spring框架入門詳細資料免費下載

    SSH框架是目前最為流行的軟件開發(fā)技術,它是由3種技術組成的,除了我們前面講解的Struts和Hibernate外,還包括從本章開始講解的Spring,如圖16.1所示。Spring
    發(fā)表于 09-18 16:56 ?14次下載
    Java Web開發(fā)教程之<b class='flag-5'>Spring</b><b class='flag-5'>框架</b>入門詳細資料免費下載

    Spring認證」Spring 框架概述

    Spring 框架是一個開源的 Java 平臺。它最初由 Rod Johnson 編寫,并于 2003 年 6 月 Apache 2.0 許可下首次發(fā)布。 Spring Framew
    的頭像 發(fā)表于 08-12 15:07 ?632次閱讀
    「<b class='flag-5'>Spring</b>認證」<b class='flag-5'>Spring</b> <b class='flag-5'>框架</b>概述

    Spring框架的簡單介紹及快速入門教程

    開發(fā)者J2EE開發(fā)遇到的許多常見的問題,提供了功能強大IOC、AOP及Web MVC等功能。Spring可以單獨應用于構筑應用程序,也可以和Struts、Webwork、Tapes
    的頭像 發(fā)表于 07-15 14:47 ?1602次閱讀

    Spring Cloud Gateway網(wǎng)關框架

    Spring Cloud Gateway網(wǎng)關框架 本軟件微服務架構采用Spring Cloud Gateway網(wǎng)關控制框架
    的頭像 發(fā)表于 08-22 09:58 ?384次閱讀
    <b class='flag-5'>Spring</b> Cloud Gateway網(wǎng)關<b class='flag-5'>框架</b>