`
zddava
  • 浏览: 240530 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2的配置文件读取(二)

阅读更多
在这里,每一个ConfigurationProvider的#init(),#register(),和#loadPackages()都被调用了一遍,下面我们来看一下之前的七步操作中载入的几个ConfigurationProvider都注册和载入了什么

-------------------------------------------------------------------------------------------------

●第一个是DefaultPropertiesProvider

他的#init()为一个空函数,表明初始化时并没有执行任何操作。#loadPackages()并没有覆盖,使用的是直接基类的实现,而它的基类也定义了一个空的方法。

所以只剩下#register()方法了。

    public void register(ContainerBuilder builder, LocatableProperties props)
            throws ConfigurationException {
        
        Settings defaultSettings = null;
        try {
            defaultSettings = new PropertiesSettings("org/apache/struts2/default");
        } catch (Exception e) {
            throw new ConfigurationException("Could not find or error in org/apache/struts2/default.properties", e);
        }
        
        loadSettings(props, defaultSettings);
    }


很明显,它载入了org/apache/struts2/default.properties。它默认在struts2-core-2.x.xx.jar的org/apache/struts2/下边。它定义了Struts2的默认属性,包括国际化,或者i18n等等,它可以被struts.properties覆盖。

-------------------------------------------------------------------------------------------------

●第二个是XmlConfigurationProvider和StrutsXmlConfigurationProvider。负责载入在web.xml中FilterDispatcher的参数path配置的xml文件。XmlConfigurationProvider专门负责载入xwork.xml,而StrutsXmlConfigurationProvider负责载入其他的xml配置文件。其中StrutsXmlConfigurationProvider是XmlConfigurationProvider的子类,主要的操作都是在XmlConfigurationProvider中实现的。这两个类实现了struts2主要的配置文件struts.xml(默认名称)等的读取。

#register()方法主要是注册框架需要的很多bean和常量(constant)。

而在#loadPackages()中,则载入了<package>标签中定义的配置内容。

一个完整的配置文件见下边:

<?xml version="1.0" encoding="UTF-8"?>
<struts>
	<!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
	<include file="struts-default.xml"></include>

	<!-- package提供了将多个Action组织为一个模块的方式。 package的名字必须是唯一的 package可以扩展 当一个package扩展自另一个package时该package会在本身配置的基础上加入扩展的package的配置 父package必须在子package前配置; name:package名称; extends:继承的父package名称; abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false; namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action -->
	<package name="cn.test.struts2" extends="struts-default"
		namespace="/test">
		<interceptors>
			<!-- 定义拦截器 name:拦截器名称 class:拦截器类路径 -->
			<interceptor name="inter1" class="cn.test.Inter1"></interceptor>
			<interceptor name="inter2" class="cn.test.Inter2"></interceptor>
			<!-- 定义拦截器栈 -->
			<interceptor-stack name="mystack">
				<interceptor-ref name="inter1"></interceptor-ref>
				<interceptor-ref name="inter2"></interceptor-ref>
			</interceptor-stack>
		</interceptors>

		<!-- 定义默认的拦截器 每个Action都会自动引用 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
		<default-interceptor-ref name="mystack"></default-interceptor-ref>

		<!-- 全局results配置 -->
		<global-results>
			<result name="input">/error.jsp</result>
		</global-results>

		<!-- 全局exception配置 -->
		<global-exception-mappings>
			<exception-mapping result="input"
				exception="java.sql.SQLException">
			</exception-mapping>
		</global-exception-mappings>

		<!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同) name:action名称 class: 对应的类的路径 method: 调用Action中的方法名 -->
		<action name="test" class="cn.test.TestAction">
			<!-- 引用拦截器 name:拦截器名称或拦截器栈名称 -->
			<interceptor-ref name="inter1"></interceptor-ref>

			<!-- 节点配置 name : result名称 和Action中返回的值相同 type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher -->
			<result name="success" type="dispatcher">
				/success.jsp
			</result>

			<result name="failure" type="dispatcher">
				/failure.jsp
			</result>

			<!-- 参数设置 name:对应Action中的get/set方法 -->
			<param name="param">param</param>

			<!-- 异常配置 -->
			<exception-mapping result="failure"
				exception="java.lang.Exception">
			</exception-mapping>

			<!-- 此package默认的Action配置 -->
			<default-action-ref name="test">
				<param name="param">default_param</param>
			</default-action-ref>

		</action>
	</package>
</struts>


-------------------------------------------------------------------------------------------------

●第三个是LegacyPropertiesConfigurationProvider,载入struts.properties中的配置,这个文件中的配置可以覆盖default.properties中的。

-------------------------------------------------------------------------------------------------

●第四个是ClasspathConfigurationProvider,负责载入在web.xml中FilterDispatcher的参数actionPackages配置的Action。它负责将此配置中提到的包下所有以"Action"结尾的类和继承com.opensymphony.xwork2.Action的类作为Action载入框架。

-------------------------------------------------------------------------------------------------

●第五个是载入自定义的ConfigurationProvider,在web.xml中FilterDispatcher的参数configProviders配置

-------------------------------------------------------------------------------------------------

●第六个是props.putAll(initParams);将FilterDispatcher的参数载入了进去,不太清楚作用。

-------------------------------------------------------------------------------------------------

●第七个是BeanSelectionProvider。它的#register()方法中将配置文件中的bean与具体的类映射。默认使用的全是name为"struts"的bean。

-------------------------------------------------------------------------------------------------

下面再次回到FilterDispatcher的#init()方法中,

        String param = filterConfig.getInitParameter("packages");
        String packages = "org.apache.struts2.static template org.apache.struts2.interceptor.debugging";
        if (param != null) {
            packages = param + " " + packages;
        }
        this.pathPrefixes = parse(packages);


这个步骤载入了packages标签下定义的静态资源。
例如web.xml中进行了如下定义
    <filter>
       <filter-name>struts2</filter-name>
       <filter-class>
           org.apache.struts2.dispatcher.FilterDispatcher
       </filter-class>
       <init-param>
           <param-name>packages</param-name>
           <param-value>cn.static.resource</param-value>
       </init-param>
    </filter>


FilterDispatcher会将cn.static.resource包下的文件当作静态资源处理,即直接在页面上显示文件内容,不过会忽略扩展名为class的文件。比如在cn.static.resource包下有一个test.txt的文本文件,其内容为“test”,访问http://localhost:8081/Struts2Demo/struts/test.txt时会显示:test

另外,对org.apache.struts2.static,template,org.apache.struts2.interceptor.debugging这三个包空间下边的资源也会作为静态资源载入。
分享到:
评论

相关推荐

    struts2配置文件传值中文乱码

    struts2配置文件传值中文乱码

    struts2实现多文件上传下载

    2.能够对上传路径进行配置文件指定(upload.properties),使用了一些类似单例模式的静态代码块 3.Struts2进行下载处理,能对上传的所有文件进行下载(多个) 4.文件保存的名称UUID生成,不过显示并下载的名称都是原...

    struts2 properties配置详解

    自己学会的,保存的学习网页,给大家分享 struts2 国际化

    利用Java的Properties 类读取配置文件信息

    利用Java的Properties 类读取配置文件信息! 读取Properties文件的例子

    读取src下的文件及自己包下的配置文件

    将此项目生成一个jar 就可以动态的读取src及文件包下的配置文件了。类似于strust2中的读取default.properties文件,然后,如果,我们的项目中引入了struts.properties文件了,就以struts.properties为主。

    Struts配置详解.doc

    Struts配置文件详解 web.xml、struts-cofig.xml以及struts-cofig.xml中各个标签的作用。 Struts应用采用两个基于XML的配置文件来配置,分别是web.xml和struts-cofig.xml文件.web.xml文件是配置所有web应用的,而...

    Dom4j解析struts2框架的struts.xml

    Dom4j解析struts2框架的struts.xml,自定义struts框架需要解析配置文件

    02_张孝祥09年Struts视频_文件上传单元

    struts文件上传单元目录列表: 01.文件上传的网页设置与数据格式分析 02.阐释软件分层的设计思想 03.文件上传组件的实现原理与应用分析 04.用struts获取上传文件名和解决...15.修正从配置文件中读取文件存储目录的缺陷

    11_张孝祥09年Struts视频_文件上传单元

    struts文件上传单元目录列表: 01.文件上传的网页设置与数据格式分析 02.阐释软件分层的设计思想 03.文件上传组件的实现原理与应用分析 04.用struts获取上传文件名和解决...15.修正从配置文件中读取文件存储目录的缺陷

    Struts2简单的购物车

    eclipse开发工程包 基于Struts2的简单购物车 非常简单一共只有4个跳转页面 JDBC访问MySQL数据库存储读取数据 需要配置一下dao文件中的JDBC配置运行其中main[]建立数据库就 关联下tomcat中的外链可以使用了

    深入浅出Struts2(附源码)

    2.5.1 部署描述文件和Struts配置文件 27 2.5.2 动作类 28 2.5.3 运行app02a程序 29 2.6 依赖注入 29 2.6.1 概述 29 2.6.2 依赖注入的几种方式 31 2.7 小结 31 第3章动作与结果 32 3.1 动作类 32 3.2 如何...

    JavaBean实体类 配置文件 代码一键自动生成工具

    代码一键自动生成工具 可生成Action、JavaBean实体类、Dao及实现类、service及实现类、spring.xml、struts.xml、mybatis.xml *该工具目前支持3种数据源的生成方式,分别是:JDBC、.table、PDM *JDBC:选择JDBC是只...

    Struts2下多文件的上传与下载

    在网络上,对于Java处理文件上传和下载的技术比较多,而Struts作为一款优秀的框架也提供了非常方便的文件上传和下载,而网上的一些例程都非常的不全面,概括来: 1) 文件上传比较多,多文件上传少一点 2) 文件下载很...

    struts2+MySQL分页.zip

    1. 设置自己的分页器的基本参数(可以从配置文件中读取)  ■每页显示的记录条数  ■每次最多显示多少页 2. 编写设置分页器其他参数的函数  主要参数有以下几个:  总记录条数  总页数  当前页号:现在显示的...

    自己写的struts2+hibernate+spring实例

    注:本代码为个人所写.全当练习使用.愿所有人能够更好地学习软件....为了日后可以很好的解耦合. 注释清晰. 项目结构采用纯eclipse...数据库连接配置文件是/s2sh/src/目录下面的jdbc.properties文件.直接配置即可.

    struts2笔记

    很详细的struts2框架的添加,配置文件的编写,注解方式,HTTP解耦合,通配符,动态结果读取,有详细的案例。

    java练习之XML读取

    JAVA练习之XML读取,此代码将在模拟SPRING IOC 和 STRUTS中使用 共三部分: 1、XML读取,用于配置文件读取 2、模拟SPRING IOC 3、模拟STRUTS

    struts1面试题

    struts1面试题对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化控制器ActionServlet ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到ActionMappings对象中。

Global site tag (gtag.js) - Google Analytics