版权声明:本文为博主原创文章,版权归原作者小思所有,转载或者引用本文内容请注明来源及原作者,https://blog.csdn.net/zeal9s/ https://blog.csdn.net/zeal9s/article/details/81437719
dispatcher:result type默认的类型,相当于servlet的foward方式跳转页面。客户端看到的是struts2中配置的地址,而不是真正页面的地址,一般用于跳转到jsp页面,页面能拿到值
redirect:页面重定向,客户端跳转,数据全部丢失,地址栏发生变化,页面不能拿到值
chain:将请求转发给一个Action,Action能通过getAttribute(“uname”)拿到值
redirect-action:一般用于跳转到Action,Action不能通过getAttribute(“uname”)拿到值
前两种的xml action的配置如下(传值给jsp):
<result type="redirect-action">/success.jsp</result>
后两种的xml action的配置如下(传值给Action):
<result type="redirect-action">/TestAction</result>
success.jsp代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
isELIgnored="false" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:debug></s:debug>
<!--值在ValueStack的值中,所以直接拿,注意实体类的属性和下面的value还有表单的input的name保持一致,-->
<h3>从debug的值栈中拿值:</h3><br>
用户名:<s:property value="uname"/>=======密码:<s:property value="upwd"/>
<!--通过四种跳转方式拿值 -->
<h3>通过四种跳转方式拿值:</h3><br>
<!-- 使用EL表达式记得在页面的开始写上isELIgnored="false" -->
用户名:${request.uname}=======密码:${request.upwd}
</body>
</html>
客户端login.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="LoginAction" method="post">
用户名:<input type="text" name="uname"><br>
密码:<input type="password" name="upwd"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
LoginAction:接受客户端(login.jsp)的数据代码如下:
package com.zs.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String uname;
private String upwd;
private HttpServletRequest request;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
public String test() {
//测试响应到页面的几种请求方式
request=ServletActionContext.getRequest();
request.setAttribute("uname", uname);
request.setAttribute("upwd", upwd);
System.out.println("uname:"+uname+"upwd:"+upwd);
return SUCCESS;
}
}
TestAction测试后两种方式的Action代码如下:
package com.zs.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport{
private HttpServletRequest request;
public String test() {
request=ServletActionContext.getRequest();
//测试redirect-action这种方式是否拿到数据
System.out.println("uname:"+request.getAttribute("uname")+"=====upwd:"+request.getAttribute("upwd"));
return NONE;
}
}
说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~