MVC是Model—View—Controler的簡稱。即模型—視圖—控制器。MVC是一種設計模式,它強制性的把應用程序的輸入、處理和輸出分開。
視圖: 視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關的數據,并接受用戶的輸入。視圖不進行任何業務邏輯處理。
模型: 模型表示業務數據和業務處理。相當于JavaBean。一個模型能為多個視圖提供數據。這提高了應用程序的重用性。
控制器: 當用戶單擊Web頁面中的提交按鈕時,控制器接受請求并調用相應的模型去處理請求。然后根據處理的結果調用相應的視圖來顯示處理的結果。
MVC的處理過程:首先控制器接受用戶的請求,調用相應的模型來進行業務處理,并返回數據給控制器。控制器調用相應的視圖來顯示處理的結果。并通過視圖呈現給用戶。
Struts2框架是一個按照MVC設計模式設計的WEB層框架,是在Struts 1和WebWork的技術基礎上進行了合并的全新的框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設計也使得業務邏輯控制器能夠與ServletAPI完全脫離開。
我們可以把Struts2理解為一個大大的Servlet,而這個Servlet就是ActionServlet。Struts2在處理客戶端請求時,會先讀取web.xml配置文件,根據前端控制器將符合條件的請求分給各個不同的Action處理。在此之前,ActionServlet會把數據封裝成一個JavaBean。
Struts2框架提供了許多的攔截器,在封裝數據的過程中,我們可以對數據進行一些操作,例如:數據校驗等等。當Action執行完后要返回一個結果視圖,這個結果視圖可以跟據struts2的配置文件中配置,選擇轉發或者重定向。
1.在軟件設計上Struts2的應用可以不依賴于Servlet API和struts API。 Struts2的這種設計屬于無侵入式設計;
2.攔截器,實現如參數攔截注入等功能;
3.類型轉換器,可以把特殊的請求參數轉換成需要的類型;
4.多種表現層技術,如:JSP、freeMarker、Velocity等;
5.Struts2的輸入校驗可以對指定某個方法進行校驗;
6.提供了全局范圍、包范圍和Action范圍的國際化資源文件管理實現;
1.Struts2框架是通過Filter啟動的,即StrutsPrepareAndExecuteFilter,此過濾器為struts2的核心過濾器;
2.StrutsPrepareAndExecuteFilter的init()方法中將會讀取類路徑下默認的配置文件struts.xml完成初始化操作。struts2讀取到struts.xml的內容后,是將內容封裝進javabean對象然后存放在內存中,以后用戶的每次請求處理將使用內存中的數據,而不是每次請求都讀取struts.xml文件。
1)通過ActionContext可以獲得request,application,session三個作用域(struts2實際上是通過適配器來把servlet的api轉換為一個map,并把這些map放在ActionContext里面)。
2)通過ActionContext的子類ServletActionContext去獲取原滋原味的API。
3)可以通過實現ServletRequestAware接口,重寫里面的setServletRequest方法可以獲得request,實際上是通過set的依賴注入。
1)感嘆號定位方法(動態方法)。
2)在xml配置文件中通過配置多個action,使用action的method指定方法。
3)使用通配符(*)匹配方法。
一共10種:
dispatcher是默認的結果類型,把控制權轉發給應用程序里的某個資源。
redirect把響應重定向到另一個資源(包括一個外部資源)
redirectAction把響應重定向到另一個 Action
freemarker、velocity、chain、httpheader、xslt、plainText、stream
1.ActionContext是當前的Action的上下文環境,通過ActionContext可以獲取到request、session、ServletContext等與Action有關的對象的引用;
2.ServletContext是域對象,一個web應用中只有一個ServletContext,生命周期伴隨整個web應用;
3.pageContext是JSP中的最重要的一個內置對象,是JSP四個域對象中最小的。可以通過pageContext獲取其他域對象的應用,同時它是一個域對象,作用范圍只針對當前頁面,當前頁面結束時,pageContext銷毀。
常量可以在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 是一個基于JAVA EE的MVC
B. Struts2的框架配置文件是struts-configxml
C. Struts2的控制組建核心包括核心控制和業務控制器
D. 在Struts中解決中文亂碼可以通過修改struts。I18n。encoding的值為GBK來實現
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類繼承其框架中的Action父類,struts2則不一定需要繼承,可以是POJO類
B. struts1的Action不是線程安全的,struts2的Action是線程安全的
C. struts1和struts2都使用ActionForm對象封裝用戶的請求數據
D. struts1使用OGNL表達式語言來支持頁面效果,struts2通過ValueStack技術使標簽庫訪問值
A. 每個Action對象實例擁有一個ValueStack對象
B. 每個Action對象實例擁有多個ValueStack對象
C. Action中封裝的需要傳入下一個頁面的值,這些值封裝在ValueStack對象中
D. ValueStack會在請求開始時創建,請求結束時消亡
A. 必須在WEB-INF/classes目錄下
B. 名字必須為strutss.xml
C. 配置Action時,必須配置包信息
D. 使用<forward>元素配置轉發
A. <const>
B. <constants>
C. <constant>
D. <constant-mapping>
A. struts2框架使用包來管理常量
B. struts2框架定義包時必須指定name屬性
C. struts2框架中配置包時,必須繼承自struts-default包,否則會報錯
D. struts2框架中使用包來管理Action
A. 使用ActionContext對象以解耦合的方式訪問Servlet API
B. 使用ServletActionContext對象以解耦合的方式訪問Servlet API
C. 使用ActionContext對象以耦合的方式訪問Servlet API
D. 使用ActionContext對象以耦合的方式訪問Servlet API
A. 普通的Action類可以實現
B. 繼承自Action接口的可以實現
C. 繼承自ActionSupport類可以實現
D. 繼承自ActionValidate類可以實現
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. 實現Interceptor接口
B. 實現AbstractionInceptor接口
C. 繼承Interceptor類
D. 繼承AbstractionInceptor類
A. <interceptor-ref>
B. <interceptor>
C. <intercep>
D. <defaull-interceptor-ref>
A. 取出符合選擇邏輯的第一個元素
B. 取出符合選擇邏輯的第=最后一個元素
C. 取出符合選擇邏輯的所有元素
D. 以上說法都不對
A. <s:property>
B. <s:iterator>
C. <s:logic>
D. <s:foreach>
A. ActionContext是OGNL上下文環境
B. StackContext是OGNL上下文環境
C. ValueStack是OGNL根
D. ActionContext是OGNL根