struts 2.0核心组件

从全局的角度来看 ,Struts2是一个pull(拉)类型的MVC(或者MVC2)框架,它与传统类型的MVC框架的不同之处就在于在Struts2中,Action担任的是模型的角色,而非控制器的角色,虽然它的角色仍然有些重叠。“pull”的动作由视图发起,它直接从Action里拉取所需的数据,而不是另外还需要一个单独的模型对象存在。
我们刚刚从概念上讲述了一下Struts2里面的MVC,那么从实现的层面上来看又是什么样子呢?在Struts2中,模型-视图-控制器模式通过五个核心组件来实现——Action、拦截器?值栈/OGNL?结果类型和结果/视图技术。
图 1: MVC / Struts2架构

图1描述了Struts2架构中的模型、视图和控制器。控制器通过Struts2分发Servlet过滤器(也就是人们常说的拦截器)来实现,模型通过Action实现,视图则通过结果类型和结果组合实现。值栈和OGNL提供了公共的线程和链接,并使得不同组件可以相互集成。
当我们在本章讨论通用组件时,其中有大量的信息是与配置相关的,也就是对Action、拦截器、结果等等的配置。 在阅读时要注意一点,这里的讲解只是帮助读者掌握一些背景知识,并没有采用最有效率的配置方式。在后续的章节中,我们会介绍一些更加简单有效的方式,诸如“惯例重于配置”、注解和零配置插件。
在我们对核心组件进行深入探讨之前,首先让我们来看看全局性的配置。
配置
在配置Struts 2之前,你首先要把发行版下载下来,或者在Maven2的“pom.xml”文件中声明如下的依赖:
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.0.6</version>
</dependency>
Mave2是一种管理项目整体构建过程的工具——包括编译,运行测试,生成报告以及管理构建的制品,其中对开发人员最有吸引力的一项就是对构建制品(artifact)进行管理。
应用程序的依赖库只需要在项目的“pom.xml”文件中通过groupId、artifactId和version进行定义即可。在使用一个制品之前,Maven会从本地和远程的库中进行查询,查询的范围包括本地的缓存、网上其他组织提供的库以及ibiblio.com这个标准的库。如果在远程的库中找到了所需的制品,Maven就会把它下载到本地的缓存中,以供项目使用。当请求所需要的制品时,这个制品相关联的依赖也会同样被下载到本地来(假设在该制品的“pom.xml”文件中对所有依赖都依次进行了声明)。 
Struts2是用Maven2来构建的,在pom文件中,它定义了所有依赖的配置项。您可以访问[url]http://maven.apache.org[/url]来获得关于Maven2的更多信息。
Struts2的配置可以分成三个单独的文件,如图2所示。
图2: 框架元素的配置文件
FilterDispatcher是一个servlet过滤器,它是整个Web应用的配置项,需要在“web.xml”中进行配置:
<filter>
<filter-name>action2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果是配置一个最基本的Web应用的话,这样就足够了。剩下的就是自定义一些Web应用的执行环境和配置应用中的组件。其中前者主要通过“struts.properties”来完成,而后者是在“struts.xml”中进行配置的。我们下面来看一下这两个配置文件的细节。 
struts.properties文件
这个文件提供了一种更改框架默认行为方式的机制。在一般情况下,如果不是打算让调试更加方便的话,你根本无须更改这个文件。在“struts.properties”文件中定义的属性都可以在“web.xml”文件的“init-param”标签中进行配置,或者通过“struts.xml”文件中的“constant” 标签来修改(我们在下一章中会继续讨论这个标签)。
我们可以更改其中的一些属性来改变Freemarker的选项——改变Action映射类,判断是否要重新载入XML配置文件,以及默认的UI主题等等。在Struts2 的wiki上有这些属性的最新信息,地址为[url]http://struts.apache.org/2.x/docs/strutsproperties.html.[/url]
在Struts2-Core的jar发行版中,有一个默认的属性文件,名为“default.properties”。如果要对属性进行修改的话,只需要在项目的源代码目录下,创建一个叫做“struts.properties”的文件,然后把想要修改的属性添加到文件中,新的属性就会把默认的覆盖掉了。
在开发环境中,以下几个属性是可能会被修改的:
    » struts.i18n.reload = true——激活重新载入国际化文件的功能
    » struts.devMode = true ——激活开发模式,以提供更全面的调试功能。
    » struts.configuration.xml.reload = true——激活重新载入XML配置文件的功能(这是为Action准备的),当文件被修改以后,就不需要重新载入Servlet容器中的整个Web应用了。
    » struts.url.http.port = 8080——配置服务器运行的端口号(所有生成的URL都会被正确创建)
    »

struts.xml文件
“struts.xml”文件中包含的是开发Action时所需要修改的配置信息。在本章接下来的内容中,会针对特定的元素进行详细讲解,但现在让我们先来看一下文件的固定结构。
有的时候你甚至可以把整个“struts.xml”文件从应用中移走,这完全取决于应用程序的功能需求。我们在本章中所讨论的配置信息, 
都可以被其他方式所代替,比如注解,“web.xml”启动参数和和可替换的URL映射方案。
必须要在“struts.xml”中进行配置的信息只有全局结果、异常处理和自定义的拦截器堆栈。
因为这是一个XML文件,所以最开始的元素就是XML版本和编码信息。接下来则是XML的文档类型定义(DTD)。DTD提供了XML文件中各个元素所应使用结构信息,而这些最终会被XML解析器或者编辑器使用。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package
name="struts2"
extends="struts-default"
namespace="/struts2">

</package>
</struts>
我们现在看到了<struts>标签,它位于Struts2配置的最外层,其他标签都是包含在它里面的。
Include标签:
<include … /> 是<struts>标签的一个子标签,它可以把其他配置文件导入进来,从而实现Struts2的模块化。它的“file”属性定义了要导入的文件的名称——该文件要和“struts.xml”一样有着相同的结构。比如说,如果要把一个记账系统的配置分解的话,你可能会把记账、管理和报表的功能各自组织到不同的文件中:
<struts>
<include file="billing-config.xml" /> 
核心组件 | 13 更多精彩内容:[url]http://www.infoq.com/cn[/url]
<include file="admin-config.xml" />
<include file="reports-config.xml" />

</struts>
当我们导入文件时,一定要注意导入的顺序。因为从文件被导入的那个点开始,该文件中的信息才能被访问到,也就是说,如果要使用另外一个文件中所定义的标签,那么该文件就必须要在被引用之前就配置好。
有些文件需要显式导入,有些则会被自动导入。“struts-default.xml”和“struts-plugin.xml”就属于后者。它们都包括有结果类型、拦截器、拦截器堆栈、包(package)以及Web应用执行环境(也可以在“struts.properties”中配置)的配置信息。二者的区别在于,“struts-default.xml”提供的是Struts2的核心配置信息,而“struts-plugin.xml”则描述了特定插件的配置信息。每个插件的JAR中都要有一个“struts-plugin.xml”文件,该文件会在系统启动时被装载。
The Package Tag:
<package … />标签是用来把那些需要共享的通用信息——例如拦截器堆栈或URL命名空间——的配置组织在一起的。它通常由Action的配置组成,但也可以包括任何类型的配置信息。它还可以用来组织管理各自独立的功能——它们也可以被进一步拆分到不同的配置文件中。
这个标签的属性包括有:
   
分享到:
评论

你可能感兴趣的:(maven,xml,应用服务器,struts,配置管理)