ognl概述
ognl的作用
Struts2默认的表达式语言就是OGNL,它具有以下特点:
- 支持对象方法调用。例如:objName.methodName()。
- 支持类静态方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名|值名]。
例如:@java.lang.String@format(‘foo %s’,’bar’)。
- 支持赋值操作和表达式串联。
例如:price=100,discount=0.8,calculatePrice(),在方法中进行乘法计算会返回80。
- 访问OGNL上下文 (OGNL context)和 ActionContext。
- 操作集合对象。
但是上面OGNL作用的访问方法啊等等,都不是经常用到的。我们用到的是下面这种!!!
之前web阶段,学习过EL表达式,EL表达式在JSP中获取域对象里面的值。
OGNL是一种表达式,这个表达式功能更加强大
- 在Struts2里面操作值栈的数据!!
- 一般ognl在struts2操作:和struts2标签一起使用操作值栈。
OGNL和struts2的关系:OGNL不是struts2的一部分,是一个单独的项目,只是经常和struts2一起使用
- 使用ognl的时候,首先导入jar包。
ognl入门案例
使用OGNL+struts2标签实现计算字符串长度。
支持对象方法调用objName.methodName();
以前计算长度在java代码中,调用字符串.length();
使用struts2的标签
- 使用jstl的时候,除了导入jar包外,还要在jsp页面引入标签库。struts2也是一样的!!!
具体细节代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags" %><!-- 引入标签库 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'ognl.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<s:property value="'huyibaoaitongzuo'.length()"/><!-- 在struts2标签中使用ognl表达式 -->
</body>
</html>