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

访问servletAPI方式

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

原理

1231979-20181124090337145-497591801.png

Action配置

1231979-20181124102740963-1242733188.png

被引入的配置文件

1231979-20181124103009844-1317522603.png

在页面调用取值

1231979-20181124103031595-2014788352.png

1231979-20181124102826185-1965560895.png


第二种:通过ServletActionContext

1231979-20181124103830475-1395807529.png


第三种:通过实现接口

1231979-20181124112709403-414978082.png

也可以注入其他接口

在这里找
1231979-20181124112848492-121951151.png

1231979-20181124112824267-225044215.png

看源码

struts-default.xml文件

1231979-20181124105452240-83615163.png

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

1231979-20181124105603262-1298904509.png

注册拦截器

1231979-20181124105630354-147077968.png

进入源码的类ServletConfigInterceptor

1231979-20181124105847888-245798045.png

核心方法

1231979-20181124111249809-65142395.png

1231979-20181124112429736-1519502619.png

数据中心ActionContext

debug启动测试

1231979-20181124112525493-1568822830.png

1231979-20181124111933440-984936365.png

1231979-20181124112121817-91480787.png


如何获得参数

Action设置

1231979-20181124131700662-1627844353.png

1231979-20181124131617570-1742404303.png

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

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

1231979-20181124131139659-1455003425.png

获取结果

1231979-20181124131229953-1270511256.png

1231979-20181124131309449-472526375.png


验证Action中的生命周期

1231979-20181124132625486-1251373730.png

1231979-20181124132551084-429938865.png

1231979-20181124132644842-430795148.png

结论

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


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

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

1231979-20181124162351568-397857628.png

1231979-20181124162435894-604556986.png

输入参数

1231979-20181124162527063-565605548.png

控制台输出

1231979-20181124162635119-1904449893.png

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

声明对象

1231979-20181124163846946-1181082350.png

1231979-20181124163913298-1799872796.png

页面设置属性

1231979-20181124163956972-1419681307.png

1231979-20181124164021535-123294705.png

控制台输出页面参数

1231979-20181124164118864-1781053123.png

1231979-20181124163812297-1088247542.png

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

Action配置

1231979-20181124164911628-769381597.png

struts.xml 配置

1231979-20181124164934478-273571221.png

页面输入

1231979-20181124164957760-413875899.png

1231979-20181124164807164-45319214.png

控制台输出

1231979-20181124165200247-712552022.png

封装集合类型

List集合

1231979-20181124171505781-1478250336.png

1231979-20181124171537024-2129097790.png

1231979-20181124171521014-2067433622.png

1231979-20181124171550053-1128744120.png

也可以写集合下标
1231979-20181124171823990-891736721.png

1231979-20181124171809301-992037428.png

Map集合

1231979-20181124172219512-377893028.png

1231979-20181124172236429-984340611.png

点击提交会发现出现404错误
1231979-20181124172140535-1029364091.png

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

1231979-20181124172634949-1769602442.png

1231979-20181124172529872-1131200964.png


struts2中的mvc

1231979-20181124160627864-804028843.png

1231979-20181124160757147-166147099.png


附录

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

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>   

转载于:https://www.cnblogs.com/qichunlin/p/10011460.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值