Struts2(三)配置详解
一、概述
Struts2提供了多种可选的配置文件形式。


其中,struts-default.xml和default.properties是框架级别的配置文件,这两个文件在Struts的核心JAR包中,它们将在应用程序启动时被struts的初始化程序读取并加载。而struts.xml和struts.properties是应用级别的配置文件,它的结构与框架级别的相同,但是其中的定义会覆盖框架级别的定义。除此之外,还可以通过Struts2的插件来进行应用级别的配置定义,这一配置定义在插件所在JAR包的根目录,并以struts-plugin.xml的文件名形式出现。
配置文件的加载顺序:
public void init()
{
if (configurationManager == null) {
configurationManager = createConfigurationManager(DefaultBeanSelectionProvider.DEFAULT_BEAN_NAME);
}
try {
init_FileManager();
init_DefaultProperties(); // [1]
init_TraditionalXmlConfigurations(); // [2]
init_LegacyStrutsProperties(); // [3]
init_CustomConfigurationProviders(); // [5]
init_FilterInitParameters() ; // [6]
init_AliasStandardObjects() ; // [7]
Container container = init_PreloadConfiguration();
...
}
}
从上段代码可以分析出,struts2配置文件的加载顺序为:default.properties->struts-defaultxml->struts-plugin.xml->struts.xml->struts.properties->struts.locale。
二、Struts配置元素定义
Struts2框架中的XML文件的配置元素定义是Properties文件的配置元素定义的超集,凡是能够在Properties文件中定义的配置元素,我们都可以在XML中找到相应的配置方式代替。下面我们从struts-default.xml文件入手,分析Struts配置元素的定义,部分源码如下:
<struts>
<constant name="struts.excludedPackageNamePatterns" value="^java\.lang\..*,^ognl.*,^(?!javax\.servlet\..+)(javax\..+)" />
<constant name="struts.dispatcher.errorHandler" value="struts" />
<!-- Silly workarounds for OGNL since there is currently no way to flush its internal caches -->
<bean type="ognl.PropertyAccessor" name="java.util.ArrayList" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" />
<bean type="ognl.PropertyAccessor" name="java.util.HashSet" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" />
<bean type="ognl.PropertyAccessor" name="java.util.HashMap" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" />
<!-- 此处省略 -->
<bean type="com.opensymphony.xwork2.security.ExcludedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultExcludedPatternsChecker" scope="default" />
<bean type="com.opensymphony.xwork2.security.AcceptedPatternsChecker" name="struts" class="com.opensymphony.xwork2.security.DefaultAcceptedPatternsChecker" scope="default" />
<package name="struts-default" abstract="true">
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<!-- 此处省略 -->
</result-types>
<interceptors>
<interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>
<interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
<!-- 此处省略 -->
<!-- Sample validation and workflow stack -->
<interceptor-stack name="validationWorkflowStack">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="validation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
<!-- Sample file upload stack -->
<interceptor-stack name="fileUploadStack">
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="basicStack"/>
</interceptor-stack>
<!-- 此处省略 -->
</interceptors>
<default-interceptor-ref name="defaultStack"/>
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
</package>
</struts>
1. bean节点
bean节点是一个用于描述接口及其实现类映射关系的节点,Struts2在框架级别实现了一个对象容器,并将配置文件中所有的bean节点所定义的对象纳入容器之中管理。Struts通过这个容器在框架级别负责这些对象的创建、销毁以及依赖关系的处理。
2. constant节点
该节点主要用于定义Struts2运行时的参数
3. package节点
该节点包含了众多子节点,ResultType、Interceptor、InterceptorStack、Action等,这些子节点均继承与XWork框架。package节点作用主要是定义一种映射关系,反映了框架如何与外部程序进行交互的过程。
在package节点的属性中,name是唯一的标识符,namespace则从命名空间的角度为整个事件请求机制划分为不同的种类。package节点的extends属性允许package与package之间形成相应的继承关系,通过继承,子package自动获取父package的所有配置定义。
4. include节点
include节点的主要作用是帮助我们管理Struts2的配置文件,实现配置文件的模块化。我们可以在应用级别的配置文件(struts.xml)里,将整个应用的配置根据一定的逻辑划分为若干个独立的配置文件,以便模块化管理和团队开发。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="index">
<result type="redirectAction">
<param name="actionName">HelloWorld</param>
<param name="namespace">/example</param>
</result>
</action>
</package> <include file="example.xml"/>
<!-- Add packages here -->
</struts>
struts.xml是Struts 2框架的核心配置文件,主要用于配置和管理开发人员编写的action。在这个配置文件中可以配置作用于action的拦截器、action和result的映射等。通常struts.xml从struts-default.xml继承默认的包定义。
struts.xml文件的元素结构如下图:

