我们知道在概念方面意味着什么,但在执行层面意味着什么?这个模型-视图-控制器模式在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>
<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
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的最新信息,请查阅位于http://struts.apache.org/2.x/docs/strutsproperties.html的Struts2的Wiki.
一个默认的名为"default.properties"配置文件包含在发行版的Struts2-Core JAR文件中.想要修改一个配置项,只需在你项目的源文件的类路径的根目录里创建一个名为"struts.properties"的文件.之后,添加你想修改的配置项.新的值将覆盖掉默认值.
在开发环境中,这有一些配置项你可能需要更改:
- struts.i18n.reload = true -- 能够重新加载国际化文件

