result
:
result
是action
节点的子节点result
代表action
方法执行后, 可能去的一个目的地- 一个
action
节点可以配置多个result
子节点. result
的name
属性值对应着action
方法可能有的一个返回值.
<result name="index">/index.jsp</result>
result
一共有 2 个属性, 还有一个是type
: 表示结果的响应类型result
的type
属性值在struts-default
包的result-types
节点的name
属性中定义.
常用的有
dispatcher
(默认的): 转发. 同 Servlet
中的转发.
<result name="success" type="dispatcher">/success.jsp</result>
redirect
: 重定向
<result name="login" type="redirect">/login.jsp</result>
redirectAction
: 重定向到一个 Action
注意: 通过 redirect
的响应类型也可以便捷的实现 redirectAction
的功能!
ps:(
转发在服务器端完成的;重定向是在客户端完成的
转发的速度快;重定向速度慢
转发的是同一次请求;重定向是两次不同请求
转发不会执行转发后的代码;重定向会执行重定向之后的代码
转发地址栏没有变化;重定向地址栏有变化
转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成)
<result name="index" type="redirectAction">
<param name="actionName">testAction</param>
<param name="namespace">/atguigu</param>
</result>
OR
<result name="index" type="redirect">/atguigu/testAction.do</result>
<!-- 要重定向到的 Action -->
<package name="testPackage" namespace="/atguigu" extends="struts-default">
<action name="testAction"
class="com.atguigu.struts2.action.TestAction">
<result>/success.jsp</result>
</action>
</package>
chain
: 转发到一个 Action
注意: 不能通过 type=dispatcher
的方式转发到一个 Action
只能是:
<result name="test" type="chain">
<param name="actionName">testAction</param>
<param name="namespace">/atguigu</param>
</result>
不能是:
<result name="test">/atguigu/testAction.do</result>
新建:
package com.atguigu.struts2.action;
public class TestResultAction {
private int number;
public void setNumber(int number) {
this.number = number;
}
public String execute(){
String result = null;
//根据请求参数 number 的值, 返回对应的 JSP 页面
//1. 若 number 是 3 个整数, 返回 success.jsp 页面
if(number % 4 == 0)
result = "success";
//2. 若 number 除以 3 余 1, 返回 login.jsp
else if(number % 4 == 1)
result = "login";
//3. 若 number 除以 3 余 2, 返回 index.jsp
else if(number % 4 == 2)
result = "index";
else
return "test";
return result;
}
}