struts2的学习归纳

Struts2的Servlet的API的访问

  1. 完全解耦合的方式:ActionContext
//得到ActionContext对象
ActionContext context=ActionContext.getContext();
//接收数据
Map<String,Object> map=context.getParameters();
//向域对象中存入数据
context.put("reqName","reqValue");//相当于request.setAttribute()
context.getSession().put("sessionName","sessValue");//相当于session.setAttribute()
context.getApplication().put("appName","appValue");//相当于application.setAttribute()

注意:这种方式只能获得代表request、session、application的数据的Map集合,不能操作这些对象的本身的方法。

  1. Servlet原生API的方式:ServletActionContext
//直接获得request对象,通过ServletActionContext
HttpServletRequest requset=ServletActionContext.getRequest()

注意:这种方式可以操作域对象的数据,同时也可以获得对象的方法。

  1. 实现相应的接口
补充
  • Servlet是单例的,多个程序访问同一个Servlet只会创建一个Servlet的实例。
  • Action是多例的,一次请求,创建一个Action的实例(不会出现线程安全的问题)。

struts的数据封装

  1. 属性驱动:提供属性set方法的方式(不常用)
  • 在Action中提供对应的属性,以及set方法
  • 属性要和页面中的name对应,否则得到的值为null
    <!-- 编写页面 -->
    <h3>方式一:属性驱动-提供set方法的方式</h3>
    <form action="${pageContext.request.contextPath }/user" method="post">
        用户名:<input type="text" name="username"/><br/>
        密码:<input type="password" name="password"/><br/>
        年龄:<input type="text" name="age"/><br/>
        生日:<input type="text" name="birthday"/><br/>
        工资:<input type="text" name="salary"/><br/>
        <input type="submit">
    </form>
	=======================================
//编写Action
public class UserAction extends ActionSupport {
    //提供对应的属性
    private String username;
    private String password;
    private String age;
    private Date birthday;
    private Double salary;

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

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

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

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    public String execute(){
        //接收数据
        System.out.println(username);
        System.out.println(password);
        System.out.println(age);
        System.out.println(birthday);
        System.out.println(salary);

        return NONE;
    }
}
  1. 属性驱动:页面中提供表达式的方式
  • 在Action中提供封装数据的对象
  • 提供该对象的get,set方法
    <h3>方式二:属性驱动-页面中提供表达式的方式</h3>
    <form action="${pageContext.request.contextPath }/user2" method="post">
        用户名:<input type="text" name="user.username"/><br/>
        密码:<input type="password" name="user.password"/><br/>
        年龄:<input type="text" name="user.age"/><br/>
        生日:<input type="text" name="user.birthday"/><br/>
        工资:<input type="text" name="user.salary"/><br/>
        <input type="submit">
    </form>
	=====================================
public class UserAction2 extends ActionSupport {
	//提供一个User对象:
    private User user;
	//提供user的set和get方法:一定要提供方法;否则除了第一个值外,其他值都是null.
	//因为拦截器完成数据封装,需要创建User对象,
	//通过get方法可以获得同一个对象,将数据封装到同一个对象中
    public User getUser() {
        return user;
    }

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

    @Override
    public String execute() throws Exception {
        System.out.println(user);

        return NONE;
    }
}
  1. 模型驱动的方式
  • 实现ModelDriven 接口
  • 手动提供对象的实例,并交给Model返回
    <h3>方式三:模型驱动-采用模型驱动的方式</h3>
    <form action="${pageContext.request.contextPath }/user3" method="post">
        用户名:<input type="text" name="username"/><br/>
        密码:<input type="password" name="password"/><br/>
        年龄:<input type="text" name="age"/><br/>
        生日:<input type="text" name="birthday"/><br/>
        工资:<input type="text" name="salary"/><br/>
        <input type="submit">
    </form>
	=============================================
public class UserAction3 extends ActionSupport implements ModelDriven<User> {
    // 模型驱动使用的对象: 前提必须手动提供对象的实例
    private User user=new User();//手动实例化User

    @Override
	//模型驱动要使用的方法:
    public User getModel() {
        return user;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(user);
        return NONE;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值