1. 程式人生 > >OGNL表示式詳解

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" 的字串; 那麼,