JavaEE複習筆記(5)——Struts:MVC思想和Struts2的配置

MVC

1、Struts2由傳統的Struts1和WebWork兩個經典的MVC框架發展起來。

2、Java Web 應用的結構經歷了Model 1  Model 2 兩個時代。

3、在Model 1 時代下,整個Web應用幾乎全部由JSP頁面組成,JSP頁面接受處理客戶端的請求,對請求處理後直接作出響應。用少量的JavaBean來處理數據庫的連接、數據庫訪問等操作。

4、Model 1 的模式實現比較簡單,使用與快速開發小規模項目。但從工程化的角度看,它的侷限性非常明顯:JSP頁面身兼View 和Controller兩種角色,將控制邏輯好表現邏輯混雜在一起,從而導致代碼的重用性非常低,增加了應用的擴展性和維護的難度。

5、Model 2 已經是基於MVC架構的設計模式。在Model 2 架構中,Servlet 作爲前端控制器,負責接收客戶端發送的請求,在Servlet 中只包含邏輯和簡單的前端處理;然後,調用後端的JavaBean來完成實際的邏輯處理,最後轉發到響應的JSP頁面顯示邏輯。如下圖所示:

 

6、在Model 2 模式下,JSP不再承擔控制器的責任,它僅僅是表現層角色,僅僅用於將結果呈獻給用戶,JSP頁面的請求與Servlet(控制器)交互,而Servlet負責與後臺的JavaBean通信,在Model 2 模式下,模型(Model)JavaBean充當,視圖(View)JSP頁面充當,而控制器(Controller)則由Servlet充當。

7、從某種程度上講,Model 2 爲了降低系統後期維護的複雜度,卻導致前期開發的更高複雜度。

8、MVC思想將一個應用分成三個基本部分,Model(模型)View(視圖)Controller(控制器),這三個部分以最少的耦合協同工作,從而提高應用的可擴展性和可維護性。

9、在經典的MVC模式中,事件由控制器處理,控制器根據事件的類型改變模型或視圖,反之亦然。具體地說,每個模型對應一系列視圖列表,這種對應關係通常採用註冊來完成,即:把多個視圖註冊到同一個模型,當模型發生改變時,模型想所有註冊過的視圖發送通知,接下來,視圖從對應的模型中獲得信息,然後完成視圖的更新。

10、從設計模式的角度來看,MVC思想非常類似於觀察者模式,但與觀察者模式存在少許差別:觀察者模式先的觀察者和被觀察者可以是兩個相互對等的對象,但對於MVC而言,被觀察者往往只是單純的數據體,而觀察者則是單純的視圖頁面。

11、MVC的特點:

·多個視圖可以對應一個模型,按MVC設計模式,一個模型對應多個視圖,可以減少代碼複製及代碼的維護量,一旦模型發生改變,也易於維護。

·模型返回的數據與顯示邏輯分離。模型數據可以應用任何的顯示技術,例如使用JSP頁面、Velocity模板或者直接產生Excel文檔等。

·應用分爲三層,降低了各層之間的耦合,提供了應用的可擴展性。

·控制層的概念也很有效,由於它把不同 的模型和不同的視圖組合在一起,完成不同的請求,因此,控制層可以說是包含了用戶請求權限的概念。

·MVC更符合工程化管理的精神。不同的層各司其職,每一層組件具有相同的特徵,有利於通過工程化和工具化產生管理程序代碼。

配置Struts 2

1、需要添加到WEB-INF/lib目錄中的jar包:commons-fileupload-1.2.1.jarcommons-io-1.3.2.jarfreemarker-2.3.16.jarjavassist-3.7.ga.jarognl-3.0.jarstruts2-core-2.2.1.jarxwork-core-2.2.1.jar。除此之外,如果需要在Web應用中使用Struts2的更多特性,則需要將相應的JAR文件複製到WEB-INF/lib路徑下。

2、如果需要在DOS或者Shell窗口下手動編譯Struts2相關的程序,則還應該將struts2-core-2.2.1.jarxwork-core-2.2.1.jar添加到系統的CLASSPATH環境變量中。

