Struts2 值栈和OGNL

值栈和ognl

1. 值栈是ActionContext的一个对象,它是栈结构,特征:先进后出,struts2中值栈存放的数据是Action对象。

 

2. ognl表达式(Object Graph Navigation Language 对象图形导航语言),他的主要优点是:可以访问OGNL上下文和ActionContext。

publicstaticvoid main(String[] args) {

//数据有常用的数据和不常用的数据----常用的一般是"小数据"(如本案例

//中的user),不常用的一般是"大数据"

        //表达式:常用的数据是直接取,不常用的数据(ActionContext中数据)加#

        Map<String,Object> map=new HashMap<String,Object>();

        map.put("username","张三");

        map.put("age", 30);

        User user=new User();

        user.setAge(10);

        user.setUsername("李四");

        Object obj=null;

        try {

            obj=Ognl.getValue("#username", map, user);   //取的不常用数据

        } catch (OgnlException e) {

            e.printStackTrace();

        }

        System.out.println(obj);     //输出结果为张三

}

注意:值栈中的数据理解为“小数据”,ActionContext中的数据理解为“大数据”,小数据又叫根对象,对应getValue的第三个参数。

 

3. struts2中使用ognl表达式是通过struts2标签来取值的。

在jsp中导入struts2的标签库

<%@taglib prefix="s" uri="/struts-tags" %>

 

注意:要使用struts2的标签那么要通过struts2过滤器来启动,如果过滤器的配置为*.action结尾时,不能直接访问jsp页面,需要通过action跳转。如果过滤器配置为/*时,可以直接访问jsp页面,Struts2推荐不直接访问jsp页面,推荐使用action来跳转页面,因为如果直接到jsp页面会暴露地址。
      在jsp页面通过struts2标签获得值栈的数据和ActionContext对象中的数据写法不同,因为值栈是直接把Action对象(本案例中的Action对象是指LoginAction对象)的属性暴露,所以访问值栈中的user的值写法如下:

用户名:<s:property value="user"/>

 

若访问ActionContext中对象的值写法如下:

用户名:<s:property value="#session.user"/>

 

           如果session没有设置值,则无法取到

 

Action页面:

publicclass LoginAction{

    private String user;

    private String pwd;

    HttpServletRequest request;

 

    public String execute(){

        if(user.equals("zys")&&pwd.equals("12345")){

            System.out.println("登录成功");

            HttpServletRequest request=ServletActionContext.getRequest();

            request.getSession().setAttribute("user", user);

            System.out.println("user="+request.getParameter("user"));

            return"success";

        }else{

            System.out.println("登录失败");

            return"failure";

        }

    }

 

    public String getUser() {

        returnuser;

    }

    publicvoid setUser(String user) {

        this.user = user;

    }

    public String getPwd() {

        returnpwd;

    }

    publicvoid setPwd(String pwd) {

        this.pwd = pwd;

    }

}

 

              结论:使用ognl表达式访问action属性时,直接访问,访问actionContext对象值需要加#号。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖墩有点瘦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值