Struts framework根據(jù)配置文件使得ServletAction,ActionMapping,Action,ActionForm這幾個(gè)不同層次的組件相互交互,協(xié)調(diào)的工作。這些配置文件是在系統(tǒng)啟動(dòng)的時(shí)候,讀入并保存于內(nèi)存中,供控制器使用的。
Struts framework主要包括三部分的配置描述,一個(gè)是指定有關(guān)Struts Controller及其相關(guān)的的配置描述(Initialization Parameters),一個(gè)是對(duì)struts tag lib的描述,一個(gè)是Struts組件(ActionMapping,Action,ActionForm)之間相互映射協(xié)調(diào)的關(guān)系
因?yàn)镾truts Controller的主要類(lèi)ActionServlet是繼承自HttpServlet,所以必須像配置一個(gè)Servlet那樣在部署描述符(Web.xml )中配置ActionServlet類(lèi)及其訪問(wèn)映射。
當(dāng)?shù)谝淮蝿?chuàng)建基于Struts的Web應(yīng)用程序時(shí),將為您創(chuàng)建一個(gè)部署描述符,這通常就足夠了。該文件包括下列條目:
l、<servlet>條目定義用于Web應(yīng)用程序的servlet (在本例中,這是唯一的servlet):
— <servlet-name> 和<servlet-class>指示ActionServlet (標(biāo)識(shí)為“操作”)接收HTTP請(qǐng)求并確定如何響應(yīng)。
— <init-param>表示servlet初始化參數(shù).
— “config”指示ActionServlet的行為由指定的配置文件來(lái)指導(dǎo),該配置文件通常具有以下名稱(chēng):
\WEB-INF\struts-config.xml
— “debug”具有整數(shù)值,它指示將有關(guān)處理的詳細(xì)信息寫(xiě)至控制臺(tái)的程度。“0”表示不生成任何Debug信息。
— “detail”具有整數(shù)值,它指示將“映射”詳細(xì)信息(如后面所述)寫(xiě)至控制臺(tái)的程度。
― <load-on-startup>導(dǎo)致在啟動(dòng)應(yīng)用程序時(shí)裝入servlet。
— <servlet-mapping>元素標(biāo)識(shí)這樣的命名模式:當(dāng)命名模式由URL進(jìn)行匹配時(shí),Web服務(wù)器就將控制權(quán)移交給ActionServlet??紤]下面各種情況:
― 訪問(wèn)了ActionServlet,原因是“操作”(<servlet-mapping>中的<servlet-name>元素的內(nèi)容)與“操作”(<servlet>中的<servlet-name>元素的內(nèi)容)相匹配。
— <servlet-mapping>元素指定URL的結(jié)尾的命名模式。每個(gè)URL的開(kāi)頭都是應(yīng)用程序上下文路徑。按照慣例,ActionServlet調(diào)用對(duì)象以響應(yīng)與命名模式“*.do”(其中“*”是通配符)一致的URL。
— <welcome-file-list>元素指示獲得初始控制權(quán)的特定于應(yīng)用程序的代碼;在本例中,Web服務(wù)器直接從Web Content目錄中調(diào)用index.jsp。
— <error-page>元素指示顯示哪個(gè)JSP來(lái)響應(yīng)錯(cuò)誤;在本例中,錯(cuò)誤為如下所示:
― 404 (找不到資源)
― 500 (Web服務(wù)器內(nèi)部發(fā)生錯(cuò)誤)
每個(gè)<taglib>元素都使相對(duì)URL(相對(duì)于Web.xml)與標(biāo)記庫(kù)描述符(相對(duì)于Web應(yīng)用程序根目錄)相關(guān)聯(lián)。每個(gè)JSP都可以使用同一個(gè)URL來(lái)表示給定的標(biāo)記庫(kù),而Web.xml確定引用了哪個(gè)文件。
有關(guān)struts tag lib的配置描述
如果你的web application打算使用Struts的taglib,那么你有必要在web.xml中對(duì)struts taglib進(jìn)行配置描述。
有關(guān)Struts Action Mapping的配置描述
作為先前描述的web.xml設(shè)置的結(jié)果,Web應(yīng)用程序服務(wù)器將請(qǐng)求的一個(gè)子集按路徑發(fā)送至ActionServlet,它通常調(diào)用一系列操作和JSP。ActionServlet的響應(yīng)是基于配置文件struts-config.xml的內(nèi)容的。有關(guān)其DTD文檔的描述,請(qǐng)參考這里。
一般struts-config(version1.1)包含了如下幾個(gè)部分:
(1)form-bean
(2)global-forwards
(3)action-mappings
(4)data-sources
對(duì)于這樣的一個(gè)請(qǐng)求(例如,表示為“/login.do”),Struts框架將會(huì)執(zhí)行下列步驟:
1、 尋找操作類(lèi)對(duì)象(繼承org. apache.struts.action.Action的類(lèi))
2、 ActionServlet調(diào)用操作類(lèi)對(duì)象的執(zhí)行方法
操作類(lèi)中的執(zhí)行方法的特征符為如下所示:
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
? 映射對(duì)象(ActionMapping),它包含指示如何響應(yīng)方法的每個(gè)可能結(jié)果的規(guī)則(“映射”)
? Struts表單bean(ActionForm),它保存發(fā)送至HTML表單或接收自HTML表單的數(shù)據(jù)
? 請(qǐng)求和響應(yīng)對(duì)象(HttpServletReques/ HttpServletResponse)
3、 從執(zhí)行方法返回ActionForward對(duì)象,用于指導(dǎo)ActionServlet接著訪問(wèn)哪個(gè)操作類(lèi)或JSP
返回的ActionForward對(duì)象中的信息取決于兩個(gè)值:
? 方法的結(jié)果(如在“成功”或“故障”等字符串中所述)
? 映射對(duì)象,它包含從Struts配置文件中讀取的信息
要弄明白某些運(yùn)行時(shí)關(guān)系,要明白struts-config.xml該文件包括下面的一組條目:
? <form-beans>標(biāo)記標(biāo)識(shí)每個(gè)表單bean
? <action-mappings>標(biāo)記包括用于指導(dǎo)應(yīng)用程序流的信息,每個(gè)<action>子標(biāo)記都使相對(duì)URL與操作類(lèi)和潛在的后續(xù)操作相關(guān)。
Form-bean元素
Struts配置文件中的一個(gè)示例<form-bean>子元素為如下所示:
<form-bean name=“registerForm” type=“strutscommon.RegisterForm”/>
每個(gè)<form-bean>子元素都包括下列屬性:
name
表單bean的名稱(chēng),稍后在配置文件中會(huì)用到。ActionServlet舉例說(shuō)明了該bean(如果需要的話)并在將對(duì)bean的引用存儲(chǔ)在請(qǐng)求或會(huì)話對(duì)象中時(shí)將該名稱(chēng)用作鍵。
type
類(lèi)的全限定名稱(chēng),它繼承org.apache.struts.action.ActionForm該類(lèi)必須在類(lèi)路徑中。接受“Struts貿(mào)易樣本”中的注冊(cè)的表單bean包括HTML注冊(cè)表單中每個(gè)字段的getter 和setter方法。該bean還包括驗(yàn)證方法,如下節(jié)“驗(yàn)證”中所述。
Action元素
Struts配置文件中的一個(gè)示例<action>元素為如下所示:
<action path=“/register”
type=“strutsEGL.RegisterAction”
name=“registerForm”
input=“/register.jsp”
scope=“request”
<forward name=“success”path=“/home.do”/>
< forward name=“failure”path=“/register.jsp”/>
</action>
每個(gè)<action>元素都包括下列屬性中的某些屬性或所有屬性:
path
將請(qǐng)求指定為非限定URL,不帶文件擴(kuò)展名(例如,“/register”)請(qǐng)求是根據(jù)<action>元素中的其它屬性來(lái)處理的,并且是用戶輸入的結(jié)果或者是在different<action>元素中標(biāo)識(shí)的轉(zhuǎn)發(fā)的結(jié)果。
type
指定在發(fā)出請(qǐng)求時(shí)調(diào)用其執(zhí)行方法的操作類(lèi)的全限定名。該類(lèi)必須在類(lèi)路徑中。
注:不指定要實(shí)例化的類(lèi),可以通過(guò)使用forward屬性來(lái)轉(zhuǎn)發(fā)請(qǐng)求,該屬性在“Struts貿(mào)易樣本”中未使用,并且與后面描述的<forward>子元素不相同。
name
用于保存發(fā)送至HTML表單或接收自HTML表單的數(shù)據(jù)表單bean的名稱(chēng)。
input
指定相對(duì)URL(例如,“/register.do”或“/index.jsp”)必須包括后綴,
如果表單bean的驗(yàn)證方法指示發(fā)生了輸入錯(cuò)誤,則會(huì)調(diào)用URL;有關(guān)詳細(xì)信息,參見(jiàn)下節(jié)的“驗(yàn)證”。
scope
指定將對(duì)表單 bean的引用存儲(chǔ)在哪個(gè)作用域中。其值為“會(huì)話”(缺省值)或“請(qǐng)求”。
Struts配置文件中的每個(gè)<action>元素還包括子元素<forward>,它指定從方法結(jié)果至后續(xù)調(diào)用的映射。每個(gè)<forward>子元素都包括下列屬性
name
指定導(dǎo)致在運(yùn)行時(shí)使用當(dāng)前映射的字符串(例如,“success”),但是
只限于以下情況:在 type 中引用的操作類(lèi)的執(zhí)行方法使用完全相同
的字符串來(lái)配置返回至ActionServlet的 ActionForward對(duì)象。下面
的執(zhí)行方法不是很重要,但是會(huì)導(dǎo)致使用“success”映射:
public ActionForward exectue(
ActionMapping mapping,
ActoinForm form,
HttpServletRequest request,
HttpServletResponse response)
Throws IOException,ServletException
{
ActionForward forward=new ActionForward();
Forward=mapping,findForward(“success”);
return(forward);
}
path
指定非限定URL(例如,“/home.do” 或“/index.jsp”)必須包括文件擴(kuò)展名,僅當(dāng)使用當(dāng)前映射時(shí)才會(huì)調(diào)用該URL,轉(zhuǎn)發(fā)操作類(lèi)是根據(jù)different<action>元素中的屬性來(lái)處理的,尤其是,在其path屬性標(biāo)識(shí)相同URL的<action>元素中。
有必要提一下的是,在struts1.1中,提出了對(duì)Multiple Application Support。在struts的早先版本中,只有一個(gè)struts配置文件,一般叫struts-config.xml。但是,對(duì)于越來(lái)越復(fù)雜的應(yīng)用系統(tǒng)的發(fā)展,只有一個(gè)地方存放這個(gè)一個(gè)文件,對(duì)大型項(xiàng)目來(lái)說(shuō),使用和修改這個(gè)配置文件,使其成為了一個(gè)應(yīng)用的瓶頸問(wèn)題。在struts1.1中,你可以定義多了配置文件協(xié)同工作。