MVC是Model—View—Controler的簡(jiǎn)稱(chēng)。即模型—視圖—控制器。MVC是一種設(shè)計(jì)模式,它強(qiáng)制性的把應(yīng)用程序的輸入、處理和輸出分開(kāi)。
視圖: 視圖是用戶(hù)看到并與之交互的界面。視圖向用戶(hù)顯示相關(guān)的數(shù)據(jù),并接受用戶(hù)的輸入。視圖不進(jìn)行任何業(yè)務(wù)邏輯處理。
模型: 模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)處理。相當(dāng)于JavaBean。一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。這提高了應(yīng)用程序的重用性。
控制器: 當(dāng)用戶(hù)單擊Web頁(yè)面中的提交按鈕時(shí),控制器接受請(qǐng)求并調(diào)用相應(yīng)的模型去處理請(qǐng)求。然后根據(jù)處理的結(jié)果調(diào)用相應(yīng)的視圖來(lái)顯示處理的結(jié)果。
MVC的處理過(guò)程:首先控制器接受用戶(hù)的請(qǐng)求,調(diào)用相應(yīng)的模型來(lái)進(jìn)行業(yè)務(wù)處理,并返回?cái)?shù)據(jù)給控制器。控制器調(diào)用相應(yīng)的視圖來(lái)顯示處理的結(jié)果。并通過(guò)視圖呈現(xiàn)給用戶(hù)。
Struts2框架是一個(gè)按照MVC設(shè)計(jì)模式設(shè)計(jì)的WEB層框架,是在Struts 1和WebWork的技術(shù)基礎(chǔ)上進(jìn)行了合并的全新的框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)差別巨大。Struts 2以WebWork為核心,采用攔截器的機(jī)制來(lái)處理用戶(hù)的請(qǐng)求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開(kāi)。
我們可以把Struts2理解為一個(gè)大大的Servlet,而這個(gè)Servlet就是ActionServlet。Struts2在處理客戶(hù)端請(qǐng)求時(shí),會(huì)先讀取web.xml配置文件,根據(jù)前端控制器將符合條件的請(qǐng)求分給各個(gè)不同的Action處理。在此之前,ActionServlet會(huì)把數(shù)據(jù)封裝成一個(gè)JavaBean。
Struts2框架提供了許多的攔截器,在封裝數(shù)據(jù)的過(guò)程中,我們可以對(duì)數(shù)據(jù)進(jìn)行一些操作,例如:數(shù)據(jù)校驗(yàn)等等。當(dāng)Action執(zhí)行完后要返回一個(gè)結(jié)果視圖,這個(gè)結(jié)果視圖可以跟據(jù)struts2的配置文件中配置,選擇轉(zhuǎn)發(fā)或者重定向。
1.在軟件設(shè)計(jì)上Struts2的應(yīng)用可以不依賴(lài)于Servlet API和struts API。 Struts2的這種設(shè)計(jì)屬于無(wú)侵入式設(shè)計(jì);
2.攔截器,實(shí)現(xiàn)如參數(shù)攔截注入等功能;
3.類(lèi)型轉(zhuǎn)換器,可以把特殊的請(qǐng)求參數(shù)轉(zhuǎn)換成需要的類(lèi)型;
4.多種表現(xiàn)層技術(shù),如:JSP、freeMarker、Velocity等;
5.Struts2的輸入校驗(yàn)可以對(duì)指定某個(gè)方法進(jìn)行校驗(yàn);
6.提供了全局范圍、包范圍和Action范圍的國(guó)際化資源文件管理實(shí)現(xiàn);
1.Struts2框架是通過(guò)Filter啟動(dòng)的,即StrutsPrepareAndExecuteFilter,此過(guò)濾器為struts2的核心過(guò)濾器;
2.StrutsPrepareAndExecuteFilter的init()方法中將會(huì)讀取類(lèi)路徑下默認(rèn)的配置文件struts.xml完成初始化操作。struts2讀取到struts.xml的內(nèi)容后,是將內(nèi)容封裝進(jìn)javabean對(duì)象然后存放在內(nèi)存中,以后用戶(hù)的每次請(qǐng)求處理將使用內(nèi)存中的數(shù)據(jù),而不是每次請(qǐng)求都讀取struts.xml文件。
1)通過(guò)ActionContext可以獲得request,application,session三個(gè)作用域(struts2實(shí)際上是通過(guò)適配器來(lái)把servlet的api轉(zhuǎn)換為一個(gè)map,并把這些map放在ActionContext里面)。
2)通過(guò)ActionContext的子類(lèi)ServletActionContext去獲取原滋原味的API。
3)可以通過(guò)實(shí)現(xiàn)ServletRequestAware接口,重寫(xiě)里面的setServletRequest方法可以獲得request,實(shí)際上是通過(guò)set的依賴(lài)注入。
1)感嘆號(hào)定位方法(動(dòng)態(tài)方法)。
2)在xml配置文件中通過(guò)配置多個(gè)action,使用action的method指定方法。
3)使用通配符(*)匹配方法。
一共10種:
dispatcher是默認(rèn)的結(jié)果類(lèi)型,把控制權(quán)轉(zhuǎn)發(fā)給應(yīng)用程序里的某個(gè)資源。
redirect把響應(yīng)重定向到另一個(gè)資源(包括一個(gè)外部資源)
redirectAction把響應(yīng)重定向到另一個(gè) Action
freemarker、velocity、chain、httpheader、xslt、plainText、stream
1.ActionContext是當(dāng)前的Action的上下文環(huán)境,通過(guò)ActionContext可以獲取到request、session、ServletContext等與Action有關(guān)的對(duì)象的引用;
2.ServletContext是域?qū)ο螅粋€(gè)web應(yīng)用中只有一個(gè)ServletContext,生命周期伴隨整個(gè)web應(yīng)用;
3.pageContext是JSP中的最重要的一個(gè)內(nèi)置對(duì)象,是JSP四個(gè)域?qū)ο笾凶钚〉摹?梢酝ㄟ^(guò)pageContext獲取其他域?qū)ο蟮膽?yīng)用,同時(shí)它是一個(gè)域?qū)ο螅饔梅秶会槍?duì)當(dāng)前頁(yè)面,當(dāng)前頁(yè)面結(jié)束時(shí),pageContext銷(xiāo)毀。
常量可以在struts.xml或struts.properties中配置,兩種配置方式如下:
1.在struts.xml文件中配置常量
<constant name="struts.action.extension" value="do"/>
2.在struts.properties中配置常量(struts.properties文件放置在src下):
struts.action.extension=do
A. Struts 是一個(gè)基于JAVA EE的MVC
B. Struts2的框架配置文件是struts-configxml
C. Struts2的控制組建核心包括核心控制和業(yè)務(wù)控制器
D. 在Struts中解決中文亂碼可以通過(guò)修改struts。I18n。encoding的值為GBK來(lái)實(shí)現(xiàn)
A <s:text>
B <s:error>
C <s:faild>
D <s:fielderror>
A. Action
B. ActionForm
C. ActionServlet
D. DispatchAction
A. struts2控制器組件
B. struts2配置文件
C. FilterDispatcher
D. Action
A. <package>
B. <action>
C. <form-bean>
D. <action-mapping>
A. struts1要求Action類(lèi)繼承其框架中的Action父類(lèi),struts2則不一定需要繼承,可以是POJO類(lèi)
B. struts1的Action不是線(xiàn)程安全的,struts2的Action是線(xiàn)程安全的
C. struts1和struts2都使用ActionForm對(duì)象封裝用戶(hù)的請(qǐng)求數(shù)據(jù)
D. struts1使用OGNL表達(dá)式語(yǔ)言來(lái)支持頁(yè)面效果,struts2通過(guò)ValueStack技術(shù)使標(biāo)簽庫(kù)訪(fǎng)問(wèn)值
A. 每個(gè)Action對(duì)象實(shí)例擁有一個(gè)ValueStack對(duì)象
B. 每個(gè)Action對(duì)象實(shí)例擁有多個(gè)ValueStack對(duì)象
C. Action中封裝的需要傳入下一個(gè)頁(yè)面的值,這些值封裝在ValueStack對(duì)象中
D. ValueStack會(huì)在請(qǐng)求開(kāi)始時(shí)創(chuàng)建,請(qǐng)求結(jié)束時(shí)消亡
A. 必須在WEB-INF/classes目錄下
B. 名字必須為strutss.xml
C. 配置Action時(shí),必須配置包信息
D. 使用<forward>元素配置轉(zhuǎn)發(fā)
A. <const>
B. <constants>
C. <constant>
D. <constant-mapping>
A. struts2框架使用包來(lái)管理常量
B. struts2框架定義包時(shí)必須指定name屬性
C. struts2框架中配置包時(shí),必須繼承自struts-default包,否則會(huì)報(bào)錯(cuò)
D. struts2框架中使用包來(lái)管理Action
A. 使用ActionContext對(duì)象以解耦合的方式訪(fǎng)問(wèn)Servlet API
B. 使用ServletActionContext對(duì)象以解耦合的方式訪(fǎng)問(wèn)Servlet API
C. 使用ActionContext對(duì)象以耦合的方式訪(fǎng)問(wèn)Servlet API
D. 使用ActionContext對(duì)象以耦合的方式訪(fǎng)問(wèn)Servlet API
A. 普通的Action類(lèi)可以實(shí)現(xiàn)
B. 繼承自Action接口的可以實(shí)現(xiàn)
C. 繼承自ActionSupport類(lèi)可以實(shí)現(xiàn)
D. 繼承自ActionValidate類(lèi)可以實(shí)現(xiàn)
A. Dispatcher
B. StrutsResultSupport
C. Support
D. Action
A. ${屬性名}
B. @{屬性名}
C. ${'屬性名'}
D. ${"屬性名"}
A. <s:text>
B. <s:message>
C. <s:textfile>
D. <s:resource>
A. 實(shí)現(xiàn)Interceptor接口
B. 實(shí)現(xiàn)AbstractionInceptor接口
C. 繼承Interceptor類(lèi)
D. 繼承AbstractionInceptor類(lèi)
A. <interceptor-ref>
B. <interceptor>
C. <intercep>
D. <defaull-interceptor-ref>
A. 取出符合選擇邏輯的第一個(gè)元素
B. 取出符合選擇邏輯的第=最后一個(gè)元素
C. 取出符合選擇邏輯的所有元素
D. 以上說(shuō)法都不對(duì)
A. <s:property>
B. <s:iterator>
C. <s:logic>
D. <s:foreach>
A. ActionContext是OGNL上下文環(huán)境
B. StackContext是OGNL上下文環(huán)境
C. ValueStack是OGNL根
D. ActionContext是OGNL根