<struts><packagename="demo"extends="struts-default"><global-results><resultname="print">/result.jsp</result></global-results><actionname="submit"class="action.MoreSubmitAction"> ……</action><actionname="my"class="action.MoreSubmitAction"method="my">……</action></package></struts>
1.使用<include>标签重用配置文件
在Struts2中提供了一个默认的struts.xml文件,但如果package、action、interceptors等配置比较多时,都放到一个struts.xml文件不太容易维护。因此,就需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用<include>标签引用这些配置文件。这样做的优点如下:
结构更清晰,更容易维护配置信息。
配置文件可以复用。如果在多个Web程序中都使用类似或相同的配置文件,那么可以使用<include>标签来引用这些配置文件,这样可以减少工作量。
假设有一个配置文件,文件名为submit.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name = "submitPackage" extends = "struts-default">
<action name="submit" class="com.struts.demo.MoreSubmitAction">
<result name="save">/submit_result.jsp</result>
<result name="print">/submit_result.jsp</result>
</action>
</package>
</struts>
则struts.xml引用submit.xml文件的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<include file="submit.xml"/>
<package name = "myPackage" extends = "struts-default">
<action name="first">
<result>/first.jsp</result>
</action>
<action name="InfoAction" class="com.struts.demo.InfoAction">
<result name="add">test_add.jsp</result>
<result name="update">test_update.jsp</result>
</action>
<action name="sum" class="com.struts.demo.FirstAction">
<result name="positive">/positive.jsp</result>
<result name="negative">/negative.jsp</result>
</action>
</package>
</struts>
注意:用<include>引用的xml文件也必须是完成的struts2的配置。实际上<include>在引用时是单独解析的xml文件,而不是将被引用的文件插入到struts.xml文件中。
可能遇到的报错:There is no Action mapped for namespace [/] and action name [submit] associated with context path [/StrutsExample].
解决方法 A:检查是否标签、名称等写错
B:重新配置好struts.xml 服务要重新启动
2.选择result类型
在默认时,标签的type属性值是“dispatcher”(实际上就是转发,forward)。开发人员可以根据自己的需要指定不同的类型,如redirect、stream等。如下面代码所示:
<result name="save"type="redirect"> /result.jsp </result>
全局result
有很多时候一个<result>被多个<action>使用,这时可以使用<global-result>标签来定义全局的<result>,代码如下:
<struts>
<package name="demo"extends="struts-default">
<global-results>
<result name="print">/result.jsp</result>
</global-results>
<action name="submit"class="action.MoreSubmitAction">
...
</action>
<action name="my"class="action.MoreSubmitAction"method="my">
...
</action>
</package>
</struts>
如果<action>中没有相应的<result>,struts2就会使用全局的<result>