OGNL表示式詳解
一、什麼是OGNL?
OGNL(Object-Graph Navigation Language:物件圖導航語言)是一種功能強大的表示式語言,通過它簡單一致的表示式語法,可以存取物件的任意屬性,呼叫物件的方法,遍歷整個物件的結構圖,實現欄位型別轉化等功能。它使用相同的表示式去存取物件的屬性。Struts2的預設表示式語言就是OGNL。
二、OGNL的作用
1、支援物件方法呼叫
2、支援靜態方法呼叫和值訪問
3、支援賦值操作和表示式串聯
4、訪問OGNL上下文
5、操作集合物件
三、OGNL的三要素
1、表示式(Expression):表示式是整個OGNL的核心,OGNL會根據表示式去物件中取值。所有OGNL操作都是針對表示式解析後進行的,它表明此次OGNL操作要“做什麼”。表示式就是一個帶有語法含義的字串,這個字串規定了操作的型別和操作的內容。OGNL支援大量的表示式語法,不僅支援這種“鏈式”物件訪問路徑,還支援在表示式中進行簡單的計算。
2、根物件(Root):Root物件可以理解為OGNL的操作物件,表示式規定了“做什麼”,而Root物件規定了“對誰操作”。OGNL稱為物件圖導航語言,所謂物件圖,就是可以以任意一個物件為根,通過OGNL可以訪問與這個物件關聯的其他物件。
3、上下文環境(Context):設定了Root物件,OGNL可以對Root物件進行取值或者寫值等操作,Root物件所在環境就是OGNL的上下文環境(Context)。上下文環境規定了OGNL的操作“在哪裡進行”。上下文環境Context是一個Map型別的物件,在表示式中訪問Context中的物件,需要使用#號加上物件名稱,即“#物件名稱”的形式。
下面講述一個具體的入門案例:
package struts2.ognl;
import org.junit.Test;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;
public class OGNLTest1 {
@Test
//OGNL呼叫物件的方法
public void demo1() throws OgnlException{
OgnlContext ognlContext = new OgnlContext();
Object obj = Ognl.getValue("'helloWorld'.length()", ognlContext, ognlContext.getRoot());
System.out.println(obj);
}
/**
* OGNL除了可以訪問物件的方法,還可以訪問物件的靜態方法,其語法格式如下:
* @throws OgnlException
* @類的全路徑名@方法名稱(引數列表)
* @類的全路徑名@屬性名稱
*/
@Test
//OGNL呼叫物件的靜態方法
public void demo2() throws OgnlException{
OgnlContext ognlContext = new OgnlContext();
Object obj = Ognl.getValue("@ [email protected]()", ognlContext, ognlContext.getRoot());
System.out.println(obj);
}
@Test
//OGNL獲取資料
public void demo3() throws OgnlException{
OgnlContext ognlContext = new OgnlContext();
//獲取OgnlContext中的資料
ognlContext.put("name", "張三");
String name = (String) Ognl.getValue("#name", ognlContext, ognlContext.getRoot());
System.out.println(name);
}
}
相關推薦
OGNL表示式詳解
一、什麼是OGNL? OGNL(Object-Graph Navigation Language:物件圖導航語言)是一種功能強大的表示式語言,通過它簡單一致的表示式語法,可以存取物件的任意屬性,呼叫物件的方法,遍歷整個物件的結構圖,實現欄位型別轉化等功能。它使用相同的表示式
struts2基礎探索之OGNL表示式詳解
OGNL概述: OGNL是一種可以吧UI元素(如table和input等基礎元素)和model object(模型物件)繫結的語言,且通過OGNL的TypeConverter機制可以更容易實現值型別的轉換 .在struts2中使用OGNL表示式實際上是使用實
Jsp的指令碼、宣告、表示式 詳解
jsp指令碼 在<%%>中包含可執行的Java程式碼 <% Java程式碼 %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding
php 中正則表示式詳解
概述 正則表示式是一種描述字串結果的語法規則,是一個特定的格式化模式,可以匹配、替換、擷取匹配的字串。常用的語言基本上都有正則表示式,如JavaScript、java等。其實,只有瞭解一種語言的正則使用,其他語言的正則使用起來,就相對簡單些。文字主要圍繞解決下面問題展開。 有哪些常用的
Cron表示式詳解和表示式的驗證
本篇不算原創,因為主要內容來自網上的部落格,所以給出我參考文章的連結。 本文cron表示式詳解的大部分內容參考了[cron表示式詳解]和Quartz使用總結、Cron表示式 這兩篇文章。 cron校驗的內容參考了 判斷cron表示式輸入是否有效的正則表示式 和Verifying a cron expres
正則表示式詳解(貪婪與懶惰、前瞻與後顧、後向引用等)
之前嫌正則麻煩,一直沒有深入去了解過正則,能不用的地方就不使用。 最近專案中遇到了不可避免的正則使用,所以花了點時間去了解並整理了一下,理解不一定完全準確,如有不對歡迎指出,希望對大家有所幫助。 一、名詞解釋 首先我們瞭解幾個名詞:元字元 、 普通字元、列印字元、非列印字元、 限定符 、定位符、非列
Spring排程器corn表示式詳解
NAME crontab -- tables for driving cron DESCRIPTION A crontab file contains instructions to the cron(8) daemon of the general
Django中聚合函式,F表示式和Q表示式詳解
學習聚合函式的準備工作 新建一個專案,在新建一個app,名字隨意,然後在app中的models中定義幾個模型: from django.db import models # Create your models here. class Author(models.Model):
正則表示式詳解及實戰
Create by jsliang on 2018-11-14 10:41:20 Recently revised in 2018-11-19 09:04:18 Hello 小夥伴們,如果覺得本文還不錯,記得給個 star,你們的 star 是我學習的動力!GitHub 地址 正則表
linux ${}表示式詳解
表示式替換 1、${var_name}等價於$var_name(通常用這種簡寫方式) 2、$(var:-default) 和$(var-default) $(var:-default) 當var為空或未定義時整個
Cron表示式詳解(job表示式)
Cron表示式的詳細用法 欄位 允許值 允許的特殊字元 秒 0-59 , - * / 分 0-59 , - * / 小時 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7
python正則表示式詳解(二):特殊字元序列
內容提要: 說明:僅供學習交流使用 二、python正則表示式中的特殊字元序列 \number \A \Z \b \B \d \D \s \S \w \W \\ 2.1\number 以相同的序號代表的組所匹配的內容
C語言正則表示式詳解
標準的C和C++都不支援正則表示式,但有一些函式庫可以輔助C/C++程式設計師完成這一功能,其中最著名的當數Philip Hazel的Perl-Compatible Regular Expression庫,許多Linux發行版本都帶有這個函式庫。 C語言處理正則表示式常用的函
正則表示式詳解
一、校驗數字的表示式 1 數字:^[0-9]*$ 2 n位的數字:^\d{n}$ 3 至少n位的數字:^\d{n,}$ 4 m-n位的數字:^\d{m,n}$ 5 零和非零開頭的數字:^(0|[1-9][0-9]*)$ 6 非零開頭的最多帶
三元表示式詳解
三元表示式 test ? expression1 : expression2 引數 test 任何 Boolean 表示式。 expression1 如果 test 為 true,則返回表示式。可能是逗號表示式。 expression2 如果 test 為 fa
正則表示式詳解/大全
正則表示式 前端往往有大量的資料效驗工作,可以通過正則表示式提高工作效率。 修飾符: i 不區分大小寫 g 全域性查詢 m 多行查詢 方法: test() 根據正則表示式規範判斷某個字串是否符合該正則規範,返回一個布林值 用法:reg.test(str
SQL---模糊查詢與正則表示式詳解和對比
1:模糊查詢 在進行資料庫查詢的時候,有完整查詢和模糊查詢之分; 完整查詢就是我們平時查詢的普通語句(對某個查詢條件確定的前提下),而模糊查詢就是常見的where 後面增加了 like 關鍵字。 一般模糊查詢語句如下: select 欄位 from 表 where 某欄位 l
Cron表示式詳解
1.cron表示式格式: {秒數} {分鐘} {小時} {日期} {月份} {星期} {年份(可為空)} 2.cron表示式各佔位符解釋: {秒數} ==> 允許值範圍: 0~59 ,不允許為空值,若值不合法,排程器將丟擲SchedulerException異常
AspectJ的切入點表示式---execution表示式詳解
Aspectj切入點語法定義 在使用spring框架配置AOP的時候,不管是通過XML配置檔案還是註解的方式都需要定義pointcut”切入點” 例如定義切入點表示式 execution (* com.sample.service.impl..*. *(..)) execution()是
js 正則表示式詳解
開篇,還是得說說 ^ 和 $ 他們是分別用來匹配字串的開始和結束,以下分別舉例說明 "^The": 開頭一定要有"The"字串; "of despair$": 結尾一定要有"of despair" 的字串; 那麼,