Struts2中转发和重定向(一)

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页面

---------------------------------------------------------------------------------------

登录失败页面显示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值