前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >struts核心配置文件详解(result配置)

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

原创
作者头像
爱撒谎的男孩
发布2018-05-10 18:53:55
1K1
发布2018-05-10 18:53:55
举报
文章被收录于专栏:码猿技术专栏

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>标签来定义这些返回值跳转的视图
代码语言:javascript
复制
<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起作用。如下:
代码语言:javascript
复制
<!-- 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即可。
代码语言:javascript
复制
<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的标签下重新定义一个结果,此时的局部结果就会覆盖全局结果

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • struts核心配置文件详解(result配置)
    • 配置处理结果(result)
      • 类型
      • 局部结果
      • 配置全局结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档