<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="p1" extends="struts-default">
<action name="action1" class="com.web.action.Demo1Action">
<!-- resulst元素:配置逻辑结果视图
name属性:结果视图名称。与动作方法的返回值对应,当一致前往指定的jsp
type属性:结果视图类型。不写的时候,有默认值,默认值是dispatcher 转发。
常用取值:
dispatcher:请求转发 默认值
redirect:重定向
chain:转发到另一个动作
转发到同包(同名称空间)下的另一个动作
<result name="success" type="chain">action2</result>
转发到不同包(不同名称空间)下的另一个动作
<result name="success" type="chain">
使用的是注入的思想,在执行之重定向之前,会先获取这两个参数的值
调用的就是setNamespace("/n2")和setActionName("action3")
<param name="namespace">/n2</param>
<param name="actionName">action3</param>
</result>
redirectAction:重定向到另一个动作
重定向到同包(同名称空间)下的另一个动作
<result name="success" type="redirectAction">action2</result>
重定向不同包(不同名称空间)下的另一个动作
<result name="success" type="redirectAction">
使用的是注入的思想,在执行之重定向之前,会先获取这两个参数的值
调用的就是setNamespace("/n2")和setActionName("action3")
<param name="namespace">/n2</param>
<param name="actionName">action3</param>
</result>
-->
<result name="success" type="chain">
<param name="namespace">/n2</param>
<param name="actionName">action3</param>
</result>
</action>
<action name="action2"><!-- 没有给定动作类,默认的是ActionSupport,没有给定动作方法,默认的是execute -->
<result name="success" >
<param name="location">/success.jsp</param>
</result>
</action>
</package>
<package name="p2" extends="struts-default" namespace="/n2">
<action name="action3">
<result name="success" >/success.jsp</result>
</action>
</package>
<!-- 全局结果视图 -->
<package name="myDefault" extends="struts-default" abstract="true">
<!-- 自定义结果类型
在包中配置的结果视图,是只能当前包和其子包中使用
-->
<result-types>
<result-type name="captcha" class="com.web.result.CAPTCHAResult"></result-type>
</result-types>
<global-results>
<!-- 结果视图的查找顺序,先找当前动作类自己的,如果没有的,再去全局的结果视图中查找 -->
<result name="success" type="captcha">
<param name="width">240</param>
<param name="height">40</param>
</result>
</global-results>
</package>
<!-- 自定义结果类型的配置 -->
<package name="p3" extends="myDefault">
<action name="captchaAction" class="com.web.action.CaptchaAction" >
<!-- 写在action内部的结果视图,是只能当前动作类使用的
<result name="success" type="captcha">
配置图像的大小
<param name="width">240</param>
<param name="height">40</param>
</result>
-->
</action>
</package>
</struts>
package元素
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 设置开发模式 -->
<constant name="struts.devMode" value="true"/>
<!--
package元素:是定义一个struts的包,它是把配置文件按照面向对象的思想来管理。分模块开发。
name属性:指定包的名称。注意:包的名称在配置文件中唯一。
extends属性:指定当前包的父包。它是按照面向对象的思想管理的体现。
abstract属性:把包声明为一个抽象包。抽象包就是用来被继承的。只有没有action元素的包,才能被定义为抽象包
namespace属性:名称空间。当指定了名称空间之后,访问路径就变成了:
访问路径 = 名称空间+动作名称
当不指定该属性时,该属性有默认值,默认值是""。注意,不是"/"!!!!!!!!
名称空间的搜索顺序:
第一步:先去找对应的名称空间
在指定的名称空间下找到了:就执行第二步。
在指定的名称空间下没找到:按照名称空间结构向上追溯,一直到根名称空间,只要在任何一级找到了,执行第二步
第二步:找动作名称
先在指定的名称空间下,搜索对应的动作名称:找到了就执行动作类的动作方法。
在指定的名称空间下没找到对应的动作名称:前往默认的名称空间下,找动作名称。注意:它只找动作名称。
-->
<package name="p1" extends="struts-default" namespace="/user">
<!-- <action name="action1" class="com.web.action.Demo1Action" method="saveUser" >
<result name="success">/success.jsp</result>
</action> -->
</package>
<package name="p2" extends="struts-default">
<action name="action2" class="com.web.action.Demo1Action" method="saveUser2" >
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
action元素:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<!-- 开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<package name="p1" extends="struts-default">
<!-- 修改默认动作类:我们一般不改
<default-class-ref class="你自己的动作类"></default-class-ref> -->
<!-- action元素:是用于定义动作名称,动作类和动作方法的映射。以及当出现不同情况时前往指定的结果视图
name属性:动作的名称。和jsp页面上的请求url中的名称对应起来。注意在此处不能写.action
class属性:指定动作类
method属性:指定要执行的动作方法
-->
<action name="action1" class="com.web.action.Demo1Action" method="hello">
<result name="success">/success.jsp</result>
</action>
<!-- 第三种创建动作类方式的配置 -->
<action name="action3" class="com.web.action.Demo3Action">
<result name="success">/success.jsp</result>
</action>
<!-- 访问默认的动作类和动作方法的配置
默认的动作类是:ActionSupport的类。它是在struts-default.xml的配置文件中定义着。
-->
<action name="defaultAction">
<result name="success">/success.jsp</result>
</action>
<!-- 动作方法调用的配置
<action name="addUser" class="com.web.action.UserAction" method="addUser">
<result name="success">/addUser.jsp</result>
</action>
<action name="updateUser" class="com.web.action.UserAction" method="updateUser">
<result name="success">/updateUser.jsp</result>
</action>
<action name="deleteUser" class="com.web.action.UserAction" method="deleteUser">
<result name="success">/deleteUser.jsp</result>
</action>
<action name="findUser" class="com.web.action.UserAction" method="findUser">
<result name="success">/findUser.jsp</result>
</action>-->
<!-- 使用通配符,配置动作方法
*表示的是动作的名称,当有和动作名称相匹配的时候可以用{出现的位置}来代替
<action name="*_*" class="com.web.action.{2}Action" method="{1}{2}">
<result name="success">/{1}{2}.jsp</result>
</action>
-->
<!-- 动态方法调用的配置 -->
<action name="user" class="com.web.action.UserAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
result元素:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="p1" extends="struts-default">
<action name="action1" class="com.web.action.Demo1Action">
<!-- resulst元素:配置逻辑结果视图
name属性:结果视图名称。与动作方法的返回值对应,当一致前往指定的jsp
type属性:结果视图类型。不写的时候,有默认值,默认值是dispatcher 转发。
常用取值:
dispatcher:请求转发 默认值
redirect:重定向
chain:转发到另一个动作
转发到同包(同名称空间)下的另一个动作
<result name="success" type="chain">action2</result>
转发到不同包(不同名称空间)下的另一个动作
<result name="success" type="chain">
使用的是注入的思想,在执行之重定向之前,会先获取这两个参数的值
调用的就是setNamespace("/n2")和setActionName("action3")
<param name="namespace">/n2</param>
<param name="actionName">action3</param>
</result>
redirectAction:重定向到另一个动作
重定向到同包(同名称空间)下的另一个动作
<result name="success" type="redirectAction">action2</result>
重定向不同包(不同名称空间)下的另一个动作
<result name="success" type="redirectAction">
使用的是注入的思想,在执行之重定向之前,会先获取这两个参数的值
调用的就是setNamespace("/n2")和setActionName("action3")
<param name="namespace">/n2</param>
<param name="actionName">action3</param>
</result>
-->
<result name="success" type="chain">
<param name="namespace">/n2</param>
<param name="actionName">action3</param>
</result>
</action>
<action name="action2"><!-- 没有给定动作类,默认的是ActionSupport,没有给定动作方法,默认的是execute -->
<result name="success" >
<param name="location">/success.jsp</param>
</result>
</action>
</package>
<package name="p2" extends="struts-default" namespace="/n2">
<action name="action3">
<result name="success" >/success.jsp</result>
</action>
</package>
<!-- 全局结果视图 -->
<package name="myDefault" extends="struts-default" abstract="true">
<!-- 自定义结果类型
在包中配置的结果视图,是只能当前包和其子包中使用
-->
<result-types>
<result-type name="captcha" class="com.web.result.CAPTCHAResult"></result-type>
</result-types>
<global-results>
<!-- 结果视图的查找顺序,先找当前动作类自己的,如果没有的,再去全局的结果视图中查找 -->
<result name="success" type="captcha">
<param name="width">240</param>
<param name="height">40</param>
</result>
</global-results>
</package>
<!-- 自定义结果类型的配置 -->
<package name="p3" extends="myDefault">
<action name="captchaAction" class="com.web.action.CaptchaAction" >
<!-- 写在action内部的结果视图,是只能当前动作类使用的
<result name="success" type="captcha">
配置图像的大小
<param name="width">240</param>
<param name="height">40</param>
</result>
-->
</action>
</package>
</struts>