*:表示0个或多个元素
?:表示该元素是可选的
+:表示该元素至少有一个或多个
没有添加这三种符号表明这种元素是必需的。
Struts2(三)配置详解的更多相关文章
- struts2基本配置详解2
接上篇struts2基本配置详解,还有一些配置没有讲到,下面将继续. struts.xml <package name="com.amos.web.action" names ...
- Struts2框架学习(三)——配置详解
一.struts.xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...
- Struts2 XML配置详解
struts官网下载地址:http://struts.apache.org/ 1. 深入Struts2的配置文件 本部分主要介绍struts.xml的常用配置. 1.1. 包配置: S ...
- Struts2基本配置详解
Struts2配置文件加载顺序 struts2 配置文件由核心控制器加载 StrutsPrepareAndExecuteFilter (预处理,执行过滤) init_DefaultProperties ...
- 深入浅出Mybatis系列三-配置详解之properties与environments(mybatis源码篇)
注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(二)---配置简介(mybatis源码篇 ...
- 缓存varnish的管理及配置详解
一 工作原理 在当前主流的Web服务架构体系中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp ...
- Hibernate-概述-搭建-测试-配置详解
一 hibernate概述 1.1 框架是什么 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架可以理解成是一个半成品的项目.只 ...
- Struts2学习笔记二 配置详解
Struts2执行流程 1.简单执行流程,如下所示: 在浏览器输入请求地址,首先会被过滤器处理,然后查找主配置文件,然后根据地址栏中输入的/hello去每个package中查找为/hello的name ...
- 【转】logback logback.xml常用配置详解(三) <filter>
原创文章,转载请指明出处:http://aub.iteye.com/blog/1110008, 尊重他人即尊重自己 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透 ...
随机推荐
- Numpy 的数组转置和轴对换
数组转置 转置(transpose)是重塑的一种特殊形式, 它返回的是源数据的视图(不会进行任何操作.)数组不仅有transpose,还要特殊的T属性 计算矩阵内积 高维数组transpose 详细讲 ...
- Mybatis set标签
set - 更新语句 当 update 语句中没有使用 if 标签时,如果有一个参数为 null,都会导致错误. 当在 update 语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误 ...
- 关于sdl_ttf使用字体库加载失败的问题
今天同事拿着前期阶段开发的视频绘图库给另外一个同事的电脑上测试,结果发现老是出现打开字体库失败,但从打印的日志信息看,路径下确实存在字体库啊,这是什么原因? 于是没办法,搬到自己本级上再测试下,从他机 ...
- CI框架 -- 核心文件 之 Input.php(输入数据处理文件)
class CI_Input { //用户ip地址 protected $ip_address = FALSE; //用户浏览器地址 protected $user_agent = FALSE; // ...
- 大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)
摘抄至http://blog.jobbole.com/46673/ 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如 ...
- TI单节电量计基本介绍及常见问题解答
电量计(gas gauge /fuel gauge)是用来计量显示电池电量,通常包括mAh剩余容量(RM),满充容量(FCC),百分比容量(SOC),电压,电流,温度等,部分电量计还包含放空,充满时间 ...
- SpringCloud 集锦
一.SpringCloud和Dubbo SpringCloud整合了一套较为完整的微服务解决方案框架,而Dubbo只是解决了微服务的几个方面的问题. content Dubbo SpringCloud ...
- Xcode: Show Bounds Rectangles for UIView in Interface Builder
选中一个 Xib 文件,然后依次选择菜单中的 Editor - Canvas - Show Bounds Rectangles
- Mac下终端使用密钥登录服务器
可行方法: mac终端输入 ssh-keygen 因为mac系统是类unix系统,linux系统是unix系统演变来的,所以呢,相当于在一个linux系统登录另外一个linux系统, 基本命令还是一样 ...
- 关于ARM NEON学习的一些资料
在对基于ARM-v7处理器及以上的程序进行优化时,可以使用neon优化技术来加速程序.不过搞这个的人比较少,所以网上有用的资料很稀少.我翻了半天国内国外的博客,发现还是ARM公司的帮助网站最有用: h ...