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


    访问servletAPI方式

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

    原理

    Action配置

    被引入的配置文件

    在页面调用取值


    第二种:通过ServletActionContext


    第三种:通过实现接口

    也可以注入其他接口

    在这里找

    看源码

    struts-default.xml文件

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

    注册拦截器

    进入源码的类ServletConfigInterceptor

    核心方法

    数据中心ActionContext

    debug启动测试


    如何获得参数

    Action设置

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

    输入地址栏 http://localhost:8080/Struts2Day02/form1.jsp

    获取结果


    验证Action中的生命周期

    结论

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


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

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

    输入参数

    控制台输出

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

    声明对象

    页面设置属性

    控制台输出页面参数

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

    Action配置

    struts.xml 配置

    页面输入

    控制台输出

    封装集合类型

    List集合

    也可以写集合下标

    Map集合

    点击提交会发现出现404错误

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


    struts2中的mvc


    附录

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

    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>	
    
  • 相关阅读:
    shell编程
    redis不重启,切换RDB备份到AOF备份
    java中接口和抽象类的区别
    java中的泛型
    java中有关初始化的问题
    java中的多态
    java中的Iterator和ListIterator的区别
    Collection集合的三种初始化方法
    java正则表达式appendReplacement和appendTail方法
    java中main函数的String[] args
  • 原文地址:https://www.cnblogs.com/qichunlin/p/10011460.html
Copyright © 2020-2023  润新知