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>
类型
- dispatcher
- 表示采用的跳转方式为转发,这个和Servlet中的RequestDispathcher是一个原理,地址栏的url是不会改变的
- dispatcher 结果类型是在Action与JSP页面之中的一种默认的跳转发方式,相当于之间的Servlet中的转发(RequestDispatcher)
- redirect
- 用于跳转到其他的页面,但是这个地址栏的url是改变的
- 这个结果类型主要用于重定向到指定的视图资源,这个和dispatcher比较相似,但是这个地址改变了。相当于Servlet中的sendirect()这个方法。
- 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>
- freemaker
- 用于与FreeMaker整合的结果类型
- httpheader
- 用于控制特殊的HTTP行为的结果类型
- redirectAction
- 用于直接跳转到其他Action的结果类型
- 上面说个redirect是用于重定向到指定的视图资源的,那么这个是用于重定向到指定的Action类的,这个和chain类型非常相似,不过一个是重定向,一个是转发,当然其中的request中的内容会丢失。
- stream
- 用于浏览器返回一个InputStream的结果类型(一般用于下载)
- velocity
- 用于与Velocity整合的结果类型
- xslt
- 用于与XML/XSTL整合的结果类型
- 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的标签下重新定义一个结果,此时的局部结果就会覆盖全局结果