3、web.xml文件中配置struts2:

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

4、使用Struts2功能至少需要一個struts.xml配置文件,這個配置文件默認放在Web應用的類加載路徑下(通常就是WEB-INF/classes路徑)。

5、Struts 2 的Action通常繼承於ActionSupport基類。

6、在struts.xml配置文件中配置Action:

<action name=login class=org.crazyit.app.action.LoginAction>

<result name=input>/login.jsp</result>

<result name=error>/error.jsp</result>

<result name=success>/welcome.jsp</result>

</action>

7、Struts 2 應用的開發步驟:

① 在web.xml文件中定義核心Filter來攔截用戶請求。

② 如果以POST方式提交請求,則定義包含表單數據的JSP頁面。如果僅僅是以GET方式發送請求,則無需經過這一步。

③ 定義處理用戶請求的Action類。

④ 配置Action

⑤ 配置處理結果和物理視圖資源之間的對應關係。

⑥ 編寫視圖資源。

8、當Servlet或Filter收到攔截用戶請求後,如果知道應該創建哪個Action實例?這裏有2種解決方案:

① 利用配置文件。

② 利用約定(Convention)

9、Struts 2 中的請求/響應流程:

 

10、常常把StrutsPrepareAndExecuteFilter稱爲核心控制器,把XxxAction稱爲業務控制器

11、在Struts 2 框架的控制下,用戶請求不再向JSP頁面發送,而是由核心控制器StrutsPrepareAndExecuteFilter來“調用”JSP頁面來生成響應,此處的調用不是直接調用,而是將請求forward到指定的JSP頁面。

12、struts.xml配置文件的最大作用就是配置Action和請求之間的對應關係,並配置邏輯視圖名和物理視圖資源之間的對應關係。除此之外,struts.xml文件還有一些額外的功能,例如Bean配置、配置常量、導入其他配置文件等。

13、可以使用struts.properties文件來管理常量,在struts2-core-2.2.1.jar壓縮文件的org/apache/struts2目錄下有一個default.properties文件,該文件裏爲struts2的所有常量都指定了默認值,可以通過查看該文件來了解struts2所支持的常量。

14、Struts 2 默認會加載類路徑下的struts.xmlstruts-default.xmlstruts-plugin.xml三個文件,其中struts.xml是開發者自定義的默認配置文件,struts-default.xml是Struts 2 框架自帶的配置文件,而struts-plugin.xml是Struts 2 插件的默認配置文件。

15、如下代碼在struts.xml中配置了一個常量,該常量即可代替struts.properties文件中爲Struts 2 配置屬性:

<constant name=struts.custom.i18n.resources values=mess />

16、在web.xml文件中配置StrutsPrepareAndExecuteFilter時也可以配置Struts 2 常量,此時採用爲StrutsPrepareAndExecuteFilter配置初始化參數的方式來配置Struts 2 常量,如下:

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.

StrutsPrepareAndExecuteFilter</filter-class>

<init-param>struts.custom.i18n.resources</init-param>

<param-value>mess</param-value>

</filter>

17、通常推薦在struts.xml文件中定義Struts 2 屬性,而不是在struts.properties文件中定義,之所以保留使用struts.properties文件定義屬性的方式,主要是爲了保持與WebWork的向後兼容性。

18、通常,Struts 2 框架按如下搜索順序加載Struts 2 常量:

·struts-default.xml

·struts-plugin.xml

·struts.xml

·struts.properties

·web.xml

如果多個文件配置了同一個Struts 2 常量,則後一個文件中的配置值會覆蓋前面文件中的對應值。

19、爲了避免struts.xml文件過於龐大、臃腫,提高struts.xml文件的可讀性,可以將一個struts.xml文件拆分成多個配置文件,然後在struts.xml文件中包含之:

<struts>

<include file=struts-part1.xml />

...

</struts>


發佈了75 篇原創文章 · 獲贊 80 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章