熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

名詞解釋 什麼是Struts?

2022-06-13   來源: Java開源技術 

  框架(Framework)是可重用的半完成的應用程序可以用來產生專門的定制程序

  您只要細心地研究真實的應用程序就會發現程序大致上由兩類性質不同的組件組成一類與程序要處理的具體事務密切相關我們不妨把它們叫做業務組件另一類是應用服務比如說一個稅務征管系統和一個圖書管理系統會在處理它們的業務方面存在很大的差異這些直接處理業務的組件由於業務性質的不同不大可能在不同的系統中重用而另一些組件如決定程序流向的控制輸入的校驗錯誤處理及標簽庫等這些只與程序相關的組件在不同的系統中可以很好地得到重用人們自然會想要是把這些在不同應用程序中有共性的一些東西抽取出來做成一個半成品程序這樣的半成品就是所謂的程序框架再做一個新的東西時就不必白手起家而是可以在這個基礎上開始搭建實際上有些大型軟件企業選擇自己搭建這樣的框架但大多數中小型軟件企業或者其他組織沒有條件自己建立框架

  Struts作為一個開放原代碼的應用框架在最近幾年得到了飛速的發展在JSP Web應用開發中應用得非常廣泛有的文獻上說它已經成為JSP Web應用框架的事實上的標准那麼究竟什麼是Struts呢?

  要回答這個問題還得從JSP Web應用的兩種基本的結構模式Model 和Model 說起為了給讀者一些實實在在的幫助並力圖讓學習曲線變得平坦一些我想采用實例驅動的方法來逐步深入地回答有關問題因為學一門技術的最好方法莫過於在實踐中學習在實踐中體會逐步加深對其精神實質的理解和把握而不是一上來就引入一大堆新概念讓大家覺得無所適從或者死記硬背一大堆概念而面對一個真正的實際需求束手無策正如一個人即使在書本上學成了游泳博士只要他不下水我想他也是不大可能真正會游泳的

  Model 結構如圖所示

  

  圖

  mode 是一個以JSP文件為中心的模式在這種模式中JSP頁面不僅負責表現邏輯也負責控制邏輯專業書籍上稱之為邏輯耦合在頁面中這種處理方式對一些規模很小的項目如一個簡單的留言簿也沒什麼太大的壞處實際上人們開始接觸一些對自己來說是新的東西的時候比如用JSP訪問數據庫時往往喜歡別人能提供一個包含這一切的單個JSP頁面因為這樣在一個頁面上他就可以把握全局便於理解但是用Model 模式開發大型時程序流向由一些互相能夠感知的頁面決定當頁面很多時要清楚地把握其流向將是很復雜的事情當您修改一頁時可能會影響相關的很多頁面大有牽一發而動全身的感覺使得程序的修改與維護變得異常困難還有一個問題就是程序邏輯開發與頁面設計糾纏在一起既不便於分工合作也不利於代碼的重用這樣的程序其健壯性和可伸縮性都不好

  Grady Booch等人在UML用戶指南一書中強調建模的重要性時打了一個制作狗窩私人住宅和大廈的形象比喻來說明人們處理不同規模的事物時應該采用的合理方法一樣人們對不同規模的應用程序也應該采用不同的模式

  為了克服Model 的缺陷人們引入了Model 如圖所示

  

  圖

  它引入了控制器這個概念控制器一般由servlet來擔任客戶端的請求不再直接送給一個處理業務邏輯的JSP頁面而是送給這個控制器再由控制器根據具體的請求調用不同的事務邏輯並將處理結果返回到合適的頁面因此這個servlet控制器為應用程序提供了一個進行前後端處理的中樞一方面為輸入數據的驗證身份認證日志及實現國際化編程提供了一個合適的切入點另一方面也提供了將業務邏輯從JSP文件剝離的可能業務邏輯從JSP頁面分離後JSP文件蛻變成一個單純完成顯示任務的東西這就是常說的View而獨立出來的事務邏輯變成人們常說的Model再加上控制器Control本身就構成了MVC模式實踐證明MVC模式為大型程序的開發及維護提供了巨大的便利

  其實MVC開始並不是為Web應用程序提出的模式傳統的MVC要求M將其狀態變化通報給V但由於Web浏覽器工作在典型的拉模式而非推模式很難做到這一點因此有些人又將用於Web應用的MVC稱之為MVC正如上面所提到的MVC是一種模式當然可以有各種不同的具體實現包括您自己就可以實現一個體現MVC思想的程序框架Struts就是一種具體實現MVC的程序框架它的大致結構如圖三所示

  

  圖三

  圖三基本勾勒出了一個基於Struts的應用程序的結構從左到右分別是其表示層(view)控制層(controller)和模型層(Model)其表示層使用Struts標簽庫構建來自客戶的所有需要通過框架的請求統一由叫ActionServlet的servlet接收(ActionServlet Struts已經為我們寫好了只要您應用沒有什麼特別的要求它基本上都能滿足您的要求)根據接收的請求參數和Struts配置(strutsconfigxml)中ActionMapping將請求送給合適的Action去處理解決由誰做的問題它們共同構成Struts的控制器Action則是Struts應用中真正干活的組件開發人員一般都要在這裡耗費大量的時間它解決的是做什麼的問題它通過調用需要的業務組件(模型)來完成應用的業務業務組件解決的是如何做的問題並將執行的結果返回一個代表所需的描繪響應的JSP(或Action)的ActionForward對象給ActionServlet以將響應呈現給客戶

  過程如圖四所示

  

  這裡要特別說明一下的是就是Action這個類上面已經說到了它是Struts中真正干活的地方也是值得我們高度關注的地方可是關於它到底是屬於控制層還是屬於模型層存在兩種不同的意見一種認為它屬於模型層《JSP Web編程指南》另一些則認為它屬於控制層如《Programming Jakarta Struts》《Mastering Jakarta Struts》和《Struts Kick Start》等認為它是控制器的一部分還有其他一些書如《Struts in Action》也建議要避免將業務邏輯放在Action類中也就是說中Action後的括號中的內容應該從中移出但實際中確有一些系統將比較簡單的且不打算重用的業務邏輯放在Action中所以在圖中還是這樣表示顯然將業務對象從Action分離出來後有利於它的重用同時也增強了應用程序的健壯性和設計的靈活性因此它實際上可以看作是Controller與Model的適配器如果硬要把它歸於那一部分筆者更傾向於後一種看法即它是Controller的一部分換句話說它不應該包含過多的業務邏輯而應該只是簡單地收集業務方法所需要的數據並傳遞給業務對象實際上它的主要職責是

  校驗前提條件或者聲明

  調用需要的業務邏輯方法

  檢測或處理其他錯誤

  路由控制到相關視圖

  上面這樣簡單的描述初學者可能會感到有些難以接受下面舉個比較具體的例子來進一步幫助我們理解假設我們做的是個電子商務程序現在程序要完成的操作任務是提交定單並返回定單號給客戶這就是關於做什麼的問題應該由Action類完成但具體怎麼獲得數據庫連接插入定單數據到數據庫表中又怎麼從數據庫表中取得這個定單號(一般是自增數據列的數據)這一系列復雜的問題這都是解決怎麼做的問題則應該由一個(假設名為orderBo)業務對象即Model來完成orderBo可能用一個返回整型值的名為submitOrder的方法來做這件事Action則是先校驗定單數據是否正確以免常說的垃圾進垃圾出如果正確則簡單地調用orderBo的submitOrder方法來得到定單號它還要處理在調用過程中可能出現任何錯誤最後根據不同的情況返回不同的結果給客戶

  二為什麼要使用Struts框架

  既然本文的開始就說了自己可以建這種框架為什麼要使用Struts呢?我想下面列舉的這些理由是顯而易見的首先它是建立在MVC這種公認的好的模式上的Struts在MV和C上都有涉及但它主要是提供一個好的控制器和一套定制的標簽庫上也就是說它的著力點在C和V上因此它天生就有MVC所帶來的一系列優點結構層次分明高可重用性增加了程序的健壯性和可伸縮性便於開發與設計分工提供集中統一的權限控制校驗國際化日志等等其次它是個開源項目得到了包括它的發明者Craig RMcClanahan在內的一些程序大師和高手持續而細心的呵護並且經受了實戰的檢驗使其功能越來越強大體系也日臻完善最後是它對其他技術和框架顯示出很好的融合性現在它已經與tiles融為一體可以展望它很快就會與JSF等融會在一起當然和其他任何技術一樣它也不是十全十美的它對類和一些屬性參數的命名顯得有些隨意給使用帶來一些不便還有如Action類execute方法的只能接收一個ActionForm參數等但瑕不掩瑜這些沒有影響它被廣泛使用

  三Struts的安裝與基本配置

  我們主要針對Struts版本進行講解這裡假定讀者已經配置好java運行環境和相應的Web容器本文例子所使用的是jsdk和Tomcat下面將采用類似於step by step的方式介紹其基礎部分

  安裝Struts

  到 下載Struts的安裝文件本文例子使用的是

  接下來您要進行如下幾個步驟來完成安裝

  解壓下載的安裝文件到您的本地硬盤

  生成一個新的Web應用假設我們生成的應用程序的根目錄在/Webapps/mystruts目錄在serverxml文件中為該應用新建一個別名如/mystruts

  從第步解壓的文件中拷貝下列jar文件到/Webapps/mystruts/WEBINF/lib目錄主要文件有如下一些

  

  quote: strutsjar commons-beanutilsjar commons-collectionsjar commons-dbcpjar commons-digesterjar commons-loggingjar commons-pooljar commons-servicesjar commons-validatorjar

  創建一個webxml文件這是一個基於servlet的Web應用程序都需要的部署描述文件一個Struts Web應用在本質上也是一個基於servlet的Web應用它也不能例外

  Struts有兩個組件要在該文件中進行配置它們是ActionServlet和標簽庫下面是一個配置清單

  

  quote: //EN app__dtd> action orgapachestrutsactionActionServlet config /WEBINF/strutsconfigxml debug action *do /WEBINF/strutsbeantld /WEBINF/strutsbeantld /WEBINF/strutshtmltld /WEBINF/strutshtmltld /WEBINF/strutslogictld /WEBINF/strutslogictld

  上面我們在webxml中完成了對servlet和標簽庫的基本配置而更多的框架組件要在strutsconfigxml中進行配置

  創建一個基本的strutsconfigxml文件並把它放在/Webapps/mystruts/WEBINF/目錄中該文件是基於Struts應用程序的配置描述文件它將MVC結構中的各組件結合在一起開發的過程中會不斷對它進行充實和更改在Struts一個應用只能有一個這樣的文件給分工開發帶來了一些不便在Struts可以有多個這樣的文件將上述缺點克服了需在該文件中配置的組件有datasources

  

  quote: globalexecptions formbeans globalforwards actionmappings controller messageresources plugin 配置清單如下 quote: //EN config__dtd>

  到此為止我們已經具備了完成一個最簡單Struts應用的所需的各種組件前面已經提到在開發過程中我們會不斷充實和修改上面兩個配置描述文件下面我們將實際做一個非常簡單的應用程序來體驗一下Struts應用開發的真實過程以期對其有一個真實的認識在完成基礎部分的介紹後筆者會給出一些在實際開發中經常用到而又讓初學者感到有些難度的實例最後會介紹Struts與其他框架的關系及結合它們生成應用程序的例子


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28798.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.