从一个struts开发者的角度来看,框架唯一必须的配置文件是web.xml,如上篇所说的0配置,它就只需要web.xml文件。通过web.xml文件,我们可以完全控制struts来配置它自身以及我们的应用程序。默认情况下,struts会装载一系列的内部配置文件来配置它自己,然后装载另外一系列的文件来配置应用程序,尽管只要一个web.xml文件就可以了,但是我们在开发一个完整的struts应用时通常并不会只使用一个web.xml配置文件,而是使用多个配置文件。下表列出了能够用于为我们的应用程序配置框架的的文件,有些配置文件是能够动态重新装载的。动态重载能够使我们的开发更具交互性,那么如何才能做到动态重载呢?
Struts允许我们可以动态的重新装载xml配置文件,也就是说在我们的开发过程中,我们可以重新配置action mapping,这个会对性能产生一点影响,因此这种做法不是很推荐。为了使用动态重载,我们需要在struts.properties文件加入如下一行代码:
struts.configuration.xml.reload=false
表1:struts配置文件一览表
文件名 | 是否可选 | 文件位置 | 作用 |
web.xml | no | /WEB-INF/ | Web部署描述符,包含了所有必须的框架组件 |
struts.xml | yes | /WEB-INF/classes | 主要配置文件,包含了拦截器,action-mappings等等 |
struts.properties | yes | /WEB-INF/classes | 框架的运行时属性 |
struts-default.xml | yes | /WEB-INF/lib/struts2-core.jar | 由struts提供的默认配置文件 |
struts-default.vm | yes | /WEB-INF/classes | 供velocity.properties参考的默认宏 |
struts-plugin.xml | yes | plug-in jar文件的根目录 | 可选的插件配置文件,格式同struts.xml |
velocity.properties | yes | /WEB-INF/classes | 覆盖默认的velocity配置 |
下面我们来详细看下表中的各个配置文件,因为在项目开发中只用到了前面四种配置文件,所以对后面3种就不作介绍了。
1.web.xml文件
对于开发JSP程序的人来说,这个文件再熟悉不过了,它通常被称为部署描述符,它代表了整个Java web应用程序的核心,很自然的它也是struts的核心部分之一。在web.xml文件中Struts定义了它的FilterDispatcher,这个Servlet过滤器负责初始化整个Struts框架请且处理所有的请求。这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些额外的xml配置文件,还有的会影响struts框架的行为。之前我们说配置一个Struts2环境的时候就讲了,配置一个Struts2的环境只需在web.xml文件中加上如下一段话即可:
<filter>
<filter-name>Struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这就是Struts所定义的FilterDispatcher。
除了FilterDispatcher外,Struts还提供了一个ActionContexCleanUp类,这个类 有什么作用呢?它的主要任务是当有其它一些过滤器要访问一个初始化好了的struts框架的时候,负责处理一些特殊的清除任务。
处理这个FilterDispatcher外,web.xml文件和我们以前所用的web.xml文件貌似就没什么区别了,实际上关于FilterDispatcher还有很多可以说的,以后再单独说咯。
2.struts.xml文件
框架的核心配置文件就是这个默认的struts.xml文件,在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。在通常的应用开发中,我们可能想为每个不同的模块单独配置一个struts.xml文件,这样也利于管理和维护。比如说我有一个模块叫做order,那么我这个模块所有的action相关信息配置在struts-order.xml中,还有一个模块叫member,那么我会把它的素有action相关信息配置在struts-member.xml中,那么我怎么告诉系统去装载这些文件呢?如下所示:
<struts>
<include file="struts-order.xml"/>
<include file="config-member.xml"/>
<package name="default" extends="struts-default">
</package>
</struts>
使用include标签就可以引入其它的struts配置文件了,配置文件将按照它们在struts.xml中出现的顺序被装载。
3.struts.properties
在Struts框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。要改变这些属性,只需在struts.properties文件中指定属性的key和value即可。属性文件可以放在任何一个包含在classpath中的路径上,但是通常我们都把它放在/WEB-INF/classes目录下面。我们可以在struts-default.properties文件中找到一个属性的列表。文档上说可以在struts2.jar中找到这个属性文件,可是我一直没找到,:(。它里面都是一些struts的默认属性,我们可以在struts.properties中覆盖这些默认的属性值。
4.struts-default.xml
struts-default.xml是一个基础配置文件,我们可以在struts2.jar中找到这个文件。struts-default.xml会自动包含(included)到struts.xml文件中,并为我们提供了一些标准的配置。鉴于struts-default.xml文件比较长,这里我就不把它的内容贴出来了,大家可以到struts2.jar中去找。
剩下的3个配置文件中struts-plugin.xml和struts.xml文件格式是差不多的,其它两个因为项目中没怎么用,所以这里就不写了。