|
今天,吳老給我們講了Struts的第一節(jié)課,感覺還是不錯(cuò)的,順便總結(jié)下!
Struts的簡(jiǎn)介
Struts是建立在MVC框架上面的更深層的封裝,要是說到MVC就要提下什么是MVC了!
MVC是模型二,也是一個(gè)設(shè)計(jì)模式,M代表了Model 模型層,View是視圖層 Control 控制器
而在我們前段時(shí)間所做的網(wǎng)上書城項(xiàng)目,就是Struts的一個(gè)雛形,如果,那個(gè)框架的原理知道了,我想Struts對(duì)你來說也是很簡(jiǎn)單的!那么,唯一幾點(diǎn)不同的呢!
1.以前我們所寫的路徑映射文件是在一個(gè)txt文件里面的,而現(xiàn)在把它放到了xml文檔里面來了,我想在這里我就不再說xml文檔對(duì)于我們來說有什么優(yōu)勢(shì)了吧!
2.出現(xiàn)了formbean替代了我們以前所寫的vo對(duì)象了,而且,struts在這里也為我們封裝了form對(duì)象,也就是說vo對(duì)象的所有值我們不用去管,只要我們的配置文件寫對(duì)了,那么我們的formbean對(duì)象會(huì)自動(dòng)的封裝。
3.出現(xiàn)了action拆分了service,以前我們的獲取數(shù)據(jù)和操作業(yè)務(wù)都是在service里面來做的,但是我們現(xiàn)在要改變一個(gè)觀念,就是我們不能在action里面寫業(yè)務(wù)了,業(yè)務(wù)要提取出來放到service里面來,action的職責(zé)就是傳輸數(shù)據(jù)的,當(dāng)然我們的form對(duì)象也只能傳到service,不能將form對(duì)象傳到我們的持久層。這也就是一個(gè)典型的失血模型了,業(yè)務(wù)對(duì)象只做業(yè)務(wù),實(shí)體對(duì)象只有屬性和get、set方法。
那么,我們來看看我們的struts的核心配置文件吧
struts-config.xml介紹
<?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software
Foundation//DTD Struts Configuration 1.2//EN" "http://struts./dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources
/>
<form-beans>
<form-bean
name="login" type="com.lovo.form.LoginForm">
name隨便起個(gè)名字,type是指具體是那個(gè)form類
</form-bean>
</form-beans>
<global-exceptions
/>
<global-forwards
/>
<action-mappings>
<action
path="/login" type="com.lovo.action.LoginAction" name="login"
scope="request">
path是請(qǐng)求路徑,type是指具體的哪個(gè)action,name是指關(guān)聯(lián)那個(gè)form對(duì)象,scope是指作用域的范圍
<forward
name="success"
path="/index.jsp"></forward>
<forward
name="error"
path="/login.jsp"></forward>
name是指,action所返回的name字符串,path是指要跳轉(zhuǎn)的頁面
</action>
</action-mappings>
<message-resources
parameter="com.lovo.struts.ApplicationResources" />
國際化文件
</struts-config>
還有一個(gè)重要的東西,就是Struts的執(zhí)行流程,這個(gè)如果你想了解Struts的實(shí)現(xiàn)機(jī)制的話,我想這個(gè)東西你是必須知道的!
那么,我們來看下,Struts的執(zhí)行步驟,它的執(zhí)行過程又是如何?
1.web容器加載web.xml文件,并把Struts-config對(duì)象加載到內(nèi)存中。
2.所有形如*.do的請(qǐng)求(根據(jù)web.xml中的相關(guān)配置)將提交給ActionServlet,最終將調(diào)用其process方法。process方法的主要工作
有三:根據(jù)請(qǐng)求信息獲知所請(qǐng)求的模塊名稱,從ServletContext中獲得與請(qǐng)求模塊對(duì)應(yīng)的的ModuleConfig對(duì)象,并存儲(chǔ)到request中。
根據(jù)模塊信息獲得相應(yīng)的RequestProcessor對(duì)象,一個(gè)模塊對(duì)應(yīng)一個(gè)RequestProcessor對(duì)象,RequestProcessor對(duì)象將關(guān)聯(lián)與所屬
模塊對(duì)應(yīng)的ModuleConfig對(duì)象。調(diào)用RequestProcessor對(duì)象的process方法,將request和response作為參數(shù)傳遞給它。
3.調(diào)用自己的 processPreprocess(request,
response)方法,該方法不進(jìn)行任何操作,用于子類重寫擴(kuò)展其功能。
獲得與請(qǐng)求地址所匹配的ActionMapping對(duì)象,AcionMapping對(duì)象用于封裝一個(gè)特定acion的配置信息。
根據(jù)ActionMapping中的配置信息獲得Action對(duì)象和ActionForm對(duì)象(該對(duì)象將緩存到request或session中),并將表單數(shù)據(jù)填充到ActionForm中,
然后根據(jù)ActionMapping的配置決定是否驗(yàn)證ActionForm,如果驗(yàn)證,將調(diào)用ActionForm的validate方法,若其返回的ActionErros
對(duì)象中包含ActionMessage對(duì)象則表示驗(yàn)證失敗,將轉(zhuǎn)向action配置信息input屬性所指示的地址。如果ActionForm無需驗(yàn)證或驗(yàn)證
4.通過將創(chuàng)建并緩存與請(qǐng)求地址匹配的Action對(duì)象,將ActionMapping對(duì)象、ActionForm對(duì)象、request和response作為參數(shù)調(diào)用其
execute方法。根據(jù)Action對(duì)象的execute方法返回的ActionForward對(duì)象,將請(qǐng)求轉(zhuǎn)發(fā)或重定向到該ActionForward所封裝的地址。
應(yīng)該是這個(gè)樣子。參考資料來自網(wǎng)上!
|