Spring學(xué)習(xí)總結(jié)(19)——Spring概念詳解
來源:程序員人生 發(fā)布時(shí)間:2016-11-17 09:26:12 閱讀次數(shù):3274次
Spring是1個(gè)開源框架,Spring是于2003 年興起的1個(gè)輕量級(jí)的Java 開發(fā)框架,由Rod Johnson創(chuàng)建。簡(jiǎn)單來講,Spring是1個(gè)分層的JavaSE/EEfull-stack(1站式) 輕量級(jí)開源框架。
你可能正在想“Spring不過是另外1個(gè)的framework”。當(dāng)已有許多開放源代碼(和專有)J2EEframework時(shí),我們?yōu)楹芜€需要Spring
Framework?
Spring是獨(dú)特的,由于若干個(gè)緣由:
它定位的領(lǐng)域是許多其他流行的framework沒有的。Spring致力于提供1種方法管理你的業(yè)務(wù)對(duì)象。
Spring是全面的和模塊化的。Spring有分層的體系結(jié)構(gòu),這意味著你能選擇使用它孤立的任何部份,它的架構(gòu)依然是內(nèi)在穩(wěn)定的。因此從你的學(xué)習(xí)中,你可得到最大的價(jià)值。例如,你可能選擇僅僅使用Spring來簡(jiǎn)單化JDBC的使用,或用來管理所有的業(yè)務(wù)對(duì)象。
它的設(shè)計(jì)從底部幫助你編寫易于測(cè)試的代碼。Spring是用于測(cè)試驅(qū)開工程的理想的framework。
Spring對(duì)你的工程來講,它不需要1個(gè)以上的framework。Spring是潛伏地1站式解決方案,定位于與典型利用相干的大部份基礎(chǔ)結(jié)構(gòu)。它也觸及到其他framework沒有斟酌到的內(nèi)容。
背景
Rod Johnson在2002年編著的《Expert
one on one J2EE design and development》1書中,對(duì)Java EE 系統(tǒng)框架臃腫、低效、脫離現(xiàn)實(shí)的種種現(xiàn)狀提出了質(zhì)疑,并積極尋求探索革新
之道。以此書為指點(diǎn)思想,他編寫了interface21框架,這是1個(gè)力圖沖破Java EE傳統(tǒng)開發(fā)的窘境,從實(shí)際需求動(dòng)身,著眼于輕便、靈巧,易于開發(fā)、測(cè)試和部署的輕量級(jí)開發(fā)框架。Spring框架即以interface21框架為基礎(chǔ),經(jīng)太重新設(shè)計(jì),其實(shí)不斷豐富其內(nèi)涵,于2004年3月24日,發(fā)布了1.0正式版。同年他又推出了1部可謂經(jīng)典的力作《Expert one-on-one J2EE Development without EJB》,該書在Java世界掀起了軒然大波,不斷改變著Java開發(fā)者程序設(shè)計(jì)和開發(fā)的思考方式。在該書中,作者根據(jù)自己多年豐富的實(shí)踐經(jīng)驗(yàn),對(duì)EJB的各種笨重臃腫的結(jié)構(gòu)進(jìn)行了逐1的分析和否定,并分別以簡(jiǎn)潔實(shí)用的方式替換之。至此1戰(zhàn)功成,Rod
Johnson成為1個(gè)改變Java世界的大師級(jí)人物。
傳統(tǒng)J2EE利用的開發(fā)效力低,利用服務(wù)器廠商對(duì)各種技術(shù)的支持并沒有真正統(tǒng)1,致使J2EE的利用沒有真正實(shí)現(xiàn)Write
Once及Run Anywhere的許諾。Spring作為開源的中間件,獨(dú)立于各種利用服務(wù)器,乃至不必利用服務(wù)器的支持,也能提供利用服務(wù)器的功能,如聲明式事務(wù)、事務(wù)處理等。
Spring致力于J2EE利用的各層的解決方案,而不是僅僅專注于某1層的方案。可以說Spring是企業(yè)利用開發(fā)的“1站式”選擇,并貫穿表現(xiàn)層、業(yè)務(wù)層及持久層。但是,Spring其實(shí)不想取代那些已有的框架,而是與它們無縫地整合。
框架特點(diǎn)
輕量——從大小與開消兩方面而言Spring都是輕量的。完全的Spring框架可以在1個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開消也是微不足道的。另外,Spring是非侵入式的:典型地,Spring利用中的對(duì)象不依賴于Spring的特定類。
控制反轉(zhuǎn)——Spring通過1種稱作控制反轉(zhuǎn)(IoC)的技術(shù)增進(jìn)了低耦合。當(dāng)利用了IoC,1個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過被動(dòng)的方式傳遞進(jìn)來,而不是這個(gè)對(duì)象自己創(chuàng)建或查找依賴對(duì)象。你可以認(rèn)為IoC與JNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象要求就主動(dòng)將依賴傳遞給它。
面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離利用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開發(fā)。利用對(duì)象只實(shí)現(xiàn)它們應(yīng)當(dāng)做的——完成業(yè)務(wù)邏輯——僅此而已。它們其實(shí)不負(fù)責(zé)(乃至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。
容器——Spring包括并管理利用對(duì)象的配置和生命周期,在這個(gè)意義上它是1種容器,你可以配置你的每一個(gè)bean如何被創(chuàng)建——基于1個(gè)可配置原型(prototype),你的bean可以創(chuàng)建1個(gè)單獨(dú)的實(shí)例或每次需要時(shí)都生成1個(gè)新的實(shí)例——和它們是如何相互關(guān)聯(lián)的。但是,Spring不應(yīng)當(dāng)被混淆于傳統(tǒng)的重量級(jí)的EJB容器,它們常常是龐大與笨重的,難以使用。
框架——Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的利用。在Spring中,利用對(duì)象被聲明式地組合,典型地是在1個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將利用邏輯的開發(fā)留給了你。
MVC——Spring的作用是整合,但不單單限于整合,Spring 框架可以被看作是1個(gè)企業(yè)解決方案級(jí)別的框架。客戶端發(fā)送要求,服務(wù)器控制器(由DispatcherServlet實(shí)現(xiàn)的)完成要求的轉(zhuǎn)發(fā),控制器調(diào)用1個(gè)用于映照的類HandlerMapping,該類用于將要求映照到對(duì)應(yīng)的處理器來處理要求。HandlerMapping
將要求映照到對(duì)應(yīng)的處理器Controller(相當(dāng)于Action)在Spring 當(dāng)中如果寫1些處理器組件,1般實(shí)現(xiàn)Controller 接口,在Controller 中就能夠調(diào)用1些Service 或DAO 來進(jìn)行數(shù)據(jù)操作 ModelAndView 用于寄存從DAO 中取出的數(shù)據(jù),還可以寄存響應(yīng)視圖的1些數(shù)據(jù)。 如果想將處理結(jié)果返回給用戶,那末在Spring 框架中還提供1個(gè)視圖組件ViewResolver,該組件根據(jù)Controller 返回的標(biāo)示,找到對(duì)應(yīng)的視圖,將響應(yīng)response 返回給用戶。
所有Spring的這些特點(diǎn)使你能夠編寫更干凈、更可管理、并且更容易于測(cè)試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。
特性
強(qiáng)大的基于 JavaBeans的采取控制反轉(zhuǎn)(Inversion
of Control,IoC)原則的配置管理,使得利用程序的組件更加快捷簡(jiǎn)易。
1個(gè)可用于從 applet 到 Java EE 等不同運(yùn)行環(huán)境的核心 Bean 工廠。
數(shù)據(jù)庫事務(wù)的1般化抽象層,允許宣布式(Declarative)事務(wù)管理器,簡(jiǎn)化事務(wù)的劃分使之與底層無關(guān)。
內(nèi)建的針對(duì) JTA 和 單個(gè) JDBC 數(shù)據(jù)源的1般化策略,使 Spring 的事務(wù)支持不要求 Java EE 環(huán)境,這與1般的 JTA 或 EJB CMT 相反。
JDBC 抽象層提供了有針對(duì)性的異常等級(jí)(不再從SQL異常中提取原始代碼), 簡(jiǎn)化了毛病處理, 大大減少了程序員的編碼量. 再次利用JDBC時(shí),你無需再寫出另外一個(gè) '終止' (finally) 模塊. 并且面向JDBC的異常與Spring 通用數(shù)據(jù)訪問對(duì)象(Data
Access Object) 異常等級(jí)相1致.
以資源容器,DAO 實(shí)現(xiàn)和事務(wù)策略等情勢(shì)與 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用眾多的反轉(zhuǎn)控制方便特性來全面支持, 解決了許多典型的Hibernate集成問題. 所有這些全部遵從Spring通用事務(wù)處理和通用數(shù)據(jù)訪問對(duì)象異常等級(jí)規(guī)范.
靈活的基于核心 Spring 功能的 MVC 網(wǎng)頁利用程序框架。開發(fā)者通過策略接口將具有對(duì)該框架的高度控制,因此該框架將適應(yīng)于多種顯現(xiàn)(View)技術(shù),例如 JSP,F(xiàn)reeMarker,Velocity,Tiles,iText 和 POI。值得注意的是,Spring
中間層可以輕易地結(jié)合于任何基于 MVC 框架的網(wǎng)頁層,例如 Struts,WebWork,或 Tapestry。
提供諸如事務(wù)管理等服務(wù)的面向切面編程(AOP)框架。[1]
特點(diǎn)
1.方便解耦,簡(jiǎn)化開發(fā)
通過Spring提供的IoC容器,我們可以將對(duì)象之間的依賴關(guān)系交由Spring進(jìn)行控制,避免硬編碼所釀成的過度程序耦合。有了Spring,用戶沒必要再為單實(shí)例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專注于上層的利用。
2.AOP編程的支持
通過Spring提供的AOP功能,方便進(jìn)行面向切面的編程,許多不容易用傳統(tǒng)OOP實(shí)現(xiàn)的功能可以通過AOP輕松應(yīng)付。
3.聲明式事務(wù)的支持
在Spring中,我們可以從單調(diào)煩悶的事務(wù)管理代碼中擺脫出來,通過聲明式方式靈活地進(jìn)行事務(wù)的管理,提高開發(fā)效力和質(zhì)量。
4.方便程序的測(cè)試
可以用非容器依賴的編程方式進(jìn)行幾近所有的測(cè)試工作,在Spring里,測(cè)試不再是昂貴的操作,而是隨手可做的事情。例如:Spring對(duì)Junit4支持,可以通過注解方便的測(cè)試Spring程序。
5.方便集成各種優(yōu)秀框架
Spring不排擠各種優(yōu)秀的開源框架,相反,Spring可以下降各種框架的使用難度,Spring提供了對(duì)各種優(yōu)秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
6.下降Java EE API的使用難度
Spring對(duì)很多難用的Java EE API(如JDBC,JavaMail,遠(yuǎn)程調(diào)用等)提供了1個(gè)薄薄的封裝層,通過Spring的簡(jiǎn)易封裝,這些Java EE API的使用難度大為下降。
7.Java 源碼是經(jīng)典學(xué)習(xí)范例
Spring的源碼設(shè)計(jì)精巧、結(jié)構(gòu)清晰、獨(dú)具匠心,處處體現(xiàn)著大師對(duì)Java設(shè)計(jì)模式靈活應(yīng)用和對(duì)Java技術(shù)的精深成就。Spring框架源碼無疑是Java技術(shù)的最好實(shí)踐范例。如果想在短時(shí)間內(nèi)迅速提高自己的Java技術(shù)水平和利用開發(fā)水平,學(xué)習(xí)和研究Spring源碼將會(huì)使你收到意想不到的效果。
好處
在我們進(jìn)入細(xì)節(jié)之前,讓我們看1下Spring可以給1個(gè)工程帶來的1些好處:
Spring能有效地組織你的中間層對(duì)象,不管你是不是選擇使用了EJB。如果你僅僅使用了Struts或其他的包括了J2EE特有APIs的framework,你會(huì)發(fā)現(xiàn)Spring關(guān)注了遺留下的問題。Spring能消除在許多工程上對(duì)Singleton的過量使用。根據(jù)我的經(jīng)驗(yàn),這是1個(gè)主要的問題,它減少了系統(tǒng)的可測(cè)試性和面向?qū)ο筇匦浴?/strong>
Spring能消除使用各種各樣格式的屬性定制文件的需要,在全部利用和工程中,可通過1種1致的方法來進(jìn)行配置。曾感到迷惑,1個(gè)特定類要查找迷幻般的屬性關(guān)鍵字或系統(tǒng)屬性,為此不能不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡(jiǎn)單地看到類的JavaBean屬性。顛倒控制的使用(在下面討論)幫助完成這類簡(jiǎn)化。
Spring能通過接口而不是類增進(jìn)好的編程習(xí)慣,減少編程代價(jià)到幾近為零。
Spring被設(shè)計(jì)為讓使用它創(chuàng)建的利用盡量少的依賴于他的APIs。在Spring利用中的大多數(shù)業(yè)務(wù)對(duì)象沒有依賴于Spring。
使用Spring構(gòu)建的利用程序易于單元測(cè)試。
Spring能使EJB的使用成為1個(gè)實(shí)現(xiàn)選擇,而不是利用架構(gòu)的必定選擇。你能選擇用POJOs或local EJBs來實(shí)現(xiàn)業(yè)務(wù)接口,卻不會(huì)影響調(diào)用代碼。
Spring幫助你解決許多問題而無需使用EJB。Spring能提供1種EJB的替換物,它們適于許多web利用。例如,Spring能使用AOP提供聲明性事務(wù)而不通過使用EJB容器,如果你僅僅需要與單個(gè)的數(shù)據(jù)庫打交道,乃至不需要JTA實(shí)現(xiàn)。
Spring為數(shù)據(jù)存取提供了1致的框架,不論是使用JDBC或O/R mapping產(chǎn)品(如Hibernate)。
Spring確切使你能通過最簡(jiǎn)單可行的解決辦法解決你的問題。這些特性是有很大價(jià)值的。
總結(jié)起來,Spring有以下優(yōu)點(diǎn):
1.低侵入式設(shè)計(jì),代碼污染極低
2.獨(dú)立于各種利用服務(wù)器,基于Spring框架的利用,可以真正實(shí)現(xiàn)Write
Once,Run Anywhere的許諾
3.Spring的DI機(jī)制下降了業(yè)務(wù)對(duì)象替換的復(fù)雜性,提高了組件之間的解耦
4.Spring的AOP支持允許將1些通用任務(wù)如安全、事務(wù)、日志等進(jìn)行集中式管理,從而提供了更好的復(fù)用
5.Spring的ORM和DAO提供了與第3方持久層框架的良好整合,并簡(jiǎn)化了底層的數(shù)據(jù)庫訪問
6.Spring其實(shí)不強(qiáng)迫利用完全依賴于Spring,開發(fā)者可自由選用Spring框架的部份或全部
作用
Spring提供許多功能,在此我將快速地順次展現(xiàn)其各個(gè)主要方面。
首先,讓我們明確Spring范圍。雖然Spring覆蓋了許多方面,但我們已有清楚的概念,它甚么應(yīng)當(dāng)觸及和甚么不應(yīng)當(dāng)觸及。
Spring的主要目的是使JavaEE易用和增進(jìn)好編程習(xí)慣。
Spring不重新開發(fā)已有的東西。因此,在Spring中你將發(fā)現(xiàn)沒有日志記錄的包,沒有連接池,沒有散布事務(wù)調(diào)度。這些均有開源項(xiàng)目提供(例如Commons
Logging 用來做所有的日志輸出,或Commons DBCP用來作數(shù)據(jù)連接池),或由你的利用程序服務(wù)器提供。由于一樣的的緣由,我們沒有提供O/R mapping層,對(duì)此,已有友好的解決辦法如Hibernate和JDO。Spring的目標(biāo)是使已存在的技術(shù)更加易用。
例如,雖然我們沒有底層事務(wù)調(diào)和處理,但我們提供了1個(gè)抽象層覆蓋了JTA或任何其他的事務(wù)策略。
Spring沒有直接和其他的開源項(xiàng)目競(jìng)爭(zhēng),除非我們感到我們能提供新的1些東西。例如,像許多開發(fā)人員,我們歷來沒有為Struts高興過,并且感到在MVC web framework中還有改進(jìn)的余地。在某些領(lǐng)域,例如輕量級(jí)的IoC容器和AOP框架,Spring有直接的競(jìng)爭(zhēng),但是在這些領(lǐng)域還沒有已較為流行的解決方案。(Spring在這些區(qū)域是開路先鋒。)
Spring也得益于內(nèi)在的1致性。
所有的開發(fā)者都在唱一樣的的贊歌,基礎(chǔ)想法仍然是Expert One-on-One J2EE設(shè)計(jì)與開發(fā)的那些。
并且我們已能夠使用1些主要的概念,例如顛倒控制,來處理多個(gè)領(lǐng)域。
固然保證可移植性總是1次挑戰(zhàn),但是我們避免任何特定平臺(tái)或非標(biāo)準(zhǔn)化,并且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其他的利用服務(wù)器上的用戶。
基本框架
Spring 框架是1個(gè)分層架構(gòu),由 7 個(gè)定義良好的模塊組成。Spring
模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理 bean 的方式,如圖所示:
組成Spring框架的每一個(gè)模塊(或組件)都可以單獨(dú)存在,或與其他1個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每一個(gè)模塊的功能以下:
1、核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要組件是 BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory
使用控制反轉(zhuǎn)(IOC) 模式將利用程序的配置和依賴性規(guī)范與實(shí)際的利用程序代碼分開。
2、Spring 上下文:Spring 上下文是1個(gè)配置文件,向
Spring框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國際化、校驗(yàn)和調(diào)度功能。
3、Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對(duì)象支持AOP。Spring
AOP 模塊為基于 Spring 的利用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過使用 Spring AOP,不用依賴 EJB 組件,就能夠?qū)⒙暶餍允聞?wù)管理集成到利用程序中。
4、Spring DAO:JDBCDAO抽象層提供了成心義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的毛病消息。異常層次結(jié)構(gòu)簡(jiǎn)化了毛病處理,并且極大地下降了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。Spring
DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)。
5、Spring ORM:Spring 框架插入了若干個(gè)ORM框架,從而提供了
ORM 的對(duì)象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQL
Map。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)。
6、Spring Web 模塊:Web 上下文模塊建立在利用程序上下文模塊之上,為基于 Web 的利用程序提供了上下文。所以,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還簡(jiǎn)化了處理多部份要求和將要求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/strong>
7、Spring MVC 框架:MVC框架是1個(gè)全功能的構(gòu)建
Web利用程序的 MVC 實(shí)現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC 容納了大量視圖技術(shù),其中包括 JSP、Velocity、Tiles、iText
和 POI。模型由javabean構(gòu)成,寄存于Map;視圖是1個(gè)接口,負(fù)責(zé)顯示模型;控制器表示邏輯代碼,是Controller的實(shí)現(xiàn)。Spring框架的功能可以用在任何J2EE服務(wù)器中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring
的核心要點(diǎn)是:支持不綁定到特定 J2EE服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問對(duì)象。毫無疑問,這樣的對(duì)象可以在不同J2EE 環(huán)境(Web 或EJB)、獨(dú)立利用程序、測(cè)試環(huán)境之間重用。
下載安裝
下載和安裝Spring請(qǐng)按以下步驟進(jìn)行。
(1)登錄站點(diǎn),下載Spring的最新穩(wěn)定版本。最新版本為spring-framework⑷.0.建議下載spring-framework-spring-framework⑷.0.0.M2-dist這個(gè)緊縮包不但包括Spring的開發(fā)包,而且包括Spring編譯和運(yùn)行所依賴的第3方類庫。
解緊縮下載到的緊縮包,解緊縮后的文件夾利用以下幾個(gè)文件夾。
dist:該文件夾下放Spring的jar包,通常只需要Spring.jar文件便可。該文件夾下還有1些類似spring-Xxx.jar的緊縮包, 這些緊縮包是spring.jar緊縮包的子模塊緊縮包。除非肯定全部J2EE利用只需要使用Spring的某1方面時(shí),才斟酌使用這類分模塊緊縮包。通常建議使用Spring.jar
docs:該文件夾下包括spring的相干文檔、開發(fā)指南及API參考文檔。
lib:該文件夾下包括spring編譯和運(yùn)行所依賴的第3方類庫,該路徑下的類庫其實(shí)不是spring必須的,但如果需要使用第3方類庫的支持,這里的類庫就是必須要的。
samples:該文件夾下包括Spring的幾個(gè)簡(jiǎn)單例子,可作為Spring入門學(xué)習(xí)的案例。
src:該文件夾下包括Spring的全部源文件,如果開發(fā)進(jìn)程中有地方?jīng)]法掌控,可以參考該源文件,了解底層實(shí)現(xiàn)。
test:該文件夾下包括Spring的測(cè)試示例。
tiger:該路徑下寄存關(guān)于JDK的相干內(nèi)容
解緊縮后的文件夾下,還包括1些關(guān)于Spring的License和項(xiàng)目相干文件
(2)將spring.jar復(fù)制到項(xiàng)目的CLASSPATH路徑下,對(duì)Web利用,將spring.jar文件復(fù)制到WEB-INF/lib路徑下,該利用便可以利用Spring框架了。
(3)通常Spring的框架還依賴于其他1些jar文件,因此還須將lib下對(duì)應(yīng)的包復(fù)制到WEB-INF/lib路徑下,具體要復(fù)制哪些jar文件,取決于利用所需要使用的項(xiàng)目。通常需要復(fù)制cglib,dom4j,jakarta-commons,log4j等文件夾下的jar文件。
(4)為了編譯java文件,可以找到Spring的基礎(chǔ)類,將Spring.jar文件的路徑添加到環(huán)境變量CLASSPATH中。固然,也能夠使用ANT工具,但不必添加環(huán)境變量。如果使用Eclipse或NetBeans等IDE時(shí),也不需要設(shè)置環(huán)境變量。
Spring MVC
傳統(tǒng)的web架構(gòu)的view 表現(xiàn)層使用struts作為表現(xiàn)層。但是如果試用下spring自帶的MVC,會(huì)發(fā)現(xiàn)spring 在1般場(chǎng)合完全可以取代struts。從某些角度來講,spring的mvc設(shè)計(jì)的更加公道,有興趣的話無妨嘗試下單個(gè)的spring的MVC。
利用實(shí)例
-
新建1個(gè)登陸頁面:loginActionSupport.jsp,代碼以下
<%@page contentType="text/html;charset=GBK" isELIgnored="false"%>
<html>
<head><title>;實(shí)現(xiàn)用戶登錄實(shí)例,struts和Spring整合</title></head>
<body>
<font size=’22’> $<br> </font>
<form name="form1" action="/myLogin/loginActionSupportdo" method="post">
用戶名:<input type="text" name="username" value="${user.username}"/><br>
密碼:<input type="password" name="password" value="${user.password}"/><br>
<input type="submit" name=”method” value="提交"/>
</form>
</body>
</html>
2.創(chuàng)建1個(gè)存儲(chǔ)登陸用戶信息的類:User.java該類繼承于ActionForm,代碼以下:
package com.zhaosoft.bean;
import org.apache.struts.action.ActionForm;
public class User extends ActionForm{
private String username=null;
private String password=null;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;}
public void setPassword(String password) {
this.password = password;
}
}
3.Com.zhaosoft.action中新建1個(gè)LoginActionSupport.java,該類不繼承于struts的Action,而是繼承于Spring的ActionSupport,代碼示例以下:
package com.zhaosoft.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.context.ApplicationContext;
import org.springframework.web.struts.ActionSupport;
import com.zhaosoft.bean.User;
import com.zhaosoft.domain.Login;
public class LoginActionSupport extends ActionSupport {
public ActionForward execute(ActionMapping mapping,ActionFormform,
HttpServletRequest request,HttpServletResponse response)
throws Exception {
// 通過ApplicationContext獲得配置文件
ApplicationContext ctx = getWebApplicationContext();
Login login = (Login) ctx.getBean("login");
login.login((User) form);
request.setAttribute("msg",login.getMsg());
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)