【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例
部分博客,,先后實(shí)施了Struts抽樣。現(xiàn)在我們來(lái)分析這個(gè)樣本。具體解釋Struts1。
? ? ? ? ? ? ?
Struts1的幾個(gè)核心組件是值得我們注意的:?
? ? ? ? (1)ActionServlet(核心控制器)。??
? ? ? ? (2)ActionForm(接收頁(yè)面中傳過(guò)的數(shù)據(jù))。?
? ? ? ? (3)Action(是控制器,主要是從ActionForm中接收頁(yè)面?zhèn)鬟M(jìn)來(lái)的數(shù)據(jù),然后進(jìn)行邏輯處理)。?
? ? ? ? (4)ActionForward(頁(yè)面跳轉(zhuǎn)。跳轉(zhuǎn)到j(luò)sp組件)。?
? ? ? ? (5)ActionMapping(配置每一個(gè)Action所相應(yīng)的映射關(guān)系)。?
詳細(xì)的工作流程例如以下:?
? ? ? (1)ActionServlet是在web.xml中配置的一個(gè)自己主動(dòng)啟動(dòng)項(xiàng)。
當(dāng)webserver啟動(dòng)時(shí),也就同一時(shí)候?qū)嵗?ActionServlet類,ActionServlet會(huì)去初始化struts-config.xml的配置信息,并將其載入到內(nèi)存中。去實(shí)例化action-bean。actionform等對(duì)象。 ?
? ? ? (2)當(dāng)ActionServlet接收到來(lái)自client的請(qǐng)求時(shí),就會(huì)去檢索和去請(qǐng)求相匹配ActionMapping實(shí)例,假設(shè)沒(méi)有找到則返回500錯(cuò)誤.?
? ? ? (3)假設(shè)找到了就檢查相應(yīng)的ActionForm實(shí)例是否存在?a、假設(shè)存在,先把該實(shí)例相關(guān)數(shù)據(jù)reset清空一下。然后就把用戶提交的表單數(shù)據(jù)填充到ActionForm 實(shí)例中. b、假設(shè)不存在。就創(chuàng)建一個(gè)ActionForm對(duì)象,再把用戶提交的表單數(shù)據(jù)填棄到ActionForm實(shí)例中?
? ? ? (4)接著,再依據(jù)配置。看看是否要對(duì)表單進(jìn)行驗(yàn)證(validate),假設(shè)須要驗(yàn)證,則調(diào)用ActionForm的 validate()方法對(duì)表單進(jìn)行驗(yàn)證。a、假設(shè)驗(yàn)證沒(méi)通過(guò)。則返回錯(cuò)誤信息。?b、假設(shè)不須要驗(yàn)證。或者須要驗(yàn)證但validate方法返回null或者是返回一個(gè)不包括ActionMessage的ActionErrors對(duì)象的話。表明驗(yàn)證成功。
? ? ?(5)ActionServlet依據(jù)ActionMapping實(shí)例所包括的映射信息決定將請(qǐng)求發(fā)送給哪個(gè)Action,假設(shè)相應(yīng)的 ? Action實(shí)例不存在,則創(chuàng)建該Action的實(shí)例,然后調(diào)用該Action的execute()方法 ?
? ? ?(6)運(yùn)行完Action實(shí)例的execute()方法后,該方法會(huì)返回一個(gè)ActionForward對(duì)象。 ?
? ? ?(7)ActionServlet再把client發(fā)過(guò)來(lái)的請(qǐng)求。轉(zhuǎn)發(fā)給ActionForward對(duì)象所指向的JSP組件。 ?
? ? ?(8)ActionForward所指向的JSP組件再生成動(dòng)態(tài)網(wǎng)頁(yè),送回給client。
Struts1與傳統(tǒng)MVC有什么差別呢?
? ? ? ?傳統(tǒng)MVC(Model2)中:
? ? ? ? ? ? ? ? ? ? ??
? ? ? ?MVC設(shè)計(jì)模式中。先由客戶發(fā)送HTTP請(qǐng)求,控制器Servlet會(huì)接收用戶發(fā)送的全部請(qǐng)求。然后Servlet調(diào)用javabean。將顯示結(jié)果通過(guò)JSP頁(yè)面進(jìn)行顯示。
?
? ? ? 傳統(tǒng)MVC和Struts對(duì)比:
? ? ? ? ? ? ?
總結(jié):
? ? ? ??struts1中,依舊存在servlet(控制器)。但這個(gè)時(shí)候卻是ActionServlet。由struts-config.xml配置文件控制,action就相當(dāng)于MVC中一個(gè)個(gè)的servlet,由Action調(diào)用javabean完畢一個(gè)個(gè)詳細(xì)的操作業(yè)務(wù)。
? ? ? ? Struts1比傳統(tǒng)的MVC模式多了三個(gè)組件。即標(biāo)簽庫(kù),ActionForm和Action,關(guān)于Struts1和MVC的關(guān)系。我感覺(jué)MVC是一個(gè)標(biāo)準(zhǔn)。而Struts1是實(shí)現(xiàn)。MVC像一個(gè)接口,struts1實(shí)現(xiàn)了這個(gè)接口。
版權(quán)聲明:本文博主原創(chuàng)文章。博客,未經(jīng)同意不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://www.cnblogs.com/zfyouxi/p/4821402.html
總結(jié)
以上是生活随笔為你收集整理的【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《浪潮之巅》--百年帝国读后感
- 下一篇: 练习一:GitHub Desktop下载