struts核心配置文件详解(result配置)

struts核心配置文件详解(result配置)

配置处理结果(result)

  • 本人独立博客https://chenjiabing666.github.io
  • 我们在包中定义的<result name="" type="">value</result>,这个是用来根据action方法返回的字符串,跳转到指定的视图或者其他的action。
    • name指定的是action方法返回的结果。
    • type 指定的是跳转的类型,默认的是dispatcher,相当于Servlet中的RequestDispatcher,地址栏中的url不会改变
  • 如果一个action方法中可能返回的值是多个,比如如果测试成功返回success,测试失败返回input,出现异常返回error,那么此时就需要用到多个<result>标签来定义这些返回值跳转的视图
<action name="login" class="com.controller.LoginAction">
    <result name="success">/JSP/success.jsp</result>
    <result name="login">/JSP/login.jsp</result>
</action>

类型

  1. dispatcher
    • 表示采用的跳转方式为转发,这个和Servlet中的RequestDispathcher是一个原理,地址栏的url是不会改变的
    • dispatcher 结果类型是在Action与JSP页面之中的一种默认的跳转发方式,相当于之间的Servlet中的转发(RequestDispatcher)
  2. redirect
    • 用于跳转到其他的页面,但是这个地址栏的url是改变的
    • 这个结果类型主要用于重定向到指定的视图资源,这个和dispatcher比较相似,但是这个地址改变了。相当于Servlet中的sendirect()这个方法。
  3. chain
    • Action链式处理结果类型
    • 很多时候,当一个Action处理完之后并不想转发到视图资源,而是想要跳转到指定的Action继续未完成的处理,这时就需要使用chain,使得两个Action成为链式处理。
    • 范例如下: 其中<result>中的value要写成指定的<action>标签中的name值,如果不是一个包中的,还要引入另外一个包中的action,看上面的内容

    <package name="Login" extends="struts-default" namespace="/"> ​ <action name="regist" class="com.action.regist"> <result name="success" type="chain">login</result> </action> ​ <action name="login" class="com.action.LoginAction"> <result name="success">/JSP/success.jsp</result> <result name="login">/JSP/login.jsp</result> </action> </package> ​

  4. freemaker
    • 用于与FreeMaker整合的结果类型
  5. httpheader
    • 用于控制特殊的HTTP行为的结果类型
  6. redirectAction
    • 用于直接跳转到其他Action的结果类型
    • 上面说个redirect是用于重定向到指定的视图资源的,那么这个是用于重定向到指定的Action类的,这个和chain类型非常相似,不过一个是重定向,一个是转发,当然其中的request中的内容会丢失。
  7. stream
    • 用于浏览器返回一个InputStream的结果类型(一般用于下载)
  8. velocity
    • 用于与Velocity整合的结果类型
  9. xslt
    • 用于与XML/XSTL整合的结果类型
  10. plainText
    • 用于显示某个页面的原始代码的结果类型

局部结果

  • 配置局部结果就是在作为<action>的子标签配置,就是上面的配置方式,但是这种局部配置只针对自己的父标签的action起作用。如下:
<!-- name指定了包的名称,extends指定继承的类,namespace指定url路径,这里使用/表示在根路径下就可以直接访问 -->
<package name="Login" extends="struts-default" namespace="/">
<action name="login" class="com.controller.LoginAction">
    <result name="success">/JSP/success.jsp</result>
    <result name="login">/JSP/login.jsp</result>
</action>
</package>

配置全局结果

  • 当我们需要一个视图可能这个package中action都需要,如果一个action中定义一个这样的result难免有些多余,现在我们使用<global-results>只需要在<package>元素内定义一次即可,一旦有返回值满足即可调用这个视图。比如我们定义一个错误处理的界面,因为这个处理视图是一样的,只需要配置全局result即可。
<package name=”Login” extends=”struts-default” namespace=”/user”>
<global-results >
    <!—只要执行action的类返回error就会跳转到error.jsp--!>
    <result name=”error”>error.jsp</result>
</global-results>
<action name=”login”class=”com.action.LoginAction”>
    <result name=”success”>success.jsp</result>
</action>
</package>
  • 根据上面的配置,如果此时login这个action返回的字符串为error,那么此时的全局配置结果就起作用了,就会跳转到error.jsp页面
  • 但是我们一个action处理错误的页面和特殊,虽然返回的是error,但是我就想跳转到其他的页面,那么可以在这个action的标签下重新定义一个结果,此时的局部结果就会覆盖全局结果

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDN及云技术分享

GDB实现原理和使用范例

这篇文章为了让你深入了解gdb的工作原理,以及如何在linux环境下使用强大的gdb调试程序功能。

8391
来自专栏程序员同行者

django rest framework mixins小结

由上图可以看出这个类的一个逻辑,其中,perform_create( )对serializer直接进行save保存,当在一些情境下,我们需要对perform...

1553
来自专栏linux系统运维

压缩打包的介绍以及几种压缩工具的使用

2036
来自专栏JetpropelledSnake

Python入门之Python引用模块和查找模块路径

#这篇文章主要介绍了Python引用模块和Python查找模块路径的相关资料,需要的朋友可以参考下 模块间相互独立相互引用是任何一种编程语言的基础能力。对于“模...

4079
来自专栏java、Spring、技术分享

Netty 新连接的接入

本文通过源码分析Netty是如何一步步的将接收客户端的新连接,然后将连跟NioEventLoop绑定,并注册相应的Read事件。

2022
来自专栏IT技术精选文摘

RMI原理及实现

1 简介 RMI是远程方法调用的简称,像其名称暗示的那样,它能够帮助我们查找并执行远程对象的方法。通俗地说,远程调用就象将一个class放在A机器上,然后在B机...

1948
来自专栏机器学习和数学

[编程经验] Python中的modlue和packages的区别

今天聊一下,Python中模块和包的区别和联系,以及怎么创建自己的package,通过学习,你可以明白我们平时用Python的时候,到底import 了什么东西...

2573
来自专栏Java成神之路

Java之 将程序打包成jar包

   2.指定目录:建一个目录,来存放.class文件和.jar文件。 本文指定目录为 E:\myclass 。

2453
来自专栏北京马哥教育

Linux 中命令链接操作符,让你的代码更简洁!

Linux命令中链接的意思是,通过操作符的行为将几个命令组合执行。Linux中的链接命令,有些像你在shell中写短小的shell脚本,并直接在终端中执行。链接...

802
来自专栏Linyb极客之路

工作流引擎之activiti任务监听器

任务监听器只能添加到流程定义中的用户任务中。 注意它必须定义在BPMN 2.0 extensionElements的子元素中, 并使用activiti命名空间,...

2992

扫码关注云+社区

领取腾讯云代金券