定义了Action类,接下来要干什么?要去struts.xml中配置这个Action类;Action类处理完以后,返回逻辑视图名称,如何映射到物理视图?又要去struts.xml配置中寻找映射。Struts2运行的每一步都需要围绕这个struts.xml,而这也是Struts2这个框架设计的关键,为了尽最大程度、最大努力的解耦每个模块,每个模块之间的关联基本上都是通过配置文件来搞定的,所以这些配置文件在Struts2中地位可见一斑,这篇文章就对Struts2框架中经常见到的配置文件进行总结,能够通过这些配置文件,整体上了解Struts2的脉络。
我们在开发,阅读一些文章的过程中,经常会碰到以下几个配置文件:
接下来就逐一对这些配置文件进行讲解和总结。
从名字就能看出来,这是一个默认的配置文件,也是基本配置文件;在后续的学习过程中,你会发现很多配置项的默认值,很多框架最基本的配置都是在该文件中;但是,我们几乎不会直接和这个文件打交道,甚至有的人都不知道这个文件在哪里。现在你可以使用解压缩工具查看 struts2-core-2.3.24.1.jar
这文件,在 struts2-core-2.3.24.1.jar
文件中,可以发现struts-default.xml配置文件的身影。比如Action的默认处理类就是在该配置文件中配置的,配置如下:
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
由于在该配置文件中的配置是最基本的配置,我们可以在后续总结的配置文件中覆盖默认配置。由于配置太多,在后续的学习中,我们遇到一个总结一个。
从名字也能看出,这个配置文件是Struts2框架插件的配置文件,由于Struts2框架有很多丰富的插件,所以很多在struts-default.xml配置文件中定义的默认值对于这些插件来说,已经不能胜任了,所以只好在插件的struts-plugin.xml配置文件中覆盖它们,就是这样,如果你亲自去写一个Struts2的插件,你就会明白这一切,就是这样,这个配置文件就是来干这个事情的。
你会从你下载的Struts2的安装包的lib/目录下,发现很多类似这样 struts2-xxx-plugin-xxx.jar
命名的Jar包,就是这些插件,你可以使用解压缩工具查看这些Jar包,你就会发现struts-plugin.xml配置文件。
这个文件太重要了,看完这篇《 struts2学习之初见struts2 》,你就会知道struts.xml这个配置文件的重要性了。
我们可以在struts.xml中配置开发的Action类,配置逻辑视图与物理视图的映射,配置常量值等。我们基于Struts2开发的Web应用,基本上大部分的配置都会在struts.xml中。有的时候,我们在读别人的代码时,也会根据struts.xml中的配置,理清思路。后续的文章中还会用到struts.xml配置文件,到时候再具体说说如何在该文件中进行配置。
该文件是常量配置文件,该配置文件定义了Struts2框架的大量常量,这些常量对于整个Struts2应用整体都起作用,我们可以通过改变这些常量来满足应用的需求。
struts.properties文件是一个标准的Properties文件,该文件包含了一系列的key-value对,每个key就是一个Struts2常量,该key对应的value就是一个Struts2的常量值,例如:
### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data # struts.multipart.parser=cos # struts.multipart.parser=pell # struts.multipart.parser=jakarta-stream struts.multipart.parser=jakarta # uses javax.servlet.context.tempdir by default struts.multipart.saveDir= struts.multipart.maxSize=2097152
在struts2-core-2.3.24.1.jar包的 /org/apache/struts2
目录下,有一个 default.properties
文件,该文件内部为Struts2的所有常量都指定了默认值,我们可以通过查看该文件来了解Struts2所支持的常量。但是很多时候,我们都看不到struts.properties配置文件,或者说不使用struts.properties配置文件,而是直接将常量配置到了struts.xml配置文件中,例如:
<constant name="struts.custom.i18n.resources" value="jellythink" />
对于web.xml就无须多说了,作为整个Web应用的配置文件,在总结JSP和Servlet的时候,就已经说过了,这里就不累述了,不熟悉的朋友,就翻翻我以前总结的文章吧。
在基于struts2框架进行开发时,我们需要配置很多常量,我们经常需要使用这些常量来管理应用的运行,下面来说说如何配置这些常量。
首先,你需要知道,在struts2框架中,有很多的常量,这些常量都有默认的值,而这些默认值都配置在 default.properties
文件中;我们可以根据我们应用的需要,覆盖 default.properties
中定义的常量。
其次,如何覆盖呢?我们可以在struts.properties配置文件中定义常量,从而实现覆盖;也可以在struts.xml配置文件中定义常量,实现覆盖,又或可以在struts-plugin.xml配置文件中进行覆盖;这么多配置文件都可以定义常量,那么又以谁的为准呢?
最后,就是关乎哪个配置文件中的常量配置才是最后有效的。通常,在struts2框架中是按照如下顺序加载struts2常量的:
就是按照顺序搜索配置的常量,如果在多个文件中配置了同一个Struts2常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值。对于Struts2中那么的常量配置,在后续的学习中,碰到一个就总结一个。
在开发大型应用的时候,经常会遇到一个问题,那么多Action,那么多的配置项,这些都是配置在struts.xml中的,随着应用的迭代,struts.xml文件越来越大,这个时候就需要一种能够将struts.xml进行分解,然后又能在struts.xml文件中包含分解出来的配置文件的功能。
是的,Struts2提供这种功能,当struts.xml文件过于庞大、臃肿的时候,我们可以将struts.xml文件分成struts-part1.xml、struts-part2.xml(子配置文件命名没有要求)等等子配置文件,例如:
struts-part1.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> ... </struts>
在struts.xml文件中这样包含其他配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <!-- 通过include元素导入其他配置文件 --> <include file="struts-part1.xml" /> ... </struts>
使用 <include file="..." />
方式,struts.xml可以包含其他的配置文件,而struts.xml文件由Struts2框架负责加载,从而可以将所有配置信息都加载进来。
这篇文章对Struts2框架中经常使用的一些配置文件进行了梳理。在这篇《 Struts2学习之初见Struts2 》文章中从全局把握了Struts2框架。而这篇《Struts2学习之配置文件》文章,就是从细节角度来把握Struts2框架,希望对你有帮助。
果冻想,认真玩技术的地方。
2016年01月06日 于呼和浩特。