第一种:通过ActionContext (重点及常用 都是获得原生对象)

原理

2018.11.21 struts2获得servletAPI方式及如何获得参数

Action配置

2018.11.21 struts2获得servletAPI方式及如何获得参数

被引入的配置文件

2018.11.21 struts2获得servletAPI方式及如何获得参数

在页面调用取值

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数


第二种:通过ServletActionContext

2018.11.21 struts2获得servletAPI方式及如何获得参数


第三种:通过实现接口

2018.11.21 struts2获得servletAPI方式及如何获得参数

也可以注入其他接口

在这里找
2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

看源码

struts-default.xml文件

2018.11.21 struts2获得servletAPI方式及如何获得参数

封装配置了20个拦截器,刚才配置的是servletConfig 拦截器

2018.11.21 struts2获得servletAPI方式及如何获得参数

注册拦截器

2018.11.21 struts2获得servletAPI方式及如何获得参数

进入源码的类ServletConfigInterceptor

2018.11.21 struts2获得servletAPI方式及如何获得参数

核心方法

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

数据中心ActionContext

debug启动测试

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数


如何获得参数

Action设置

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

servlet是线程不安全的,在运行期间只创建一个实例,

http://localhost:8080/Struts2Day02/form1.jsp

2018.11.21 struts2获得servletAPI方式及如何获得参数

获取结果

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数


验证Action中的生命周期

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

结论

1.每次请求到来时,都会创建一个心的Action实例;
2.在struts2中的Action是线程安全的,能在方法之前声明接收的变量;可以使用成成员变量接受参数


第一种获取参数实例--- 属性驱动获得实例 (struts2官方推荐使用,但是现实开发不用)

记得提供属性的get/set方法

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

输入参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

控制台输出

2018.11.21 struts2获得servletAPI方式及如何获得参数

第二种获取参数实例----对象驱动

声明对象

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

页面设置属性

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

控制台输出页面参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

第三种获取参数实例---模型驱动

Action配置

2018.11.21 struts2获得servletAPI方式及如何获得参数

struts.xml 配置

2018.11.21 struts2获得servletAPI方式及如何获得参数

页面输入

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

控制台输出

2018.11.21 struts2获得servletAPI方式及如何获得参数

封装集合类型

List集合

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

也可以写集合下标
2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

Map集合

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数

点击提交会发现出现404错误
2018.11.21 struts2获得servletAPI方式及如何获得参数

在map集合中,存储数据是以键值对的形式存在的,接下来修改参数页面

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数


struts2中的mvc

2018.11.21 struts2获得servletAPI方式及如何获得参数

2018.11.21 struts2获得servletAPI方式及如何获得参数


附录

获取参数====对象驱动

package com.legend.c_param;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;
/**
 * 如何获得参数---方式一  属性驱动
 * @author qichunlin
 * action的生命周期
 *     每次请求Action时都会穿件新的Action实例对象
 */
public class Demo8Action extends ActionSupport{
	private static final long serialVersionUID = 1L;
	
	//线程安全的
	
	public Demo8Action() {
		super();		
		System.out.println("Demo8Action被创建了");
	}
	
	//准备与参数键名称相同的属性
	private String name;
	//自动类型转换   只能转换8大基本数据类型以及对应包装类
	private Integer age;

	private Date birthday;
	
	//支持特定类型字符串转换为Date  例如 yyyy-MM-dd
	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public String execute() throws Exception {
		System.out.println("name参数值"+name+"年龄"+age+"生日"+birthday);
		return SUCCESS;
	}

}


获取参数====对象驱动

package com.legend.c_param;

import com.legend.domain.User;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 如何获得参数---方式二 对象驱动
 * @author qichunlin
 * action的生命周期
 *     每次请求Action时都会穿件新的Action实例对象
 */
public class Demo9Action extends ActionSupport{
	private static final long serialVersionUID = 1L;
	//准备user对象
	private User user;
	
