Posted on 2007-08-03 16:57
puras 閱讀(1572)
評論(0) 編輯 收藏 所屬分類:
Struts2.0
從一個高度層次來看,Strtsu2屬性pull-MVC(或是MVC2)框架;這與傳統的MVC框架略有不同,因為action的角色采用模型,而不是控制器,雖然這樣有一些重疊."pull"來自于視圖從action拉數據,而不是持有一個分開的可用模型對象.
我們知道在概念方面意味著什么,但在執行層面意味著什么?這個模型-視圖-控制器模式在Struts2中被實現成了五個核心部分--actions,攔截器,值棧/OGNL,結果類型和結果/視圖技術.

圖1:The MVC / Struts2 Architecture
圖1描述了從Struts2高度層面上的結構, 包含了模型,視圖和控制器.控制器是一個實現了Struts2里分派Servlet過濾器以及攔截器,模型實現的actions,視圖則是由結果類型和結果的組成.值棧和ONGL提供了一個通用的路線,鏈接和集成其他組件.
我們在這章討論一些通用的部分,將會有很多信息涉及到配置.配置WEB應用,配置actions,攔截器,結果等等.記住,這些說明只是為了提供如果完成的背景,或許不是最有效的配置應用的方式.在后面的章節我們將討論更加容易和更有效的方式以完成同樣的目標,使用約定俗成的配置,注釋和零配置插件.
在我們進入詳細講解核心構成之前我們先來討論一下全局的配置.
Configuration
在配置Struts2之前,你需要先下載發行版或是在你的Maven2的"pom.xml"文件中配置它的依賴關系:
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.0.6</version>
</dependency>
做完之后,Struts2應用的配置就可以分成三個獨立的文件,如圖2中所示.

Figure 2: Configuration file scope for framework elements
需要在你的"web.xml"文件里為WEB應用的配置FilterDispatcher Servlet過濾器:
1 <filter>
2 <filter-name>action2</filter-name>
3 <filter-class>
4 org.apache.struts2.dispatcher.FilterDispatcher
5 </filter-class>
6 </filter>
7 <filter-mapping>
8 <filter-name>action2</filter-name>
9 <url-pattern>/*</url-pattern>
10 </filter-mapping>
11
它配置了基本的WEB應用.剩下來的事就是使用"struts.properties"配置文件來自定義WEB應用的執行環境,通過"struts.xml"配置文件來配置WEB應用的構件.我們現在來看看這兩個配置文件的詳細描述.
The struts.properties File
這個配置文件提供了一個改變框架默認行為的機制.一般情況下,你是不需要修改這個文件的,一個例外是你想配置一個對于開發者友好的調試環境.所有的包含在"struts.properties"配置文件中的配置項,都可以使用"init-param"標簽配置在"web.xml"文件中,同樣也可以使用"constant"標簽配置在"struts.xml"配置文件中.
Properties允許修改如改變Freemarker選項,替換action的映射類,決定是否重新加載XML配置文件,默認使用的用戶界面主題等等.更多的關于properties的最新信息,請查閱位于
在開發環境中,這有一些配置項你可能需要更改:
- struts.i18n.reload = true -- 能夠重新加載國際化文件
- struts.devMode = true -- 能夠在開發模式下提供更全面的調試
- struts.configuration.xml.reload = true 能夠重新加載XML配置文件(適用于action),修改之后可以在Servlet容器里重新加載整個WEB應用
- struts.url.http.prot = 8080 -- 設置服務運行的端口(以便生成正確的URL)
The struts.xml File
"struts.xml"文件包含配置信息,你將修改它用于發布action,我們將在本章剩余的部分詳細的講解指定的元素.現在,讓我們看看不會改變的結構.
注:
根據你應用的功能,可能會從你的應用中移除"struts.xml"文件.配置上我們將在本章討論一種替換的方法,使用注釋,"web.xml"啟動參數,和交替的URL映射配置.
唯一的配置仍然需要"struts.xml"文件,如全局結果,異常處理,和自定義的攔截器棧.
這是一個XML文件,所以第一個元素是XML的版本和編碼信息.下一個則是XML的文檔類型定義(DTD).DTD提供了一些文件里的元素的結構,并最終用XML來解析和編輯.
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE struts PUBLIC
3 "-//Apache Software Foundation//DTD Struts Configuration
4 2.0//EN"
5 "http://struts.apache.org/dtds/struts-2.0.dtd">
6 <struts>
7 <package
8 name="struts2"
9 extends="struts-default"
10 namespace="/struts2">
11 …
12 </package>
13 </struts>
我們現在到達了<struts>標簽.這是Struts2具體配置的最外層標簽.所有其他的標簽都將被包含在這個當中.
The Include Tag:
<include ... />標簽用于將Struts2應用模塊化時引入其他配置文件時使用并且它始終是<struts>標簽的子標簽.它僅僅包含一個"file"屬性,用于提供被引入的文件的名稱,那個文件必須與"struts.xml"配置文件的結構相同.例如,如果你想拆分一個計費應用的配置文件,你可以選擇按組將繳費,管理和報表配置到單獨的文件中:
1 <struts>
2 <include file="billing-config.xml" />
3 <include file="admin-config.xml" />
4 <include file="reports-config.xml" />
5 …
6 </struts>
引入文件時,順序是重要的.來自引入文件的信息將在文件中引入標簽的位置開始有效.因此,使用一個配置在另一個文件中的標簽,這個引入的配置必須出現在被引用之前.
有一些文件你是必須明確的引入,還有一些文件是自動引入的.比如說"struts-default"和"struts-plugin.xml".兩者都包含了默認的結果類型,攔截器,攔截器棧,包,以及WEB應用執行環境的配置信息(也可以配置在"struts.properties"文件中)的配置.區別在于"struts-default.xml"文件提供的是Struts2的核心配置,而"struts-plugin.xml"提供的是詳細插件的配置.每個插件JAR文件中都應包含一個"struts-plugin.xml"文件,所有這些都將在啟動的時候加載.
上一章:Starting Struts2--Where Struts2 fits into the Web Paradigm下一章:
Starting Struts2--Core Components(2)