原创作者: 饕尽天下   阅读:8079次   评论:7条   更新时间:2011-06-01    

本章我们会向你介绍struts.xml文件,讲解如何最优化你项目的struts.xml.

 

struts.xml文件

Struts2使用一个配置文件(struts.xml)来初始化它自身的资源.这些资源包括 :

l        拦截器可以对一个请求进行预处理和后期处理.

l        Action类可以调用业务逻辑与数据访问的代码.

l        结果可以使用JSP,VelocityFreeMarker模板来预览.

 

在运行时,程序仅有一个配置.在运行时之前配置可经由一个或多个XML文件定义,包括默认的struts.xml文件.有如下几个元素可以配置 : packages, namespaces, includes, actions, results, interceptors,exceptions.

 

struts.xml文件是框架的核心配置文件,它应该放在你的web程序的类路径中.Struts2配置文件的特性有 :

l        struts.xml文件允许将一个大的struts.xml文件分解成几个小的struts.xml文件,如果需要,配置文件也可以被导入进来.下面是个例子 :

<struts>
.....
......
<include file="file1.xml"/>
<include file="file2.xml"/>
.....
.....
</struts>

 

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

 

l        如果你想使用其它框架如FreemakerVelocity模块,那么模板同样可以在类路径中得到加载.这可以让开发人员将整个模块打包进一个JAR文件.

 

Struts.xml文件的结构

在上一章我们开发并测试了Hello World程序.下面的就是上个例子的struts.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>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />

<package name="roseindia" namespace="/roseindia" extends="struts-default">

<action name="HelloWorld" class="net.roseindia.Struts2HelloWorld">
<result>/pages/HelloWorld.jsp</result>
</action>

<!-- Add actions here -->
</package>


<!-- Add packages here -->

</struts>

struts.xml文件必须由Struts2文档类型定义(DTD)来确认

DTD文件提供了struts.xml应该拥有的结构和元素的信息

这是Struts2.0DTD :

<!--
   Struts configuration DTD.
   Use the following DOCTYPE
   
   <!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">
-->
<!ELEMENT struts (package|include|bean|constant)*>
<!ELEMENT package (result-types?, interceptors?, 
default-interceptor-ref?, default-action-ref?, global-results?, 
global-exception-mappings?, action*)>
<!ATTLIST package
    name CDATA #REQUIRED
    extends CDATA #IMPLIED
    namespace CDATA #IMPLIED
    abstract CDATA #IMPLIED
    externalReferenceResolver NMTOKEN #IMPLIED
>
<!ELEMENT result-types (result-type+)>
<!ELEMENT result-type (param*)>
<!ATTLIST result-type
    name CDATA #REQUIRED
    class CDATA #REQUIRED
    default (true|false) "false"
>
<!ELEMENT interceptors (interceptor|interceptor-stack)+>
<!ELEMENT interceptor (param*)>
<!ATTLIST interceptor
    name CDATA #REQUIRED
    class CDATA #REQUIRED
>
<!ELEMENT interceptor-stack (interceptor-ref+)>
<!ATTLIST interceptor-stack
    name CDATA #REQUIRED
>
<!ELEMENT interceptor-ref (param*)>
<!ATTLIST interceptor-ref
    name CDATA #REQUIRED
>
<!ELEMENT default-interceptor-ref (param*)>
<!ATTLIST default-interceptor-ref
    name CDATA #REQUIRED
>
<!ELEMENT default-action-ref (param*)>
<!ATTLIST default-action-ref
    name CDATA #REQUIRED
>
<!ELEMENT global-results (result+)>
<!ELEMENT global-exception-mappings (exception-mapping+)>
<!ELEMENT action (param|result|interceptor-ref|exception-mapping)*>
<!ATTLIST action
    name CDATA #REQUIRED
    class CDATA #IMPLIED
    method CDATA #IMPLIED
    converter CDATA #IMPLIED
>
<!ELEMENT param (#PCDATA)>
<!ATTLIST param
    name CDATA #REQUIRED
>
<!ELEMENT result (#PCDATA|param)*>
<!ATTLIST result
    name CDATA #IMPLIED
    type CDATA #IMPLIED
>
<!ELEMENT exception-mapping (#PCDATA|param)*>
<!ATTLIST exception-mapping
    name CDATA #IMPLIED
    exception CDATA #REQUIRED
    result CDATA #REQUIRED
>
<!ELEMENT include (#PCDATA)>
<!ATTLIST include
    file CDATA #REQUIRED
>
<!ELEMENT bean (#PCDATA)>
<!ATTLIST bean
    type CDATA #IMPLIED
    name CDATA #IMPLIED
    class CDATA #REQUIRED
    scope CDATA #IMPLIED
    static CDATA #IMPLIED
    optional CDATA #IMPLIED
>
<!ELEMENT constant (#PCDATA)>
<!ATTLIST constant
    name CDATA #REQUIRED
    value CDATA #REQUIRED    
>

 

如果你的程序在功能上不依赖于struts.xml,你可以将它从你的程序中彻底移除.还有一些配置方式可以作为你的选择,例如 : 注释, web.xml启动参数, 交替的URL映射计划.即使如此,仍有些配置需要Struts2.xml的支持,全局结果, 异常处理, 以及自定义拦截器栈.

评论 共 7 条 请登录后发表评论
7 楼 gggood118 2013-05-12 20:04
你的文章其实实用性很差,浪费时间
6 楼 sea0108 2012-06-13 10:19
引用

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

l        如果你想使用其它框架如Freemaker和Velocity模块,那么模板同样可以在类路径中得到加载.这可以让开发人员将整个模块打包进一个JAR文件.

这非常有利于实现模块化配置。
5 楼 tiyan200808 2009-12-19 17:13
pass 这小demo  easy了点吧
4 楼 masuweng 2009-11-17 10:55
总结的不错。
3 楼 丁丁豆 2009-10-09 11:03
这样copy代码很麻烦的啊
2 楼 Checkmate 2009-03-30 20:05
523276508 写道






嗯,格式上确实有问题,而且我已经编辑了三次了,不知道为什么都不能把整篇文章发出来,只好将它分成两部分了
1 楼 523276508 2009-03-30 16:43

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics