【Struts2学习笔记】3:Struts2中Action和result处理的配置

配置Action

在struts.xml中的包下,格式是:

...
<package ...>
    <action name="Action的名称" [class="实现类所在的java包.实现类名"]>
        ...
    </action>
</package>
...

这里所指定的Action名称,即对应请求Action的URL中的Action名.action

Action的实现类可以不写,这样就会使用ActionSupport类。

配置result处理

因为Action使用时会返回不同的字符串用于控制,针对不同的返回来的字符串(或者叫逻辑视图)做不同的事情,就是通过<result></result>双标签来指示处理方法的。

局部result

即在<action></action>双标签中配置的<result></result>双标签,其仅仅对这个Action生效。

...
<action ...>
    ...
    <result [name="返回来的字符串"] [type="处理方式"]>
        处理时要使用的视图
    </result>
    ...
</action>
...

其中name是返回来的字符串,上一篇学习的Action接口中就定义了很多,当然也可以在Action里自定义,总之这里一定是对应的Action真的有可能返回来的字符串。name也是可选的,如果不写,默认就是"success"字符串。

type的值则是要处理的方式,常用的有:

type的值描述
“dispatcher”转发资源
“redirect”重定向到其它URL
“redirectAction”重定向到其它Action
全局result

其name属性和type属性还是一样的用法,全局result不是配置在<action></action>双标签中,而是要配置在和<action></action>双标签并列的<global-results></global-results>双标签中,它会对这个包下所有的Action生效。

...
<package ...>
    <global-results>
        ...
        <result [name="返回来的字符串"] [type="处理方式"]>
            处理时要使用的视图
        </result>
        ...
    </global-results>

    <action ...>
        ...
    </action>
    ...

    <action .../>
    ...
</package>
...

因为有了全局result的存在,有些Action不去写局部result也没关系,让<action ...></action>双标签直接闭合成了<action .../>

对于每个Action而言,要匹配<result></result>中配置的逻辑视图,以去获得具体的处理方式和使用的资源,当既存在局部result又存在全局result时,会优先在局部result中匹配和处理,当全都不匹配时才会去看全局result。

result的三种常见处理方式

"dispatcher","redirect","redirectAction"是result元素的type属性的常见的三种取值,对应了对Action的返回结果的三种常见的处理方式。

"dispatcher"是转发到指定的JSP资源,和<jsp:forward ../>是一个道理。

"redirect"则是重定向到指定的URL,重定向会丢失所有的请求参数、请求属性,就像服务器要求客户端重新向另一个(或者即使还是自己)这个资源进行了请求。它在下层的Servlet层面使用的是HttpServletResponsesendRedirect()方法,因为重定向会发出新的请求,所以连刚刚(到达这个result用的)使用的Action对象也会被析构,里面存的信息也都没了。

"redirectAction"也是重定向,不过是重定向到其它的Action,下层使用的是ActionMapperFactoryActionMapper。为了重定向到其它的Action,必须要给出那个Action的逻辑上的位置信息,也就是它属于哪个命名空间,和它的名字。result标签显然不会提供这种属性,所以是放在其子元素<param></param>中:

...
<result type="redirectAction">
    <param name="actionName">Action的名称</param>
    <param name="namespace">它所在的命名空间</param>
</result>
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值