|
Struts開發(fā)幫助文檔 一、 概述 struts是基于當(dāng)前的一些相關(guān)標(biāo)準(zhǔn)的開發(fā)技術(shù)(servlet,xml…)基礎(chǔ)之上,提供了一個開發(fā)框架的開放源碼項目,由于我們開發(fā)web應(yīng)用的復(fù)雜度隨著系統(tǒng)的復(fù)雜度的要求越來越來復(fù)雜。特別是在代碼重用,代碼移植、代馬可插扒等問題上出現(xiàn)了許多重復(fù)開發(fā)、維護困難等。Struts這個框架鼓勵我們應(yīng)用model2的MVC開發(fā)模型。當(dāng)然我們在基于其上的開發(fā)中不一定要進行完全遵守。當(dāng)前struts比較穩(wěn)定的發(fā)行版時1.0,已經(jīng)有了1.1的測試開發(fā)版。要了解詳細的信息,請登陸www.apache.org/struts . 二、 整體結(jié)構(gòu)概述 在到處可以找到關(guān)于MVC結(jié)構(gòu)和struts結(jié)構(gòu)的圖形。這里我就不對結(jié)構(gòu)圖進行描述。只站在對J2EE WEB 應(yīng)用的相關(guān)標(biāo)準(zhǔn)了解的基礎(chǔ)來對struts整個框架進行一描述。 其實struts框架完全是基于J2EE相關(guān)技術(shù)和標(biāo)準(zhǔn)之上的。Struts提供一個servlet來作為控制器對客戶端的相應(yīng)請求進行轉(zhuǎn)接給后臺的模型。它為了使各個部分能夠分離,提供相應(yīng)的配置文件(struts-config.xml)進行請求和處理類的映射。整個類的映射完全來自java技術(shù)的類反射和相應(yīng)的請求過濾技術(shù)。通過標(biāo)記擴展來實現(xiàn)相應(yīng)的視圖和模型的聯(lián)系。整個結(jié)構(gòu)就是這樣的,請不要再多想。 三、 詳細開發(fā)說明 ¨ 控制器 由struts自己實現(xiàn),實現(xiàn)類為org.apache.struts.action.ActionServlet。開發(fā)者只需將相應(yīng)的類映射配置在web.xml文件就可以。 請參考如下描述: 這里只對其中的初始化參數(shù)application加以介紹:其實這是struts控制器在啟動時需要設(shè)置消息的屬性文件,具體屬性文件的格式完全遵守java屬性文件的要求。屬性文件的名稱這里配置位ApplicationResources,當(dāng)然我們可以修改,但該文件的路徑必須是web-inf/classes/或者相應(yīng)的包目錄。 ¨ 模型 關(guān)于struts的許多文章都進行相應(yīng)的模型描述,分為系統(tǒng)狀態(tài)模型和業(yè)務(wù)邏輯。這些對我們理解struts,應(yīng)用struts進行開發(fā)是很重要的。但這里我只介紹兩個重要的類,一個是進行相應(yīng)的請求數(shù)據(jù)維護java bean類,另一個是進行相應(yīng)請求處理的普通類。前者在struts中要求繼承org.apache.struts.action.ActionForm類,該類由struts提供,后者需要繼承org.apache.struts.action.Action類,也由struts提供。在第一個實現(xiàn)的bean中,各種屬性必須要和客戶請求的各個字段名稱對應(yīng),目的是完成客戶請求數(shù)據(jù)的自動化獲取,我們心里明白這一件實事就可以了:即只要我們滿足這種要求,struts自動會將客戶端的請求填充在相應(yīng)的javabean中。并且我們可以重載相應(yīng)的兩個方法來實現(xiàn)對應(yīng)的javabean的各個字段的校驗和重置,以確保滿足我們的要求。這兩個方法分別為public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest)和public void reset(ActionMapping actionMapping, HttpServletRequest httpServletRequest),在第一個方法中返回一個相應(yīng)的處理錯誤對象,這個對象會自動添加到一個錯誤管理器中,我們直接可以在表示層的代碼中進行調(diào)用,例如用標(biāo)記<html:errors/>來顯示當(dāng)前的請求錯誤信息。第二個reset方法用來 ¨ 視圖 視圖是struts中自定義的一些標(biāo)記庫,其實沒有struts我們?yōu)榱私鉀Q視圖和代碼的分離,經(jīng)常會采取一些自定義標(biāo)記庫。當(dāng)然在jsp的擴展標(biāo)記庫應(yīng)用中,也有相應(yīng)的標(biāo)記供我們使用。但為了和struts能進行緊密的結(jié)合,在使用struts時我們可以適當(dāng)適用struts提供的標(biāo)記庫。對一些通過jsp標(biāo)準(zhǔn)的標(biāo)記就能實現(xiàn)的,我們這里建議使用他們。這里分別將這些標(biāo)記庫進行介紹。 Bean標(biāo)記庫: 使用該標(biāo)記前首先要在jsp的頁面導(dǎo)入相應(yīng)的標(biāo)記定義,例如<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>。 使用的方法如<bean:*** id=””/>。 下面對該標(biāo)記庫做一介紹: cookie :屬性有id,name , multiple,value,id是對cookie在該頁面中的唯一標(biāo)識,在頁面其它地方可以通過id進行引用。相當(dāng)于用cookie直接引用。Name是相應(yīng)的cookie名稱。Multiple可以賦予任意值,如果該值被定義將會返回相應(yīng)給定值數(shù)量的cookie數(shù)組,如果該值沒有被定義Value在這里是一個默認(rèn)值,當(dāng)我們這里的調(diào)用的cookie不存在時,其值為我們這里的value值。 define:相當(dāng)于jsp標(biāo)記<jsp:useBean>,屬性有id、name、property、scope、toScope、type、value。Id和cookie中的id起到了同樣的作用;name是在相應(yīng)的scope中唯一bean標(biāo)識;scope將會在相應(yīng)的范圍內(nèi)進行相應(yīng)的查找;toScope如果在scope中找不見相應(yīng)的bean,將會在toScope中建立相應(yīng)的bean;type是該類完全類路徑和類。 例如:<bean:define id="submitForm" scope="session" name="submitForm" type="struts.test.SubmitActionForm"/> <%=submitForm.getName()%> 例如:<jsp:useBean id="test1" scope="page" class="org.apache.struts.webapp.exercise.TestBean"/> <bean:define id="test1_string" name="test1" property="stringProperty"/> <bean:define id="test1_value" value="ABCDE"/> <%= test1_string %> <%= test1_value %> header:通過該標(biāo)記可以訪問相應(yīng)頁面請求的頭的信息,具體屬性有id、multiple、name、value。具體的含義和cookie的類似。 例如:<%java.util.Enumeration names = ((HttpServletRequest) request).getHeaderNames();%> <%while (names.hasMoreElements()) { String name = (String) names.nextElement(); %> <bean:header id="head" name="<%= name %>"/> <tr> <td><%= name %></td> <td><%= head %></td> </tr> <%}%> Include:屬性有id、name、forward、anchor、href、transacttion、page。屬性的說明參考相應(yīng)apache的網(wǎng)站。 例如:<bean:include id="index" page="/index.jsp"/> <%=index%> message: 不常用,這里忽略。 page:不常用,這里忽略。 Parameter:屬性有id、name、value、multiple。用來輸出客戶端的請求參數(shù)和值。 例如:<bean:parameter id="param1" name="param1"/> <bean:parameter id="param3" name="param3" value="UNKNOWN VALUE"/> <%=param1%><br> <%=param3%> resource:屬性有id、name、input。如果input屬性被定義為任意值,導(dǎo)入的資源將會返回一個InputStream對象。如果不被定義的話,資源將會以字符串的方式返回。 例如:<bean:resource id="webxml" name="/WEB-INF/web.xml"/> <bean:write name="webxml" filter="true"/> size:用來對Cellection 或者Map類型的數(shù)據(jù)進行元素個數(shù)統(tǒng)計。屬性有:id、collection、name、property、scope。 例如:<% java.util.ArrayList data = new java.util.ArrayList(); data.add("First"); data.add("Second"); data.add("Third"); data.add("Fourth"); data.add("Fifth"); pageContext.setAttribute("list", data, PageContext.PAGE_SCOPE); %> <bean:size id="dataSize" collection="<%= data %>"/> <jsp:useBean id="list" scope="page" class="java.util.ArrayList"/> <bean:size id="listSize" name="list"/> struts: 不常用,這里忽略。 Write: 屬性有bundle、filter、format、formatKey、ignore、local、name、property、scope。具體用法請參閱相關(guān)網(wǎng)站。 Html標(biāo)記庫: 使用該標(biāo)記庫首先要在相應(yīng)的頁面中引入標(biāo)記庫定義文件,如:<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>。其實該標(biāo)記庫的大多數(shù)標(biāo)記可以用html的標(biāo)記來實現(xiàn)。這里值對其無法用html實現(xiàn)的幾個標(biāo)記進行介紹。 Error: 屬性有:bundle、name、property、local。如果以上屬性都不定義,將會從對屬性文件中的所有error.***錯誤信息顯示出來。Bundle,邦定的錯誤信息管理器,如果沒有定義,將默認(rèn)是由action創(chuàng)建的應(yīng)用程序級錯誤管理器。Name和property用來配合從相應(yīng)的頁面中調(diào)用錯誤信息管理bean來顯示錯誤信息。Local是一個錯誤信息本地化處理器,默認(rèn)會用是和本地的方式處理本地化。 屬性資源文件中應(yīng)該包含如下相應(yīng)的信息,對錯誤信息的現(xiàn)實進行格式化: errors.header 所有錯誤信息前面顯示的內(nèi)容,可以進行html修飾 errors.footer 所有錯誤信息后面的顯示內(nèi)容,可以進行html修飾 errors.prefix 每條錯誤信息前面的顯示信息,可以進行html修飾 errors.suffix 每條錯誤信息后面的顯示信息,可以進行html修飾 message: 屬性有bundle、footer、header、id、local、message、property、name.具體的用法請參閱相關(guān)網(wǎng)站。 Logic標(biāo)記庫:使用該標(biāo)記庫首先要在相應(yīng)的頁面中引入標(biāo)記庫定義文件,如:<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>,具體的標(biāo)記有: Empty: 屬性有name、property、scope。 Equal: 屬性有cookie、header、name、parameter、property、scope、value。其中cookie和header、parameter是獨立使用的。Name和property、scope結(jié)合使用,是相對系統(tǒng)中的bean的。如果是系統(tǒng)中某一個簡單的參數(shù),可以用name和scope結(jié)合就可以了。 Forward: 屬性只有name。 GreaterEqual: 屬性和equal一樣。 GreaterThan:屬性和equal一樣。 LessEqual: 屬性和equal一樣。 LessThan: 屬性和equal一樣。 NotEmpty: 屬性和empty一樣。 Match: 屬性和equal一樣。 NotMatch:屬性和equal一樣。 NotEqual: 屬性和equal一樣。 NotPresent: 屬性有coolie、header、name、property、parameter、scope、role、user。 Present:和notPresent一樣。 MessageNotPresent:屬性有message、name、property。 MessagePresent: 和messageNotPresent一樣。 Iterate: 屬性有collection、id、indexId、scope、name、property、length、offset、type。 ¨ 數(shù)據(jù)庫訪問,struts提供自己的數(shù)據(jù)源配置和管理器,但在版本1.0和1.1中相應(yīng)的管理方式是不一樣的。這里我強烈建議使用j2ee中的相關(guān)數(shù)據(jù)源配置情況。 ¨ 文件上傳,struts提供了類org.apache.struts.upload.FormFile,只要我們在ActionForm中提供具有該類型的字段,然后在Action中進行處理就可以了。 ¨ 簡單bbs的實現(xiàn)樣例代碼(基于struts1.0),要索取代碼請給我發(fā)郵件luopc@edu-edu.com.cn 。 |
|
|