jacksun1978

导航

 

struts2使用配置文件来初始化它的资源。

struts.xml包含三部分:

1、管理元素,包括:

     Bean Configuration

     Constant Configuration

     Package Configuration

     Namespace Configuration

     Include Configuration

2、请求处理元素,包括:

     Interceptor Configuration

     Action Configuration

             通配符映射(widecard mapping)

     Result Configuration

     Unkown Handle

3、错误处理元素,包括:

    Exception Configuration

 

现在来对每一部分详细的说明:

Bean Configuration:

内在的,struts框架使用自己的依赖注入容器。容器负责加载主要的框架对象,所以struts框架的任何一个部分都可以以一种标准的、一致的方式被替换、扩展和移除。

bean元素只有一个必须的“class”属性,用来定义被创建的JAVA类。bean的用途有两个:

    1、被框架容器创建,并且注入到内部框架对象中(个人理解,用来实现框架内部的接口

    2、有值,可以通过它的静态方法访问

bean元素的属性包括:

image

bean元素举例:

<struts>
  <bean type="com.opensymphony.xwork2.ObjectFactory" name="myfactory" class="com.company.myapp.MyObjectFactory" />
    ... 
</struts>
 
Constant Configuration:
constants提供了一种简单的方法,通过修改键(key)的设置,修改框架和plugin的行为,从而达到自定义strtus应用的目的。
对于constants来说,有两个重要的用途:
1、用来修改一些设置,例如最大的上传文件的大小,或者定义struts框架是否在“开发模式”下
2、在一种类型的众多实现中,定义哪一种bean实现被选中
 
constant可以定义在下列文件中,并且以下列的顺序被搜素,后面文件中的定义可以覆盖前面的定义
1、struts-default.xml
2、struts-plugin.xml
3、struts.xml
4、struts.properties
5、web.xml
 
constant 在struts.xml中的举例:
<struts>
  <constant name="struts.devMode" value="true" />
  ... 
</struts>
 
在struts.properties中的举例:
struts.devMode = true
在web.xml中的举例:
<web-app id="WebApp_9" version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <filter>
        <filter-name>struts</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        <init-param>
        	<param-name>struts.devMode</param-name>
        	<param-value>true</param-value>
        </init-param>
    </filter>
    ...
</web-app>

 

Package Configuration:

使用package将逻辑上相关的一组action,result,interceptor等组件分为一组。

package配置只有一个必须的“name”属性,此属性作为以后对package的引用。“extends”属性是可选的,允许包集成一个或者多个其他package的配置。注意:配置文件是从上到下被处理,所以一个被继承的包必须在继承它的包的“前面”定义

 

image

 

Namespace配置:

namespace属性将action配置分成逻辑模块,每个模块都有自己的标识性前缀。namespace避免了action命名冲突。

namespace有以下几种:

1、default namespace:

默认的namespace属性为"",空字符串。

default namespace被当做一个全方位的namespace。如果一个action配置在定义的namespace中没有找到,就会从default namespace中去搜索。

2、root namespace

根root namespace "/"

 

namespace的工作原理举例:

 

<package name="default">
    <action name="foo" class="mypackage.simpleAction">
        <result name="success" type="dispatcher">greeting.jsp</result>
    </action>

    <action name="bar" class="mypackage.simpleAction">
        <result name="success" type="dispatcher">bar1.jsp</result>
    </action>
</package>

<package name="mypackage1" namespace="/">
    <action name="moo" class="mypackage.simpleAction">
        <result name="success" type="dispatcher">moo.jsp</result>
    </action>
</package>

<package name="mypackage2" namespace="/barspace">
    <action name="bar" class="mypackage.simpleAction">
        <result name="success" type="dispatcher">bar2.jsp</result>
    </action>
</package>

例1:如果request的地址是/barspace/bar.action,那么会在barspace命名空间中找bar action。如果找到,就会执行该action。如果没有找到,就会到default namespace中查找。在上面的例子中,bar action确实存在在barspace控件中,所以他会被执行,如果返回success,则会被跳转到bar2.jsp。

 

例2:如果request的地址是/barspace/foo.action,会在barspace空间中查找foo action。本例中,在barspace空间中没有foo action,所以它会到default空间中查找,找到后执行。如果返回success,会被跳转到greeting.jsp。

 

例3:如果request地址是/moo.action,会在root空间中查找moo action,如果没有找到,会到default空间中查找。

 

注意:namespace不是一个像文件路径一样的分级,它只有一个级别。例如request的地址是/barspace/myspace/bar.action,首先会在/barspace/myspace空间中查找bar action,如果没有找到,直接到default空间中查找bar action

 

Include Configuration:

struts框架允许使用include元素对配置文件“分而治之”

<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <include file="Home.xml"/>
    <include file="Hello.xml"/>
    <include file="Simple.xml"/>
    <include file="/util/POJO.xml"/>
    <include file="/com/initech/admin/admin-struts.xml"/>
</struts>
每个被include的配置文件都和struts.xml一样的格式。
posted on 2012-06-15 17:09  jacksun1978  阅读(230)  评论(0编辑  收藏  举报