	//线程安全的
	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public Demo9Action() {
		super();		
		System.out.println("Demo8Action被创建了");
	}
	//执行方法
	public String execute() throws Exception {
		System.out.println(user);
		return SUCCESS;
	}

}

获取参数===模型驱动

package com.legend.c_param;

import com.legend.domain.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
 * 如何获得参数---方式三 模型驱动
 * @author qichunlin
 * action的生命周期
 *     每次请求Action时都会穿件新的Action实例对象
 */
public class Demo10Action extends ActionSupport implements ModelDriven<User>{
	private static final long serialVersionUID = 1L;
	//准备user  成员变量
	private User user = new User();
	
	//执行方法
	public String execute() throws Exception {
		System.out.println(user);
		return SUCCESS;
	}
	
	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}

}

封装集合类型参数

package com.legend.c_param;

import java.util.List;
import java.util.Map;

import com.opensymphony.xwork2.ActionSupport;
/**
 * 如何获得参数---封装集合类型参数
 * @author qichunlin
 * action的生命周期
 *     每次请求Action时都会穿件新的Action实例对象
 */
public class Demo11Action extends ActionSupport {
	private static final long serialVersionUID = 1L;
	//list集合
	private  List<String> list;
	
	//map集合
	private Map<String,String> map;

	public Map<String, String> getMap() {
		return map;
	}

	public void setMap(Map<String, String> map) {
		this.map = map;
	}

	public List<String> getList() {
		return list;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	//执行方法
	public String execute() throws Exception {
		System.out.println("list"+list);
		System.out.println("map"+map);
		return SUCCESS;
	}
	
}

被引入的配置文件

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<!-- 是否开启开发模式
	struts.enable.DynamicMethodInvocation = false
 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	
	<package name="param" namespace="/" extends="struts-default">
		<action name="Demo8Action" class="com.legend.c_param.Demo8Action" method="execute">
			<result name="success" type="dispatcher">/form1.jsp</result>
		</action>
		
		<action name="Demo9Action" class="com.legend.c_param.Demo9Action" method="execute">
			<result name="success" type="dispatcher">/form2.jsp</result>
		</action>
		
		<action name="Demo10Action" class="com.legend.c_param.Demo10Action" method="execute">
			<result name="success" type="dispatcher">/form3.jsp</result>
		</action>
		
		<action name="Demo11Action" class="com.legend.c_param.Demo11Action" method="execute">
			<result name="success" type="dispatcher">/form4.jsp</result>
		</action>
	</package>
</struts>	

Struts.xml主要配置文件

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<!-- 是否开启开发模式
	struts.enable.DynamicMethodInvocation = false
 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	
	<package name="result" namespace="/" extends="struts-default">
		<!-- 转发 -->
		<action name="Demo1Action" class="com.legend.action.Demo1Action" method="execute">
			<result name="success" type="dispatcher">/hello.jsp</result>
		</action>
		
		<!-- 重定向 -->
		<action name="Demo2Action" class="com.legend.action.Demo2Action" method="execute">
			<result name="success" type="redirect">/hello.jsp</result>
		</action>
		
		<!-- 转发到action -->
		<action name="Demo3Action" class="com.legend.action.Demo3Action" method="execute">
			<result type="chain">
            	 <!-- action的名字 -->
            	 <param name="actionName">Demo1Action</param>
            	 <!-- action所在的命名空间 -->
            	 <param name="namespace">/</param>
         	</result>
		</action>
		
		<!-- 转发到action -->
		<action name="Demo4Action" class="com.legend.action.Demo4Action" method="execute">
			<result type="redirectAction">
				<!-- action的名字 -->
             	<param name="actionName">Demo1Action</param>
             	<!-- action所在的命名空间 -->
             	<param name="namespace">/</param>
         	</result>
		</action>
	</package>
	
	<!-- 引入xml文件 -->
	<include file="com/legend/b_api/struts.xml"></include>
	<include file="com/legend/c_param/struts.xml"></include>
</struts>	

相关文章: