Struts2之结果类型--Action子控制器方法中return "success"会转发到如下对应的jsp页面
<action name="check2" class="cn.tedu.action.LoginAction2">
<result name="success" type="dispatcher">/WEB-INF/success.jsp</result>
</action>
如果结果类型没声明,(result标签中没有指明type属性)默认是 dispatcher (请求转发)
=======================================================
比较重要的几个类型:
- dispatcher —— 请求转发到一个页面 (默认),不可以用这种方式转发到一个action
- chain —— 一个action请求转发至另一个 action
- redirect —— 响应重定向到一个页面
- redirectAction —— 一个action响应重定向至另一个 action
- stream —— 文件下载
=======================================================
如下为重定向:
struts.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package namespace="/login" name="login" extends="struts-default">
<!-- 测试重定向 -->
<action name="form3">
<result>/WEB-INF/login3.jsp</result>
</action>
<action name="check3" class="cn.tedu.action.LoginAction3" method="redit">
<!-- 登陆校验成功,此处采用重定向到另一个action的方式 type要写明属性值为redirectAction -->
<result name="su" type="redirectAction">
<param name="actionName">actionWQ</param>
<!-- 重定向时候携带的参数 -->
<param name="param1">${user}</param><!-- UserInfo对象 -->
<param name="param2">${message}</param><!-- String类型 -->
</result>
<!-- 登陆校验失败 转发中的type可以不注明该属性,应为默认为dispatcher -->
<result name="error" type="dispatcher">/WEB-INF/login3.jsp</result>
</action>
<action name="actionWQ" class="cn.tedu.action.LoginAction3" method="wq">
<result name="ok">/WEB-INF/ok.jsp</result>
</action>
</package>
</struts>
浏览器访问地址:http://localhost:8000/struts_day02/login/form3
显示页面如下:
输入用户名和密码后,若校验通过,则在struts.xml中采用重定向,并传递了两个参数,控制器代码如下:
package cn.tedu.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
/*
* 测试struts2的重定向
*/
public class LoginAction3 {
private UserInfo user;
public UserInfo getUser() {
return user;
}
public void setUser(UserInfo user) {
this.user = user;
}
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String redit(){
if("tom".equalsIgnoreCase(user.getName()) && "123".equals(user.getPassword())){
message = "欢迎登陆!";
return "su";
}
message = "用户名或密码错误!";
return "error";
}
public String wq(){
System.out.println("这是重回定向的Action方法!");
HttpServletRequest request = ServletActionContext.getRequest();
String p1 = request.getParameter("param1");
String p2 = request.getParameter("param2");
System.out.println(p1);
System.out.println(p2);
return "ok";
}
}
实体类如下:
package cn.tedu.action;
import java.io.Serializable;
/**
* 普通的javabean
* 域模型类:用于封装用户相关信息 可以再
* 可以在登录控制器和注册控制器中重用
*/
public class UserInfo implements Serializable{
private static final long serialVersionUID = -8306901684466363196L;
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserInfo [name=" + name + ", password=" + password + "]";
}
}
登录成功页面显示:
控制台显示:
这是重回定向的Action方法!
UserInfo [name=tom, password=123]
欢迎登陆!
重定向的时候又回到了cn.tedu.action.LoginAction3这个控制器,但是调用的是wq方法,return 到了ok.jsp页面
---------------------------------------------------------------------------------------
登录失败页面显示: