Struts2学习(五)
表达式
1、表达式语言 ( Expression Language )
2、表达式的本质: 就是 按照某种规则 书写的 字符串
3、表达式的处理: 一定有一套程序 对 表达式 中的 字符串进行解析和处理,比如 Tomcat
4、常见的表达式
- JSP 容器中支持 EL 表达式 ( 因此在 JSP 页面中可以直接使用 )
- Spring 中 可以使用 Spring Expression Language ( SpEL )
- Struts2 中可以使用 对象图导航语言Object Graphic Navigation Language(OGNL)
OGNL
1、定义
- OGNL 是一种 功能强大 的 表达式语言 ( Expression Language )
- OGNL 在 非 Web 环境下 ,需要用到 :javassist-3.20.0-GA.jar,ognl-3.1.12.jar
- OGNL 目前是 Apache 基金会 下的 commons 项目 下的 一个小项目: http://commons.apache.org
2、测试案例
- OgnlContext两个方法测试案例
package ecut.OGNL.entity; import java.io.Serializable; public class Customer implements Serializable { private static final long serialVersionUID = 7499870485797565944L; private String username ;
private String password ;
private String confirm ; public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConfirm() {
return confirm;
}
public void setConfirm(String confirm) {
this.confirm = confirm;
} }package ecut.OGNL; import java.util.Map; import ecut.OGNL.entity.Customer;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException; public class OgnlTest1 { public static void main(String[] args) throws OgnlException {
/*OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="#xx" />
struts页面中不能单独使用,el可以单独使用 ${sessionScope.username} */
OgnlContext context = new OgnlContext();
//OgnlContext 实现了Map接口
System.out.println( context instanceof Map ); // Ognl.setValue( expression , root, value );
Ognl.setValue( "customer" , context , new Customer() ); // Customer c = new Customer(); context.put( "customer" , c ) ; Ognl.setValue( "customer.username" , context , "张三丰" ); // c.setUsername( "张三丰" ); // JSP 表达式 : <%= c.getUsername() %>
// EL 表达式: ${ customer.username }
// OGNL 表达式 : customer.username(支持OGNL的环境,才可以使用) Object value = Ognl.getValue( "customer.username" , context ) ; // Ognl.getValue(expression, root)
System.out.println( value ); } }OGNL 在 非 Web 环境下需要添加两个jar包,OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="#x" /> struts页面中不能单独使用,el可以单独使用 ${sessionScope.username}。OgnlContext实现了Map接口因此可以使用相应的方法获取属性和设置属性。
- 单元测试测试案例
package ecut.OGNL; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import ecut.OGNL.entity.Customer;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException; public class OgnlTest2 { private OgnlContext root; /* @Before 每次test都执行一次,@BeforeClass仅执行一次,方法得是静态的 */
public @Before void init() throws OgnlException {
root = new OgnlContext();
Ognl.setValue("customer", root, new Customer());
Ognl.setValue("customer.username", root, "张三丰");
} public @Test void testGetValue() throws OgnlException {
Object value = Ognl.getValue("customer.username", root);
System.out.println(value);
} public @Test void testSetValue() throws OgnlException {
Object value = Ognl.getValue("customer.username", root);
System.out.println(value);
Ognl.setValue("customer.username", root, "张君宝");
value = Ognl.getValue("customer.username", root);
System.out.println(value);
} public @After void destory() {
} }首先要添加Junit 的library,然后新建Junit Test Case ,注解的位置可以在方法前也可以在修饰符后面。
- 获取对象属性测试案例
package ecut.OGNL.action; import ecut.OGNL.entity.Customer; public class CustomerAction { private Customer customer ; public String execute() throws Exception {
System.out.println( "execute" );
return "execute" ;
} public String login() throws Exception {
System.out.println( "login" );
return "login" ;
} public String logout() throws Exception {
System.out.println( "logout" );
return "logout" ;
} public Customer getCustomer() {
System.out.println( "CustomerAction # getCustomer()" );
return customer;
} public void setCustomer(Customer customer) {
System.out.println( "CustomerAction # setCustomer( Customer )" );
this.customer = customer;
} }package ecut.OGNL; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import ecut.OGNL.entity.Customer;
import ecut.OGNL.action.CustomerAction;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException; public class OgnlTest3 { private OgnlContext root ; public @Before void init() throws OgnlException {
root = new OgnlContext();
Ognl.setValue( "customerAction" , root , new CustomerAction() );
} public @Test void testGetValue() throws OgnlException {
Object value = Ognl.getValue( "customerAction.customer" , root ) ;
System.out.println( value );
} public @Test void testSetValue() throws OgnlException {
Object value = Ognl.getValue( "customerAction.customer" , root ) ;
System.out.println( value );
Ognl.setValue( "customerAction.customer" , root , new Customer() );
Ognl.setValue( "customerAction.customer.username" , root , "张翠山" );
value = Ognl.getValue( "customerAction.customer.username" , root ) ;
System.out.println( value );
} public @After void destory() {
} } - 获取方法测试案例
package ecut.OGNL; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import ecut.OGNL.action.CustomerAction;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException; public class OgnlTest4 { private OgnlContext root ; public @Before void init() throws OgnlException {
root = new OgnlContext();
Ognl.setValue( "customerAction" , root , new CustomerAction() );
} public @Test void testGetValue() throws OgnlException {
Object value = Ognl.getValue( "customerAction.login()" , root ) ;
System.out.println( value );
} public @Test void testSetValue() throws OgnlException {
} public @After void destory() {
} }
转载请于明显处标明出处
Struts2学习(五)的更多相关文章
- Struts2学习五----------指定多个配置文件
© 版权声明:本文为博主原创文章,转载请注明出处 指定多个配置文件 - 在Struts2配置文件中使用include可指定多个配置文件 实例 1.项目结构 2.pom.xml <project ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- TweenMax动画库学习(五)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- Struts2学习笔记⑧
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
- Struts2学习笔记①
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
- Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)
Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...
- Struts2学习:interceptor(拦截器)的使用
对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组 ...
- SVG 学习<五> SVG动画
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- Android JNI学习(五)——Demo演示
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
随机推荐
- VIM - EX 命令 - 文件读写
VIM - EX 命令 - 文件读写 1. 概述 vim 通过 ex 命令行, 与其他文件的读写操作 2. 场景 场景1 vim 打开文本 将当前文本的内容, 写入到其他文本 场景2 vim 打开文本 ...
- MySQL表的操作02
[1]设置非空约束(NOT NULL ,NK)--->>>目的是f防止某些字段中的内容为空 CREATE TABLE +table_name ( 属性名 数据类型 NOT N ...
- ALSA driver基本概念
https://blog.csdn.net/zyuanyun/article/details/59180272#t6 1.Card For each soundcard, a “card” recor ...
- 《C语言程序设计》王希杰 课后答案
仅供参考,好好学习,不要骗自己哦! 在线预览 预览链接: https://www.kdocs.cn/l/shOy4IgXl 下载: 链接1: http://t.cn/AiBK2mgJ 链接2: htt ...
- css颜色+透明度的写法
今天在学习页面的时候,看到视频里用到颜色的十六进制表达式直接设置透明度,但是后来在实践过程中发现是有误的,特此记录一下,也算是学习了一个新知识. RGBA表示式 比如我们设置rgba(0, 0, 0, ...
- 数据库持久化框架——MyBatis(1)
叨叨时刻:内容根据阿里云大学的MyBatis视频教程整理而成,有需要最好跟着视频教程走一遍 MyBatis 是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 ...
- java 倒入一篇文章,显示每个字母的出现概率,从大到小排序
package com_1; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; ...
- Mac安装php扩展redis遇到的问题,执行phpize问题
1.安装redis在mac OS中可以使用brew命令进行安装redis:mac OS使用brew命令安装软件安装命令:brew install redis因为我已经安装过了,这里就不在赘述.安装完之 ...
- 消息队列(五) ---RocketMQ-消息存储3
问题: consumeQueue 如何工作 刷盘机制如何工作 概述 该节我们将学习 consumeQueue 如何工作,先来看一下消息发送的大概过程. 而为什么需要 consumeQueue 的存在呢 ...
- 计算机二级-C语言-字符数字转化为整型数字。形参与实参类型相一致。double类型的使用。
//函数fun功能:将a和b所指的两个字符串分别转化成面值相同的整数,并进行相加作为函数值返回,规定只含有9个以下数字字符. //重难点:字符数字转化为整型数字. #include <stdio ...