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

2018-05-10 18:53:55 浏览数 (1)

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的标签下重新定义一个结果,此时的局部结果就会覆盖全局结果

0 人点赞