Struts 運行環境
當前主要有兩個版本,struts 1.0 release 和 struts 1.1 beta 3。Struts 1.0 和1.1差別很大,主要有兩點:
盡管struts 1.0 是正式發布版,但是結構已經老化,功能也已經固化。所以我們的Framework不選用struts 1.0, 而選用 struts 1.1。
根據apache官方網站的說法,struts幾乎支持所有的servlet containers, 下面是幾種主要的servlet containers
Servlet Container |
版本 |
iPlanet Application Server |
6.0sp2 or higher, 6.5 |
Tomcat |
3.2.x, 4.0 or higher |
Weblogic |
6.0 or higher |
Websphere |
3.5 or higher |
Orion |
1.0 or higher |
Resin |
1.2 or higher |
JRun |
3.0 or higher |
我們公司目前項目中使用較多的應用服務器是iPlanet Application Server, Tomcat。Struts 1.1 在這兩個應用服務器下已經配置通過。
Tomcat 與struts結合的很好,只需要將xxx.war 放到 webapp 目錄下,啟動Tomcat 即可,不需要其他額外的配置。
iPlanet 配置復雜一些,主要原因是xml parser 版本不一致,和struts 相關類不能加載。具體的配置說明請見《如何在 iAS 6.x 中配置Struts 1.1 beta x》。
在其他的應用服務器上,還沒有嘗試struts, 今后根據項目需要會作進一步的研究。
struts framework是MVC 模式的體現,下面分別從模型、視圖、控制來看看struts的體系結構(Architecture)。下圖顯示了struts framework的體系結構響應客戶請求時,各個部分工作的原理。
Struts體系結構
主要由JSP建立,struts自身包含了一組可擴展的自定義標簽庫(TagLib),可以簡化創建用戶界面的過程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags。
模型主要是表示一個系統的狀態(有時候,改變系統狀態的業務邏輯操作也也劃分到模型中)。在Struts中,系統的狀態主要有ActiomForm Bean體現,一般情況下,這些狀態是非持久性的。如果需要將這些狀態轉化為持久性數據存儲,Struts本身也提供了Utitle包,可以方便的與數據庫操作。
在Struts framework中, Controller主要是ActionServlet,但是對于業務邏輯的操作則主要由Action、ActionMapping、ActionForward這幾個組件協調完成。其中,Action扮演了真正的業務邏輯的實現者,而ActionMapping和ActionForward則指定了不同業務邏輯或流程的運行方向。
框架中所使用的組件:
ActionServlet |
控制器 |
ActionClass |
包含事務邏輯 |
ActionForm |
顯示模塊數據 |
ActionMapping |
幫助控制器將請求映射到操作 |
ActionForward |
用來指示操作轉移的對象 |
ActionError |
用來存儲和回收錯誤 |
Struts標記庫 |
可以減輕開發顯示層次的工作 |
Struts-config.xml集中了所有頁面的導航定義。對于WEB項目,通過配置文件可迅速把握其脈絡,這不管是對于前期的開發,還是后期的維護或升級都是方便的。掌握Struts-config.xml是掌握Struts的關鍵所在。
在struts的早先版本中,只有一個struts配置文件struts-config.xml。但是,對大型項目來說,使用和修改這個配置文件,會成為瓶頸。在struts1.1中,支持sub-Application ,可以定義多個配置文件協同工作。
通過struts配置文件struts-config.xml 將struts各個組件聯系在一起。在struts-config.xml 中可以定義下面內容:
全局轉發用來在JSP頁之間創建邏輯名稱映射。全局轉發的例子:
<global-forwards> <forwardname="logoff"path="/logoff.do"/> <forwardname="logon"path="/logon.jsp"/> <forwardname="registration"path="/registration.jsp"/> <forwardname="suclearcase/" target="_blank" >ccess"path="/mainMenu.jsp"/> </global-forwards> |
屬性 |
描述 |
Name |
全局轉發的名字 |
Path |
與目標URL的相對路徑 |
ActionMapping對象幫助進行框架內部的流程控制,它們可將請求URI映射到Action類,并且將Action類與ActionForm bean相關聯。ActionServlet在內部使用這些映射,并將控制轉移到特定Action類的實例。所有Action類使用perform()或者execute()方法實現特定應用程序代碼,返回一個ActionForward對象,其中包括響應轉發的目標頁面名稱。例如:
<action-mappings> <actionpath="/logon" type="org.apache.struts.webapp.example.LogonAction" name="logonForm" scope="session" input="logon"> </action> <forward name="failure" path="/error.jsp"/> <forward name="success" path="/index.jsp"/> </ action-mappings> |
屬性 |
描述 |
Path |
Action類的相對路徑 |
Name |
與本操作關聯的Action bean的名稱 |
Type |
連接到本映射的Action類的全稱(可有包名) |
Scope |
ActionForm bean的作用域(請求或會話) |
Prefix |
用來匹配請求參數與bean屬性的前綴 |
Suffix |
用來匹配請求參數與bean屬性的后綴 |
attribute |
作用域名稱。 |
className |
ActionMapping對象的類的完全限定名默認的類是org.apache.struts.action.ActionMapping |
input |
輸入表單的路徑,指向bean發生輸入錯誤必須返回的控制 |
unknown |
設為true,操作將被作為所有沒有定義的ActionMapping的URI的默認操作 |
validate |
設置為true,則在調用Action對象上的perform()方法前,ActionServlet將調用ActionForm bean的validate()方法來進行輸入檢查 |
通過<forward>元素,可以定義資源的邏輯名稱,該資源是Action類的響應要轉發的目標。
屬性 |
描述 |
Id |
ID |
ClassName |
ActionForward類的完全限定名,默認是org.apache.struts.action.ActionForward |
Name |
操作類訪問ActionForward時所用的邏輯名 |
Path |
響應轉發的目標資源的路徑 |
redirect |
若設置為true,則ActionServlet使用sendRedirect()方法來轉發資源 |
ActionServlet使用ActionForm來保存請求的參數,這些bean的屬性名稱與HTTP請求參數中的名稱相對應,控制器將請求參數傳遞到ActionForm bean的實例,然后將這個實例傳送到Action類。例子:
<form beans > <form bean name="bookForm" type="BookForm"/> </form beans> |
屬性 |
描述 |
Id |
ID |
className |
ActionForm bean的完全限定名,默認值是org.apache.struts.action.ActionFormBean |
Name |
表單bean在相關作用域的名稱,這個屬性用來將bean與ActionMapping進行關聯 |
Type |
類的完全限定名 |
例子:
<data-sources> <data-source> <set-property property="autoCommit" value="false"/> <set-property property="description" value="Example Data Source Configuration"/> <set-property property="driverClass" value="org.postgresql.Driver"/> <set-property property="maxCount" value="4"/> <set-property property="minCount" value="2"/> <set-property property="password" value="mypassword"/> <set-property property="url" value="jdbc:postgresql://localhost/mydatabase"/> <set-property property="user" value="myusername"/> </data-source> </data-sources> |
屬性 |
描述 |
description |
數據源的描述 |
autoCommit |
數據源創建的連接所使用的默認自動更新數據庫模式 |
driverClass |
數據源所使用的類,用來顯示JDBC驅動程序接口 |
loginTimeout |
數據庫登陸時間的限制,以秒為單位 |
maxCount |
最多能建立的連接數目 |
minCount |
要創建的最少連接數目 |
password |
數據庫訪問的密碼 |
readOnly |
創建只讀的連接 |
User |
訪問數據庫的用戶名 |
url |
JDBC的URL |
通過指定關鍵字名稱,Action類可以訪問數據源,比如:
javax.sql.DataSource ds = servlet.findDataSource(“conPool”);
javax.sql.Connection con = ds.getConnection();
struts 標記庫包含4種類型的標記,分別是:
Struts提供了功能強大的Taglib,充分使用這些Tag,能最大限度的發揮Struts的作用。
由于標記庫功能強大,所以掌握它需要花費一定的時間。目前我們可以先從 struts-html taglib 學起,主要精力還是要先放在理解掌握struts導航功能上。
文檔《struts 標記庫》可以幫助學習掌握struts taglib.
Camino 是基于 struts framework的可視化建模工具。使用camino 可以實現快速設計和開發,主要特點有:
目前Camino的版本有2.05 和 3.0, 可以下載試用版。Camino 自帶了幫助文檔,可以方便學習Camino。
Struts 1.1 beta 3 的包中包含了幾個example, 可以幫助學習struts。
Web應用程序 |
描述 |
Struts-blank.war |
一個簡單的web應用程序 |
Struts-documentation.war |
包含struts站點上所有struts文檔 |
Struts-example.war |
Struts很多特性的示范 |
Struts-exercisetaglib.war |
|
Struts-template.war |
包含struts模板標記的介紹和范例 |
Struts-upload.war |
一個簡單的例子,示范如何使用struts框架上傳文件 |
在Tomcat 4.1.18運行環境下,只需要將 xxx.war 文件放到webapps 目錄下,啟動Tomcat 即可。
建議從struts-example 開始學習,熟讀struts-config.xml, jsp, 和 java 源碼。
Eclipse 是由IBM支持的開發源碼的IDE, 目前的最新版本是2.1。與Netbeans, JBuilder相比,由以下特點:
目前,每個項目使用的開發工具都不同,有JBuilder, Netbeans等。從長遠考慮應該采用開發源碼的IDE, 不存在盜版問題?,F在開發源碼的IDE有Netbeans, Eclipse兩大陣營,分別由Sun 和 IBM支持。綜合上面的Eclipse特性,我推薦統一使用Eclipse。
struts 官方網站:http://jakarta.apache.org/struts
struts resource : http://jakarta.apache.org/struts/resources/index.html
Camino 網站:http://www.scioworks.com/index.html
其他網站:http://husted.com/struts/
http://struts.application-servers.com/main.html
http://www.synthis.com/products/architectures/struts/index.jsp
《struts框架詳細介紹》 - ppt 文檔,描述了struts 框架
《struts-intro》- ppt 文檔,其中的struts 導航流程圖非常好。
《Using Struts》 - ppt 文檔,概述了struts 框架和組成
《如何在 iAS 6.x 中配置Struts 1.1 beta x》- 講述在iPlanet 6.x 如何配置 struts 1.1
《Struts標記庫》 - 詳細介紹了struts taglib的使用
《struts turorial》 - 一個網上購書的示例,詳細講解了struts使用步驟原文轉自:http://www.anti-gravitydesign.com