這篇文章給大家介紹如何學(xué)習(xí)struts的新版本,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計,網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),微信小程序開發(fā),十余年建站對成都柴油發(fā)電機(jī)等多個行業(yè),擁有豐富的網(wǎng)站設(shè)計經(jīng)驗。
首先需要說明的是:在web開發(fā)中***不要濫用struts標(biāo)簽——能用html標(biāo)簽的就盡量使用html標(biāo)簽,比如一些最基本的頁面對象如button,radio,label,text,textarea,table,form,select,submit等等;除非一些html標(biāo)簽做不了的事情,例如進(jìn)行邏輯判斷、 遍歷、比較等等,才需要使用struts標(biāo)簽。另外,向視圖中填充數(shù)據(jù),也必須要使用struts標(biāo)簽,例如:< bean:write name="" property="" />(這是struts1.x版本中的標(biāo)簽,不知道struts2.x中是什么?)。
這樣,如果需要由struts1.x版本遷移至struts2.x版本時,頁面中就無需進(jìn)行大幅度修改了。而事實上,我開發(fā)這么多網(wǎng)站,還沒有發(fā)現(xiàn)html標(biāo)簽干不了的事情(當(dāng)然除去一些需要后臺進(jìn)行邏輯處理的事情,但只要是單純用于顯示,html標(biāo)簽皆足以勝任?。?。
這樣的觀點對于struts的學(xué)習(xí)也有一定的指導(dǎo)意義:struts更新?lián)Q代的速度也挺快的,如果我們什么都要學(xué),那豈不是整天要關(guān)注它?因此,對于struts的學(xué)習(xí),只需關(guān)注如下5個方面即可:
(1)標(biāo)簽庫的學(xué)習(xí):如上所言,struts標(biāo)簽庫中的標(biāo)簽也有好幾十個,我們沒必要去一個一個的學(xué),只需要學(xué)習(xí)一下需要服務(wù)器(或所謂的后臺)進(jìn)行邏輯處理的struts標(biāo)簽即可,而對于那些由瀏覽器(即所謂的前臺)便可以直接解釋的標(biāo)簽,例如button,text,font,table,radio,form,select……,能不用struts標(biāo)簽代替,就***別用它。這樣,struts標(biāo)簽的學(xué)習(xí)就可以少去4/5的學(xué)習(xí)量!
(2)Action類的學(xué)習(xí):Action一直是struts框架的核心,它負(fù)責(zé)頁面呈現(xiàn),因此需要與中間件打交道,也因此,它是連接struts框架與其他各層的樞紐。有了struts1.x的基礎(chǔ),學(xué)習(xí)struts2.x的Action,會很容易掌握。因此,對于有struts基礎(chǔ)的programer而言,這一部分的學(xué)習(xí)相當(dāng)容易,稍微一看就明白。
需要注意的是:如果直接學(xué)習(xí)struts2.x,也許不知道struts1.x中的formbean組件。建議還是盡量了解一下這些,這樣有助于更深入地理解struts框架的工作原理。
(3)struts-config.xml配置文件:這是struts核心之核心——控制器。頁面跳轉(zhuǎn)、視圖數(shù)據(jù)傳遞都靠它來控制和指揮。struts1.x中,需要重點理解< form-beans>和< action-mapping> 的原理,同時會使用全局轉(zhuǎn)發(fā),就OK了!但struts2.x中,由于視圖數(shù)據(jù)都被封裝在了action中,因此我不知道它需要怎樣的配置。但只要掌握了struts1.x的配置,struts2.x的也不是問題,稍微一看就明白。
(4)struts與spring的協(xié)作:似乎struts2.x中內(nèi)置了Ioc,但就如同其發(fā)布者所言一樣:能用spring實現(xiàn)Ioc的,就盡量使用spring。因此,無論struts怎樣更新?lián)Q代,spring必須要掌握。
(5)struts與hibernate的協(xié)作:作為經(jīng)典的SSH組合,使用了struts和spring,怎能丟下hibernate呢?只要以前配置過hibernate的programer們,無論struts怎樣升級怎樣變相,hibernate的配置幾乎都大同小異的,不會因為struts的變化就會變難。
綜上,實際上在學(xué)習(xí)新版本的struts時,我們只需了解一下其標(biāo)簽庫、Action和配置,而標(biāo)簽庫中需要了解的也僅僅是寥寥幾個帶有邏輯功能的標(biāo)簽便已足夠了。當(dāng)然,如果你徹底放棄HTML,非要使用struts標(biāo)簽,那就多花點時間去看一下。
struts2.0與struts1.x的區(qū)別
不過,除了上面三個最核心最基本的需要掌握,對于struts的新版本,還需要了解一些別的改進(jìn),以下的內(nèi)容是我從網(wǎng)上找來的,它對struts2.0于struts1.x作了一些比較,看一看,便會了解struts為什么要升級了(無非就是使它更完善):
一.Struts2 的簡介
** 雖然 struts2 號稱是一個全新的框架,但是這僅僅是相對于 struts1 而言的.
** Struts2 和 struts1 相比,確實有很多革命性的改進(jìn),但是并不是新發(fā)布的新框架.二是另一個框架 WebWork 基礎(chǔ)上發(fā)展起來的.
** Struts2 沒有繼承 struts1 的血統(tǒng),而是繼承 webWork 的血統(tǒng).
** struts2是 WebWork 的升級,而不是一個全新的框架,穩(wěn)定性和性能等各方面都有很好的保證
** 而且吸收了 struts1 和 WebWork 兩者的優(yōu)勢,因此是一個非常值得期待的框架
二. Apache Struts2 是一個可擴(kuò)展的 Java EE WEB框架:框架設(shè)計的目標(biāo)貫穿整個開發(fā)的周期
三. Struts2 和 Struts1 的不同
** Action類:
- Struts1 要求 Action 類繼承一個抽象基類. Struts1 的一個普遍的問題是使用抽象類編程而不是接口
- Struts2 Action 類可以實現(xiàn)一個 Action 接口,也可實現(xiàn)其他的接口,使可選和定制的服務(wù)稱為可能.
- Struts2 提供了一個 ActionSupport 基類去實現(xiàn)常用的接口; Action接口不是必須的,任何有 execute 標(biāo)識的POJO
對象都可以用作 Struts2 的 Action 對象
** 線程模式:
- Struts1 Action 是單例的模式并且必須是線程安全的,因為僅有 Action 的一個實例來處理所有的請求.單例的策略限制了
Struts1 Action 能做的事情,并且要在開發(fā)的時候特別的小心. Action 資源必須是線程安全或者同步的
- Struts2 Action 對象為每一個請求產(chǎn)生一個實例,因此沒有線程安全的問題
** Servlet依賴:
- Struts1 Action 依賴于 Servlet API,因為當(dāng)一個Action被調(diào)用 HttpServletRequest 和 HttpServletResponse 被傳遞給 execute() 方法
- Struts2 Action 不依賴于容器,允許 Action 脫離容器單獨的被測試.如果需要的話 Struts2 Action 仍然可以訪問初始的 request 和 response
但是,其他的元素減少或者消除了直接訪問 HttpServletRequest 和 HttpServletResponse 的必要性
** 可測性:
- Struts1 Action 測試的一個主要的問題是 execute 方法暴露了 Servlet API (使得測試要依賴容器).一個第三方的擴(kuò)展
Struts TestCase -- 提供了一套 Struts1 的模擬對象 (來進(jìn)行測試)
- Struts2 Action 可以通過初始化, 設(shè)置屬性,調(diào)用方法來測試 "依賴注入" 支持也使得測試更加的容易
** 捕獲輸入:
- Struts1 Action 使用ActionForm對象來捕獲輸入.所有的 ActionForm 必須繼承一個基類.因為其他的JavaBean 不能用作
ActionForm ,開發(fā)者經(jīng)常創(chuàng)建多余的類捕獲輸入.動態(tài)的 Bean (DynaBeans) 可以作為創(chuàng)建傳統(tǒng)的ActionForm選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經(jīng)存在的 JavaBean 會導(dǎo)致冗余的 JavaBean)
- Struts2 Action 直接使用 Action 屬性作為輸入的屬性,消除了對第二個輸入對象的需求. Action 屬性能夠通過web頁面上的
taglibs 訪問. Struts2 也支持 ActionForm 模式
** 表達(dá)式語言:
- Struts1 整合了 JSTL ,因此使用 JSTL EL .這種EL 的基本的對象圖遍歷,但是對集合和索引屬性的支持很弱
- Struts2 可以使用 JSTL ,但是也支持一個更強(qiáng)大的和靈活的表達(dá)式語言 -- "Object Graph Notation Language" (OGNL)
** 綁定值到頁面 (view) :
- Struts1 使用標(biāo)準(zhǔn) JSP 機(jī)制把對象綁定到頁面來訪問
- Struts2 使用 "ValueStack" 技術(shù),使 taglib 能夠訪問值而不需要把你的頁面 (view) 和對象綁定起來
ValueStack 策略允許通過一些列的名稱相同但是類型不同的屬性重用頁面 (view)
** 類型的轉(zhuǎn)換 :
- Struts1 ActionForm 屬性通常都是 String 類型的. Struts1使用 Commons-Beanutils 進(jìn)行類型的轉(zhuǎn)換
每個類一個轉(zhuǎn)換器,對每一個實例來說是不可配置的
- Struts2 使用OGNL 進(jìn)行類型的轉(zhuǎn)換. 提供基本的和常用的對象的轉(zhuǎn)換器
** 校驗 :
- Struts1 支持在 ActioNForm 的 validate 方法中手動的校驗,或者通過 Commons Validator 的擴(kuò)展來校驗.
同一個類可以有不同的校驗內(nèi)容,但不能校驗子對象
- Struts2 支持通過 validate 方法和 XWork 校驗框架來進(jìn)行校驗. XWork 校驗框架使用為屬性類類型定義的校驗和內(nèi)容校驗來支持 chain 校驗子屬性
** Action 執(zhí)行的控制 :
- Struts1 支持每一個模塊有單獨的 Request Processors (生命周期);但是模塊中的所有的 Action 必須功效那個相同的生命周期
- Struts2 支持通過攔截器堆棧 (Interceptor Stacks) 為每一個 Action 創(chuàng)建不同的生命周期.
堆棧能夠根據(jù)需要和不同的 Action 一起使用
在項目中導(dǎo)入struts框架:
接下來,還需要知道在eclipse(myeclipse)中怎樣導(dǎo)入struts包,以下的內(nèi)容也是我從網(wǎng)上拷下來的導(dǎo)入struts2.0的方法:
** commons-logging-1.0.4.jar :Struts2框架的日志包
** freemarker-2.3.8.jar: Struts2的 UI 標(biāo)簽的模板
** ognl-2.6.11.jar :對象導(dǎo)航語言包
** struts2-core.2.0.11.jar: Struts框架的核心包
** xwork-2.0.4.jar: XWork類庫,Struts2 基于此構(gòu)建
通過做一個簡單的項目來學(xué)會使用新版本的struts
學(xué)習(xí)了上面這些,都已經(jīng)理解了,但是***通過一個項目實戰(zhàn)來加深一下印象,說不定在項目中你會有新發(fā)現(xiàn)!這個項目是:基于 Struts2 創(chuàng)建一個簡單的登陸項目:
1:導(dǎo)入 Struts2 核心支持包
2:在 web.xml 中配置 FilterDispatcher
3:編寫前臺顯示的頁面
4:開發(fā) DAO
5:開發(fā)action
6:創(chuàng)建 struts.xml
搭建開發(fā)平臺
當(dāng)然,在開發(fā)這個項目之前,還需要搭建一個開發(fā)平臺:
1:安裝JDK(***是綠色版本 ),創(chuàng)建環(huán)境變量;
2:安裝tomcat(***是綠色版本),創(chuàng)建環(huán)境變量;
3:安裝eclipse或者myeclipse;如果安裝前者,還需要下載一個tomcat-plugin和lomboz-plugin;而后者不需要;
4:回到上面項目***步——導(dǎo)入struts核心包(注意:如果安裝的是myeclipse,切不要被其所謂的內(nèi)置了struts包所忽悠!在開發(fā)項目時,如果視圖層使用struts框架的,必須在項目的WEB-INF/lib/目錄下導(dǎo)入該有的struts包)
關(guān)于如何學(xué)習(xí)struts的新版本就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。