struts2学习笔记--OGNL表达式1

简介:   struts2标签库主要使用的是OGNL语言,类似于El表达式,但是强大得多,它是一种操作对象属性的表达式语言,OGNL有自己的优点: 能够访问对象的方法,如list.size(); 能够访问静态属性和静态方法,只需要在类名前,方法前加上@,如@Math@PI; 支持赋值操作.

  struts2标签库主要使用的是OGNL语言,类似于El表达式,但是强大得多,它是一种操作对象属性的表达式语言,OGNL有自己的优点:

    1. 能够访问对象的方法,如list.size();
    2. 能够访问静态属性和静态方法,只需要在类名前,方法前加上@,如@Math@PI;
    3. 支持赋值操作.如赋值#value=5;
    4. 能够访问OGNL上下文和ActionContext;
    5. 能操作集合类对象.
  • 使用OGNL:
    public class Test {
    
        public static void main(String[] args) throws OgnlException {
    
            //原则:数据分为两类--常用的和不常用的--常用的数据直接取,不常用的数据加#获取
            Map<String, Object> map=new HashMap<String, Object>();
            map.put("name", "zhangsan");
            map.put("age", 22);
            User user=new User();
            user.setName("lisi");
            Object object = Ognl.getValue("name", map, user);
            System.out.println(object);//输出结果为lisi
            Object object1 = Ognl.getValue("#name", map, user);
            System.out.println(object1);//输出结果为zhangSan 
            
        
        }
    
    }

    在jsp页面中使用struts2标签库:

    1:导入标签库    <%@ taglib prefix="s" uri="/struts-tags" %>

    注意:要使用struts2标签,那么要通过struts2过滤器来启用.如果过滤器的配置为<url-pattern>为*.action时,是不能直接通过url访问jsp页面的,需要通过action跳转.如果配置为<url-pattern>为/*时,是可以直接访问jsp页面的.struts2不推荐直接访问jsp页面,为了安全,推荐使用action来控制.

  下面是一个简单登录案例的LoginAction的代码(实体类user有两个属性name,pwd,代码省略,login.jsp代码也省略):

package com.wang.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.wang.entity.User;

public class LoginAction extends ActionSupport{

    private User user;
    public String login(){
        System.out.println(user.getName()+":::"+user.getPwd());
        if("wang".equals(user.getName())&&"123".equals(user.getPwd())){
            ActionContext.getContext().getSession().put("user", user.getName());
            return SUCCESS;
        }else{
            return LOGIN;
        }
        
    }
    
    public String exit(){
        ActionContext.getContext().getSession().remove("user");
        System.out.println("tuichu");
        return SUCCESS;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    
}

  当登录成功时会跳转到succ.jsp页面,假设我们要在该页面获取到登录的用户名,并在浏览器显示出来,succ.jsp代码应该这样写(只保留body部分核心代码):

<body>
    <h1>欢迎用户${sessionScope.user }---------------<a href="user/exit.action">退出</a></h1>
    <h1>欢迎用户<s:property value="user.name"/>---------------</h1>
    <h1>欢迎用户<s:property value="#session.user"/></h1>
    
  </body>

这三种方式都能把用户名wang给显示出来,第一种使用的el表达式,这里不再多说,第二种取得是user对象里的一个属性,而User本身是LoginAction的一个属性,用ognl表达式取值时可以直接取到,但我们希望取得是我们存入session里的user,当在session,request,application域中取数据时,应当在在前面加上#,如上.上述第三种方式相当于:session.getAttribute("user");

 

结论:使用ognl表达式访问action的属性时,可以直接访问.访问actionContext中的数据时需要加#;

相关文章
|
Arthas 安全 Java
JYM 相关命令之:sysenv、vmoption、getstatic、ognl | 学习笔记
快速学习 JYM 相关命令之:sysenv、vmoption、getstatic、ognl
148 0
JYM 相关命令之:sysenv、vmoption、getstatic、ognl | 学习笔记
|
Java 大数据 数据库
Ognl | 学习笔记
快速学习 Ognl,介绍了 Ognl 系统机制, 以及在实际应用过程中如何使用。
110 0
Ognl | 学习笔记
|
前端开发 Java 数据安全/隐私保护
OGNL 在项目中的运用 | 学习笔记
快速学习 OGNL 在项目中的运用,介绍了 OGNL 在项目中的运用系统机制, 以及在实际应用过程中如何使用。
63 0
|
安全 Java API
表达式引擎--OGNL
OGNL (Object Graph Navigation Language) 是一个开源的表达式引擎。通过使用OGNL,我们能够通过表达式存取Java对象树中的任意属性和调用Java对象树的方法等。也就是说,如果我们把表达式看成是一个带有语义的字符串,那么OGNL就是这个语义字符串与Java对象之间沟通的催化剂,通过OGNL,我们可以轻松解决在数据流转的过程中所碰到的各种问题。
635 0
|
SQL 安全 Java
学习MyBatis必知必会(4)~ OGNL 表达式和EL 表达式
学习MyBatis必知必会(4)~ OGNL 表达式和EL 表达式
373 0