博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts 2 struts.xml详解(一)
阅读量:4145 次
发布时间:2019-05-25

本文共 4055 字,大约阅读时间需要 13 分钟。

概述

        Struts 2用配置文件(struts.xml)初始化它的资源。这些资源包括:

拦截器---用于预处理和后处理请求的拦截器
类---用于调用业务逻辑处理和数据访问代码的Action类
结果---可以用JavaServer Pages, Velocity 和 FreeMarker模板预览的结果

        在运行时,一个程序只有一个配置。这个配置是在运行前由一个或者多个的xml文件定义而成的,包括默认的struts.xml文件。可以配置的元素有:packages,namespaces, includes, actions, results, interceptors, 和 exceptions。

        Struts.xml是Struts2 框架的核心配置,它要放在web程序的classpath中。

        Struts 2 配置文件的特性:

        Struts.xml允许被拆分成几个小的文件,然后可以根据需要引进要包含的配置文件。例如:

..... ......
..... .....

        你甚至可以将struts-plugin.xml文件放在一个JAR包里,它会自动被加载到程序中。这有助于程序员开发自配置的组件。

        如果你想要使用其它框架如Freemaker和Velocity,这些模块也可以放到classpath中然后从classpath加载。这样开发人员就可以将所有的模块打包进一个JAR文件里。

Struts.xml文件结构

        先看一下一个简单的struts.xml文件。

/pages/HelloWorld.jsp
 

        一个struts.xml的配置一般都包括package、action的配置(这里先跳过这一段配置的解释)。

        Struts.xml是由定义的(DTD(Document Type Definition)用于定义文档的合法性。它定义了文档应该有哪些元素及其属性,还有其他一些约束性规则。 DTD语言定义的文档类型是SGML家族的标记性语言(包括SGML,XML,HTML))。Struts 2.0 DTD定义了struts.xml的结构和元素信息。附Struts 2.0 DTD文件。

        如果程序的功能不依赖于struts.xml可以将它彻底删除掉。有一些配置是可选的如:注释(annotations), web.xml启动参数(web.xml startupparameters), 和 变化的URL映射规则(alternate URL mapping schemes)。还有一些配置是需要struts.xml文件的支持的如:全局结果(global results), 异常处理(exception handling), 以及自定义拦截器栈(the custom interceptor stacks)。

Struts.xml分析

        <struts>标签是整个struts.xml的根。它之下还包含package,include, bean和constant标签。

1.  package

        Package用来将actions, results, resulttypes, interceptors, and interceptor-stacks等组成一组并分成一个逻辑单元。每个package是多个Action、多个拦截器、多个拦截器引用的集合。Package和object类似,可以被继承,被子package重载(覆盖)。

Package用来组合具有相同属性的配置如相同的拦截器栈或者相同的命名空间。

属性

是否必须

描述

name

yes

用于其他package引用的唯一标识

必须唯一

extends

no

继承其他package的配置(在此之前配置的package)

要被扩展的包名

namespace

no

提供从URL到package的映射

例如:在两个namespace属性分别为pack1和pack2包中,访问的URL就应该是和?/webApp/pack2/my.action

abstract

no

描述此package是否是abstract的(不能定义action)

true/false

        注:配置文件是按顺序从头开始处理加载的,所以扩展package所引用的package必须在此之前就定义好的。

        配置示例:

/success.jsp
/error.jsp

2.  include标签

        include节点是struts2中组件化的方式。可以将每个功能模块独立到一个xml配置文件中,然后用include节点引用。它只有一个属性file,指定要引用的xml文件。这些引用的xml文件具有和struts.xml文件相同的结构。引用方式如下:

 

        在include时,顺序很重要,因为配置信息是include之后才生效的。

        另外,有一些文件是隐式include的,这些文件有:struts-default.xml和struts-plugin.xml。这两个文件都包含默认的result types, interceptors, interceptor stacks,packages的配置也包含了web程序运行环境的配置信息(这些信息也可以在struts.properties中配置)。所不同的是,struts-default.xml提供了struts2的核心配置,而struts-plugin.xml提供了相关插件的配置信息。每个JAR插件都应该包含有一个struts-plugin.xml文件,他们在启动时被加载。

3.  bean标签

        大部分的程序都不需要扩展bean配置。Bean元素提供了class属性,用来指定用来创建和操作的Java类。一个bean可以被框架容器创建并注入到框架的内部对象中,或者被注入到静态方法中。

        第一种用法,对象注入,一般带有type属性,它告诉容器这个对象实现了那个接口。

        第二种用法,值注入,允许不是容器创建的对象接收框架传来的常量。但是,用来值注入的对象必须定义成静态属性。

属性

是否必须

描述

class

yes

Bean class的名字

type

no

类实现的主要java接口

name

no

Bean的唯一名字;必须在指定相同type的bean中唯一

scope

no

Bean的有效范围;必须是default, singleton, request, session, thread中的一个

static

no

是否注入静态方法;当type指定时,不能为true

optional

no

这个bean是否是可选的

        配置示例:

...
 

4.  constant标签

        Constant有两个重要的应用:

        用来重新配置最大上传文件大小或者struts框架是否应该处于devMode(= )模式。

        用来指定在多个实现给定type的bean中应该选择哪一个。

        Constants可以在多个文件中声明。默认的,constants是以下面的顺序搜索的,之后的覆盖之前的。

                struts-default.xml

                struts-plugin.xml

                struts.xml

                struts.properties

                web.xml

        在struts.properties文件中,每个条目都被认为是一个常量。在web.xml中,任何FilterDispatcher的初始化参数都是以常量被加载的。

属性

是否必须

描述

name

yes

常量的名字

value

yes

常量的值

        Struts2框架有两个核心配置文件,其中struts.xml文件主要负责管理应用中的Action映射, 及Action处理结果和物理资源之间的映射关系。除此之外,Struts2框架还包含了一个struts.properties文件,该文件主义了Struts2框架的大量常量属性。但通常推荐也是在struts.xml文件中来配置这些常量属性。

        配置示例:

...

        以上指定了资源文件的放置在classes目录下,基本名是messages,则在classes目录下您就应该放置类似messages_zh_CN.properties,message_en.properties名的文件。并且指定struts的模式是devMode(=development mode)模式。

转载请注明出处!!!

 

你可能感兴趣的文章
ubuntu 16.04 下重置 MySQL 5.7 的密码(忘记密码)
查看>>
Ubuntu Navicat for MySQL安装以及破解方案
查看>>
HTTPS那些事 用java实现HTTPS工作原理
查看>>
oracle函数trunc的使用
查看>>
MySQL 存储过程或者函数中传参数实现where id in(1,2,3,...)IN条件拼接
查看>>
java反编译
查看>>
Class.forName( )你搞懂了吗?——转
查看>>
jarFile
查看>>
EJB3.0定时发送jms(发布/定阅)方式
查看>>
EJB与JAVA BEAN_J2EE的异步消息机制
查看>>
数学等于号是=那三个横杠是什么符
查看>>
HTTP协议详解
查看>>
java多线程中的join方法详解
查看>>
ECLIPSE远程调试出现如下问题 ECLIPSE中调试代码提示找不到源
查看>>
java abstract修饰符
查看>>
数组分为两部分,使得其和相差最小
查看>>
java抽象类和接口
查看>>
有趣的排序——百度2017春招
查看>>
二叉树的最近公共祖先LCA
查看>>
数组中累加和为定值K的最长子数组长度
查看>>