转载

Struts2(三)配置详解

一、概述

Struts2提供了多种可选的配置文件形式。

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文件的元素结构如下图:

Struts2(三)配置详解

*:表示0个或多个元素

?:表示该元素是可选的

+:表示该元素至少有一个或多个

没有添加这三种符号表明这种元素是必需的。

正文到此结束
Loading...