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

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

Figure 2: Configuration file scope for framework elements
需要在你的"web.xml"文件里為WEB應(yīng)用的配置FilterDispatcher Servlet過濾器:
它配置了基本的WEB應(yīng)用.剩下來的事就是使用"struts.properties"配置文件來自定義WEB應(yīng)用的執(zhí)行環(huán)境,通過"struts.xml"配置文件來配置WEB應(yīng)用的構(gòu)件.我們現(xiàn)在來看看這兩個(gè)配置文件的詳細(xì)描述.
The struts.properties File
這個(gè)配置文件提供了一個(gè)改變框架默認(rèn)行為的機(jī)制.一般情況下,你是不需要修改這個(gè)文件的,一個(gè)例外是你想配置一個(gè)對(duì)于開發(fā)者友好的調(diào)試環(huán)境.所有的包含在"struts.properties"配置文件中的配置項(xiàng),都可以使用"init-param"標(biāo)簽配置在"web.xml"文件中,同樣也可以使用"constant"標(biāo)簽配置在"struts.xml"配置文件中.
Properties允許修改如改變Freemarker選項(xiàng),替換action的映射類,決定是否重新加載XML配置文件,默認(rèn)使用的用戶界面主題等等.更多的關(guān)于properties的最新信息,請(qǐng)查閱位于
在開發(fā)環(huán)境中,這有一些配置項(xiàng)你可能需要更改:
"struts.xml"文件包含配置信息,你將修改它用于發(fā)布action,我們將在本章剩余的部分詳細(xì)的講解指定的元素.現(xiàn)在,讓我們看看不會(huì)改變的結(jié)構(gòu).
注:
根據(jù)你應(yīng)用的功能,可能會(huì)從你的應(yīng)用中移除"struts.xml"文件.配置上我們將在本章討論一種替換的方法,使用注釋,"web.xml"啟動(dòng)參數(shù),和交替的URL映射配置.
唯一的配置仍然需要"struts.xml"文件,如全局結(jié)果,異常處理,和自定義的攔截器棧.
這是一個(gè)XML文件,所以第一個(gè)元素是XML的版本和編碼信息.下一個(gè)則是XML的文檔類型定義(DTD).DTD提供了一些文件里的元素的結(jié)構(gòu),并最終用XML來解析和編輯.
我們現(xiàn)在到達(dá)了<struts>標(biāo)簽.這是Struts2具體配置的最外層標(biāo)簽.所有其他的標(biāo)簽都將被包含在這個(gè)當(dāng)中.
The Include Tag:
<include ... />標(biāo)簽用于將Struts2應(yīng)用模塊化時(shí)引入其他配置文件時(shí)使用并且它始終是<struts>標(biāo)簽的子標(biāo)簽.它僅僅包含一個(gè)"file"屬性,用于提供被引入的文件的名稱,那個(gè)文件必須與"struts.xml"配置文件的結(jié)構(gòu)相同.例如,如果你想拆分一個(gè)計(jì)費(fèi)應(yīng)用的配置文件,你可以選擇按組將繳費(fèi),管理和報(bào)表配置到單獨(dú)的文件中:
引入文件時(shí),順序是重要的.來自引入文件的信息將在文件中引入標(biāo)簽的位置開始有效.因此,使用一個(gè)配置在另一個(gè)文件中的標(biāo)簽,這個(gè)引入的配置必須出現(xiàn)在被引用之前.
有一些文件你是必須明確的引入,還有一些文件是自動(dòng)引入的.比如說"struts-default"和"struts-plugin.xml".兩者都包含了默認(rèn)的結(jié)果類型,攔截器,攔截器棧,包,以及WEB應(yīng)用執(zhí)行環(huán)境的配置信息(也可以配置在"struts.properties"文件中)的配置.區(qū)別在于"struts-default.xml"文件提供的是Struts2的核心配置,而"struts-plugin.xml"提供的是詳細(xì)插件的配置.每個(gè)插件JAR文件中都應(yīng)包含一個(gè)"struts-plugin.xml"文件,所有這些都將在啟動(dòng)的時(shí)候加載.
上一章:Starting Struts2--Where Struts2 fits into the Web Paradigm
下一章:Starting Struts2--Core Components(2)
我們知道在概念方面意味著什么,但在執(zhí)行層面意味著什么?這個(gè)模型-視圖-控制器模式在Struts2中被實(shí)現(xiàn)成了五個(gè)核心部分--actions,攔截器,值棧/OGNL,結(jié)果類型和結(jié)果/視圖技術(shù).

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

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