Struts 框架

struts簡介

Struts是Apache軟件基金會(ASF)贊助的一個開源項目。它最初是jakarta項目中的一個子項目,並在2004年3月成爲ASF的頂級項目。它經過採用JavaServlet/JSP技術,實現了基於JavaEEWeb應用的MVC設計模式的應用框架,是MVC經典設計模式中的一個經典產品。mysql

Struts發展歷史

Struts是做爲ApacheJakarta項目的組成部分,項目的創立者但願經過對該項目的研究,改進和提升JavaServerPages、servlet、標籤庫以及面嚮對象的技術水準。web

Struts這個名字的來源於在建築和舊式飛機中使用的支持金屬架。之因此這個框架叫作「struts」,是爲了提醒咱們記住那些支撐咱們房屋,建築,橋樑,甚至咱們踩高蹺的基礎支撐。這也是解釋struts在開發web應用程序中所扮演的角色的精彩描述。sql

Struts的含義是」支柱,枝幹」,它的目的是爲了減小程序開發的時間,項目的建立者認爲JSP,servlet的存在雖然能夠幫助用戶解決大部分問題,可是因爲它們的編碼對項目的開發帶來了許多的不方便,可重用性也差,因此struts應運而生,幫助用戶在最短的時間內解決這些問題。Struts框架提供以下服務:數據庫

(1)做爲控制器的Servlet。設計模式

(2)提供大量的標籤庫。服務器

(3)提供了用於國際化的框架,利用不一樣的配置文件,能夠幫助用戶選擇合適本身的語言。app

(4)提供了JDBC的實現,來定義數據源和數據庫鏈接池。框架

(5)XML語法分析工具。工具

(6)文件下載機制。學習

 

Struts原理

Struts是對JSPModel2設計標準的一種實現,下面分別從模型(Model)、視圖(view)和控制器3個部分介紹Struts的體系結構和工做原理。調用流程以下所示(圖1.1)。


圖1.1

 

(1)視圖(view)

在Struts中,視圖層包含兩個部分,JSP頁面和ActionForm。

ActionForm封裝了用戶提交的表單信息,其實ActonForm本質上就是JavaBean,這些JavaBean中沒有業務邏輯,只提供了全部屬性的getter和setter方法,這些屬性和用戶表單中的輸入項是一一對應的。在Struts中就是經過ActionForm把用戶表單信息提交給控制器。

JSP頁面是經典MVC中主要的視圖組件,主要是信息顯示和控制器處理結果顯示的功能。

除了以上,struts還提供了一個強大的struts標籤庫,來幫助用戶解決顯示邏輯,而且利用ActonForm組件將信息傳遞到控制層。

(2)控制器(Controller)

在控制層,struts提供了一個控制器組件ActionServlet,它繼承自HttpServlet,並重載了HttpServlet的doGet(),doPost()方法,能夠接受HTTP的響應,並進行轉發,同時還提供了使用XML進行轉發Mapping(映射)的功能。

(3)模型(Model)

模型表示狀態和業務邏輯的處理,在通常的web應用程序中,用JavaBean或者EJB來實現系統的業務邏輯。在Struts中,struts提供Action對象,來管理業務邏輯的調用,幫助用戶分離業務邏輯,也就是說struts自己不實現業務邏輯,但能夠調用已完成的業務邏輯。

Struts工做流程

Struts工做流程以下(圖1.2)所示。

 


圖1.2

 

ActionServlet是struts中核心的控制器,全部的用戶請求都必須經過ActionServlet的處理,而struts-config.xml是struts中核心的配置文件,在這個文件中配置了用戶請求URL和控制器Action的映射關係,ActionServlet經過這個配置文件把用戶的請求發送到對應的控制器中。

在struts web應用程序中,當web應用程序啓動的時候,就會初始化ActionServlet在初始化ActionServlet的時候會加載struts-config.xml配置文件,在加載成功後會把這些URL和控制器映射關係存放在ActionMapping對象或者其餘對象中。當ActionServlet接收到用戶請求的時候,就會按照下面的流程對用戶請求進行處理。

(1)ActionServlet接收到用戶的請求後,會根據請求URL尋找匹配的ActionMapping對象,若是匹配失敗,說明用戶請求的URL路徑信息有誤,因此返回請求路徑無效的信息,當找到匹配的ActionMapping的時候,進入到下一步。

(2)當ActionServlet找到匹配的ActionMapping對象的時候,會根據ActionMapping中的映射信息判斷對應的ActionForm對象是否存在,若是不存在對應的ActionForm對象就建立一個新的ActionForm對應,並把用戶提交的表單信息保存到這個ActionForm對象中。

(3)在struts-config.xml中這個配置文件,能夠配置表單是否須要驗證,若是須要驗證,就調用ActionForm中的validate()方法對用戶輸入的表單進行驗證。

做爲Struts框架的核心描述,struts-config.xml能夠說一切盡在掌握。它不但描述了MVC模型,定義全部視圖層和控制層之間的接口(ActionForm),與控制層和模型層的接口(Action)進行結合,並且能夠定義一些附加組件,如國際化信息資源排至文件,標籤庫信息等。

(4)若是ActionForm的validate()方法返回了ActionErrors對象,則代表驗證失敗,ActionServlet把這個頁面返回到用戶輸入的界面,提示用戶從新輸入。若是方法的返回值爲null,就代表驗證已經經過,能夠進入下一步處理。

(5)ActionServlet能夠根據ActionMapping對象查找用戶請求轉發給哪一個控制器Action,若是對應的Action對象不存在,就建立這個對象,並調用這個Action的excute()方法。

(6)業務邏輯控制器Action的execute()方法就會返回一個ActionForward對象,ActionServlet把控制器處理的結果轉發到ActionForward對象指定的JSP頁面。

(7)ActionForward對象指定的JSP頁面根據返回的處理結果,用合適形式把服務器處理的結果展現給用戶,到這裏爲止,一個客戶請求的整個過程完畢。


以 上初步struts框架進行了介紹,和對原理進行了簡單的分析。至於struts是如何實現MVC的,ActionServlet屬於 Controller部分,Action和ActionForm屬於Model層,仍是Action屬於Controller層,不一樣的人對struts 有不一樣的理解。接下來真正的運用到實踐中,在實踐中深入去體會,原理當然重要,重要的是運用,是能駕馭和使用這個框架。就像學習開車同樣,不是一蹴而就 的。

相關文章
相關標籤/搜索