我们知道在概念方面意味着什么,但在执行层面意味着什么?这个模型-视图-控制器模式在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的最新信息,请查阅位于http://struts.apache.org/2.x/docs/strutsproperties.html的Struts2的Wiki.
一个默认的名为"default.properties"配置文件包含在发行版的Struts2-Core JAR文件中.想要修改一个配置项,只需在你项目的源文件的类路径的根目录里创建一个名为"struts.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"文件,所有这些都将在启动的时候加载.