1
、Struts應用框架介紹
(1)框架
框架最簡單的形式是指已開發過並已測試過的軟件的程序塊,這些程序塊能夠在多個軟件開發工程中重用。框架提供了一個歸納的體系結構模版,能夠用這個模板來構建特定領域中的應用程序。
Framework概念並非很新了,伴隨着軟件開發的發展,在多層的軟件開發項目中,可重用、易擴展的,並且是通過良好測試的軟件組件,愈來愈爲人們所青睞。這意味着人們能夠將充裕的時間用來分析、構建業務邏輯的應用上,而非繁雜的代碼工程。
因而人們將相同類型問題的解決途徑進行抽象,抽取成一個應用框架。這也就是咱們所說的Framework。Framework的體系提供了一套明確機制,從而讓開發人員很容易的擴展和控制整個framework開發上的結構。
(2)爲何會出現應用框架
您只要細心地研究真實的應用程序,就會發現程序大體上由兩類性質不一樣的組件組成,一類與程序要處理的具體事務密切相關,咱們不妨把它們叫作業務組件;另外一類是應用服務。
好比說:一個稅務徵管系統和一個圖書管理系統會在處理它們的業務方面存在很大的差別,這些直接處理業務的組件因爲業務性質的不一樣不大可能在不一樣的系統中重用,而另外一些組件如決定程序流向的控制、輸入的校驗、錯誤處理及標籤庫等這些只與程序相關的組件在不一樣的系統中能夠很好地獲得重用。
人們天然會想要是把這些在不一樣應用程序中有共性的一些東西抽取出來,作成一個半成品程序,這樣的半成品就是所謂的程序框架,再作一個新的東西時就沒必要白手起家,而是能夠在這個基礎上開始搭建。實際上,有些大型軟件企業選擇本身搭建這樣的框架。
(3)爲何要用框架?
由於軟件系統發展到今天已經很複雜了,特別是服務器端軟件,設計到的知識,內容,問題太多。在某些方面使用別人成熟的框架,就至關於讓別人幫你完成一些基礎工做,你只須要集中精力完成系統的業務邏輯設計。並且框架通常是成熟,穩健的,他能夠處理系統不少細節問題,好比,事物處理,安全性,數據流控制等問題。還有框架通常都通過不少人使用,因此結構很好,因此擴展性也很好,並且它是不斷升級的,你能夠直接享受別人升級代碼帶來的好處。
框架通常處在低層應用平臺(如J2EE)和高層業務邏輯之間的中間層。
(3)
Struts
Web應用框架
Struts 是 Apache 軟件基金會(Apache Software Foundation)資助的一個
爲開發基於MVC模式應用架構的開源框架,是利用Java Servlet和JSP、XML等方面的技術來實現構建Web應用的一項很是有用的技術,它也是基於MVC模式的Web應用最經典框架。
Struts框架的主要架構設計和開發者是Craig R.McClanahan。Struts 是目前Java Web MVC框架中不爭的王者。通過長達五年的發展,Struts已經逐漸成長爲一個穩定、成熟的框架,而且佔有了MVC框架中最大的市場份額。
Struts把Servlet、JSP、自定義標籤和信息資源(message resources)整合到一個統一的框架中,主要由一系列的框架類、輔助類和定製的JSP標記庫構成。開發人員利用其進行開發時不用再本身編碼實現全套MVC模式,極大的節省了時間。
2
、框架的組成
一個設計良好的框架通常分爲三層:
(1)接口層
這一層要儘可能使用interface,在這一層中你要考慮到你如今的、未來的可能支持的功能,但不須要去實現它,只定義到接口層次就能夠了。如Struts中的插件接口PlugIn。
(2)抽象層
這一層要針對你當前的需求作定製,對你的需求中的通用邏輯作實現。這一層應該出現大量的抽象類。如Struts中的ActionServlet、Action和ActionForm等類。
(3)實現層
不用說了,把前面兩層沒有作掉的事情在這一層都作了吧。如Struts中後臺實現的各類功能
3
、爲何要提出
Struts
(1)背景
因爲咱們開發Web應用的複雜度隨着系統的複雜度的要求愈來愈來複雜。特別是在代碼重用,代碼移植、代馬可插扒等問題上出現了許多重複開發、維護困難等。從而提出了
Struts開發框架。
它的設計目的是從總體上減輕構造企業Web應用的負擔,並提供國際化和數據庫鏈接池支持。
Struts 是一組相互協做的類、servlet 和 JSP 標記,它們組成一個可重用的 MVC 2 設計。這個定義表示 Struts 是一個框架,而不是一個庫,但 Struts 也包含了豐富的標記庫和獨立於該框架工做的實用程序類。
(2)採用Struts的優勢
在實際開發中,MVC框架開發至關費時,Struts 實現了MVC這種框架,但又擴充了該MVC框架。這樣使得系統的開發就像「填空」同樣進行,至關快速。
l
採用Strust能夠加快開發速度、加強系統的靈活性、下降系統的藕合性(由於它的三個應用層鬆散地耦合在一塊兒
)和易於系統的維護。
l
分工明確:業務層與表示層分開,使得管理人員能夠在小組內分配責任。網頁設計人員與JAVA程序員各司其職。
l
簡化頁面:使用標記,把邏輯處理的代碼分離開來。
l
經過將問題劃分爲更小的組件,當技術空間或問題空間中出現變化時,您就有更多的機會重用代碼。
(3)Struts的缺點
l
有限的適用範圍:Struts 是一種基於 Web 的 MVC 解決方案,因此必須用 HTML、JSP 文件和 Servlet 來實現它。
l
J2EE 應用程序支持
l
複雜性:在將問題分爲幾個部分的同時也引入了複雜性(在強健性加強的同時,也意味着複雜性的增長)。
4、Struts壓縮包內容
下載後的*.zip包文件包含兩個目錄,lib和webapps。在lib目錄中有使用struts建立應用程序是所需的文件:
文件
|
描述
|
jdbc2_0-stdext.jar
|
包含JDBC2.0 Optional Package API類。若是咱們要使用struts提供的數據資源,就須要將這個文件拷貝到WEB-INF\lib下
|
Struts.jar
|
包含struts中全部的java類。一樣也須要拷貝到WEB-INF\lib下
|
*.tld
|
標記庫描述器文件,描述了多個struts標記庫中的自定義標記。一樣要拷貝到WEB-INF\lib下
|
在webapps目錄下有以下文件:
Web
應用程序
|
描述
|
Struts-blank.war
|
一個簡單的web應用程序
|
Struts-documentation.war
|
包含struts站點上全部struts文檔
|
Struts-example.war
|
Struts不少特性的示範
|
Struts-exercisetaglib.war
|
主要用於對自定義標籤庫進行增長而使用的測試頁,但也能夠示範如何使用struts標記
|
Struts-template.war
|
包含struts模板標記的介紹和範例
|
Struts-upload.war
|
一個簡單的例子,示範如何使用struts框架上傳文件
|
5
、Struts的總體框架
(1)Struts框架的MVC組件結構圖
在struts框架中,模型分爲兩個部分:系統的內部狀態和能夠改變狀態的操做(事務邏輯)。內部狀態一般由一組ActinForm JavaBean表示。根據設計或應用程序複雜度的不一樣,這些Bean能夠是自包含的並具備持續的狀態,或只在須要時纔得到數據(從某個數據庫)。
大型應用程序一般在方法內部封裝事務邏輯(操做),這些方法能夠被擁有狀態信息的bean調用。好比購物車bean,它擁有用戶購買商品的信息,可能還有checkOut()方法用來檢查用戶的信用卡,並向倉庫發訂貨信息。
小型程序中,操做可能會被內嵌在Action類,它是struts框架中控制器角色的一部分。當邏輯簡單時這個方法很適合。建議用戶將事務邏輯(要作什麼)與Action類所扮演的角色(決定作什麼)分開。
Struts爲Model部分提供了Action和ActionForm兩種Bean對象:全部的Action處理器對象都是開發者從Struts的Action類派生的子類。Action處理器對象封裝了具體的處理邏輯,調用業務邏輯模塊,而且把響應提交到合適的View組件以產生響應。
Struts提供的ActionForm組件對象,它能夠經過定義屬性描述客戶端表單數據。開發者能夠從它派生子類對象,利用它和Struts提供的自定義標記庫結合能夠實現對客戶端的表單數據的良好封裝和支持,Action處理器對象能夠直接對它進行讀寫,而再也不須要和request、response對象進行數據交互。
(2)Struts框架的處理流程
l
首先,控制器(ActionServlet)進行初始化工做,讀取配置文件(struts-config.xml),爲不一樣的Struts模塊初始化相應的ModuleConfig對象。好比配置文件中的Action映射定義都保存在ActionConfig集合中。相應地有ControlConfig集合、FormBeanConfig集合、ForwardConfig集合和MessageResourcesConfig集合等。
l Struts框架的處理流程清楚的體現了MVC系統的特色,
全部的頁面請求都將發送到Struts的前端控制器ActionServlet中(所以若是要進行前置處理,能夠繼承ActionServlet並重寫process()方法),同時ActionServlet也將根據struts-config.xml配置文件中的設置(<action>標籤)來決定轉向到那個後端控制器Action類。
l
當頁面中的Form表單被提交時,ActionForm將自動地封裝和處理該Form表單中的數據。同時在Action的子類中能夠存取存儲在ActionForm中的Form表單數據。
l
Action的子類將處理所得到的存儲在ActionForm中的Form表單數據,處理和響應客戶請求,它還調用後臺的
JavaBean組件
完成具體的業務邏輯。同時也按照在struts-config.xml文件內的forward標籤內容(如<forward name="sayHello" path="/sayHello.jsp"/>),將結果交由某個JSP頁面顯示。
(3)Struts體系組成
Struts體系能夠當作兩個相對獨立的部分:
第一個部分是Struts API,用於編寫支持Struts的應用組件;
第二部分是Struts的JSP標記庫,由html、bean、logic和template四個標記組成。
Struts的兩個部分有着各自不一樣的用戶。對於規模較小的項目,同一個用戶可能同時使用這兩個部分;但對於規模較大的項目,一般開發者使用API組件,而負責HTML頁面佈局的人使用標記庫。
(4)struts-config.xml配置文件
框架中的模型(M)、視圖(V)、控制器(C) 三個部分是經過struts-config.xml配置文件將其聯繫在一塊兒。一個標準的struts-config文件包含以下結構,有一點要引發你們的注意的,就是,struts-config.xml中配置的各個項目是有必定的順序要求的,幾個主要項目的順序大體是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd >
<struts-config>
<data-sources /> // 定義數據源
<form-beans /> // 定義ActionForm
<global-exceptions /> // 定義全局異常
<global-forwards /> // 定義全局轉向url
<action-mappings /> // 定義action
<controller /> // 配置Controller
<message-resources /> // 配置資源文件
<plug-in /> // 配置資源文件
</struts-config>
(5)Struts與其它框架的不一樣
在Struts應用中,有一個稱爲ActionServlet的主調度程序(或稱爲分配器)。不過,並不是全部的請求都必須經過ActionServlet(以「*.do」結尾的URL都是Struts請求)。用戶的請求目標能夠是非Struts的頁面,也能夠是那些使用了Struts標記庫但不使用Struts請求分配服務的頁面。這正是Struts體系的優勢之一:按需使用。許多編程框架要求你要麼不用,要麼所有使用,並且一旦你決定使用,之後要悔改從前的錯誤就會付出高昂的代價。Struts按需使用的優勢與這類系統造成了強烈對比。
本文出自 「魏傑的技術專欄」 博客,請務必保留此出處http://weijie.blog.51cto.com/340746/87113html