实验4 Struts2标签库与OGNL表达式的使用

合集下载

ognl用法

ognl用法

ognl用法
OGNL(Object-Graph Navigation Language)是一种基于Java的表达式语言,用于在对象图中导航和操作对象属性。

它提供了一种简洁、灵活和强大的方法来访问和操作Java对象。

使用OGNL,我们可以通过简单的语法来访问对象的属性。

OGNL表达式由对象和属性组成,通过点号来连接它们。

例如,""表示访问user对象的name属性。

除了访问属性,OGNL还提供了一些运算符和函数,以便执行各种操作。

一些常见的操作包括算术运算、逻辑运算、比较运算和类型转换。

OGNL还支持访问列表、数组和Map等集合类型的元素。

我们可以使用索引或键来获取集合中的元素。

例如,"users[0]"表示获取列表users的第一个元素。

同时,OGNL还支持条件表达式和循环控制结构,使我们能够根据条件执行不同的操作或重复执行一段代码。

除了简单的属性访问和操作,OGNL还提供了一些高级功能,例如动态方法调用、获取静态字段和方法等。

这使得我们能够在OGNL中执行更复杂的操作,如调用对象的方法或访问类的字段。

总的来说,OGNL是一个功能强大的表达式语言,它提供了一种便捷的方式来访问和操作Java对象。

无论是在编写Web应用程序、设计页面模板还是进行对象导航和操作,OGNL都是一个非常有用的工具。

它的简洁语法和丰富功能使得我们能够更轻松地进行开发。

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍热12已有 14625 次阅读 2009-07-12 18:53[顶]3G移动--Android开发工程师全能班(转) Struts2学习之二--Struts2标签介绍在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。

如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。

我的E-MAIL:Max.M.Yuan@。

在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。

分类将标志库按功能分成HTML、Tiles、Logic和Bean等几部分严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志表达式语言(expression languages)不支持嵌入语言(EL)OGNL、JSTL、Groovy和Velcity以上表格,纯属个人总结,如有所不足或错误,请不吝指正好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。

1.非UI标志o if、elseif和else描述:执行基本的条件流转。

参数:名称必需默认类型描述备注test 是Boolean 决定标志里内容是否显示的表达式else标志没有这个参数id 否Object/String 用来标识元素的id。

在UI和表单中为HTML的id属性例子:<%@ page contentType="text/html; charset=UTF-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Condition Flow</title></head><body><h3>Condition Flow</h3><!--这里有点小技巧:本来可以用#[0]来获得,请求中name的值。

Struts2漏洞利用原理及OGNL机制

Struts2漏洞利用原理及OGNL机制

Struts2漏洞利⽤原理及OGNL机制Struts2漏洞利⽤原理及OGNL机制研究概述在MVC开发框架中,数据会在MVC各个模块中进⾏流转。

⽽这种流转,也就会⾯临⼀些困境,就是由于数据在不同MVC层次中表现出不同的形式和状态⽽造成的:View层—表现为字符串展⽰数据在页⾯上是⼀个扁平的、不带数据类型的字符串,⽆论数据结构有多复杂,数据类型有多丰富,到了展⽰的时候,全都⼀视同仁的成为字符串在页⾯上展现出来。

数据在传递时,任何数据都都被当作字符串或字符串数组来进⾏。

Controller层—表现为java对象在控制层,数据模型遵循java的语法和数据结构,所有的数据载体在Java世界中可以表现为丰富的数据结构和数据类型,你可以⾃⾏定义你喜欢的类,在类与类之间进⾏继承、嵌套。

我们通常会把这种模型称之为复杂的对象树。

数据在传递时,将以对象的形式进⾏。

可以看到,数据在不同的MVC层次上,扮演的⾓⾊和表现形式不同,这是由于HTTP协议与java的⾯向对象性之间的不匹配造成的。

如果数据在页⾯和Java世界中互相传递,就会显得不匹配。

所以也就引出了⼏个需要解决的问题:1.当数据从View层传递到Controller层时,我们应该保证⼀个扁平⽽分散在各处的数据集合能以⼀定的规则设置到Java世界中的对象树中去。

同时,能够灵活的进⾏由字符串类型到Java中各个类型的转化。

2.当数据从Controller层传递到View层时,我们应该保证在View层能够以某些简易的规则对对象树进⾏访问。

同时,在⼀定程度上控制对象树中的数据的显⽰格式。

我们稍微深⼊思考这个问题就会发现,解决数据由于表现形式的不同⽽发⽣流转不匹配的问题对我们来说其实并不陌⽣。

同样的问题会发⽣在Java世界与数据库世界中,⾯对这种对象与关系模型的不匹配,我们采⽤的解决⽅法是使⽤如hibernate,iBatis等框架来处理java对象与关系数据库的匹配。

现在在Web层同样也发⽣了不匹配,所以我们也需要使⽤⼀些⼯具来帮助我们解决问题。

31________struts2_3_ognl_非UI_UI_过滤投影

31________struts2_3_ognl_非UI_UI_过滤投影

OGNL:【struts的标签库在 struts2-core-2.3.11.jar 下的META-INF下】【引入标签库:<%@ taglib uri="/struts-tags" prefix="s"%>】OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。

Struts2框架使用OGNL作为默认的表达式语言。

OGNL相对其它表达式语言具有下面几大优势:1、支持对象方法调用,如xxx.doSomeSpecial();2、支持类静态的方法调用和值访问,表达式的格式:@[类全名(包括包路径)]@[方法名 | ?值名],例如:@ng.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;3、支持赋值操作和表达式串联,如price=100, discount=0.8,calculatePrice(),这个表达式会返回80;4、访问OGNL上下文(OGNL context)和ActionContext;5、操作集合对象。

Ognl 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map的接口.OGNL(Object Graph Navigation Language),是一种表达式语言。

使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性、调用Java对象树的方法、同时能够自动实现必要的类型转化。

如果我们把表达式看做是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁。

================================================================================ ====================================================【一、理解Struts2中的 ValueStack:】ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础ValueStack(值栈): 贯穿整个 Action 的生命周期(每个 Action 类的对象实例都拥有一个ValueStack 对象). 相当于一个数据的中转站. 在其中保存当前Action 对象和其他相关对象.Struts 框架把 ValueStack 对象保存在名为“struts.valueStack”的请求属性中,request 中在 ValueStack 对象的内部有两个逻辑部分:ObjectStack: Struts 把动作和相关对象压入 ObjectStack 中--List 对象栈ContextMap: Struts 把各种各样的映射关系(一些 Map 类型的对象) 压入 ContextMap 中Map栈Struts 会把下面这些映射压入 ContextMap 中 (Map栈中)root: ObjectStack对象栈的引用parameters: 该 Map 中包含当前请求的请求参数request: 该 Map 中包含当前 request 对象中的所有属性session: 该 Map 中包含当前 session 对象中的所有属性application:该 Map 中包含当前 application 对象中的所有属性attr: 该 Map 按如下顺序来检索某个属性: request, session, application在ObjectStack(对象栈)中一般放入:ValueStackAction对象map集合实体类对象================================================================================ =======================================【二、理解OGNL Context】OgnlValueStack 类包含两个重要的属性一个root和一个context。

ognl的表达式

ognl的表达式

ognl的表达式
OGNL是一种用于Java应用程序中的表达式语言,全称为
Object-Graph Navigation Language。

OGNL表达式可以用于访问Java 对象的属性、调用它们的方法,以及执行各种操作。

OGNL表达式的基本语法是“对象.属性”或“对象.方法()”,其中对象可以是JavaBean、Map、数组等等。

例如,以下表达式可以用于访问JavaBean对象的属性:
```
```
这个表达式表示访问person对象的name属性。

如果person是一个JavaBean,那么这个表达式将返回name属性的值。

OGNL还支持各种运算符、条件语句和循环语句,可以进行复杂的表达式计算。

例如,以下表达式可以用于计算一个列表的和:
```
list.{#this.intValue()}.sum()
```
这个表达式中,list表示一个列表对象,“#this.intValue()”表示将列表中的每个元素转换为int类型,然后使用sum()方法计算它们的总和。

OGNL的表达式功能非常强大,可以用于各种Java应用程序中。

在实际应用中,我们可以使用OGNL表达式来实现动态绑定、数据绑
定、数据校验等等。

OGNL表达式

OGNL表达式

OGNL表达式1.什么是OGNLOGNL:Object Graphic Navigation Language(对象图导航语⾔)它是Struts2中默认的表达式语⾔。

使⽤表达式需要借助Struts2的标签.OGNL与EL的区别:EL/JSTL 数学运算等等表达式: 都有⼀个明确的返回值,都只能取值。

OGNL表达式: 它不仅可以取值,还可以赋值(赋值操作只能由Struts来完成)OGNL表达式的写法: 属性.属性.属性的⽅式 <input type="text" name="er"/>OGNL表达式的基本使⽤:使⽤s:property标签输出内容访问普通⽅法访问静态⽅法访问静态属性操作集合(List AND Map)<title>Struts2OGNL表达式的基本使⽤</title></head><body><!-- a、使⽤s:property标签输出内容:要想输出内容到页⾯得使⽤Struts2的标签库value属性:把value取值所对应的内容输出到页⾯若想直接输出⽂本,则需要⽤引号引起来。

-->输出基本内容:<s:property value="'OGNLExpresession'"/><hr/><!-- b、访问普通⽅法 -->输出字符串的长度:<s:property value="'OGNLExpresession'.length()"/><br/>输出转⼤写字符:<s:property value="'OGNLExpresession'.toUpperCase()"/><br/>切割字符串:<s:property value="'OGNLExpresession'.split('L')"/><hr/><!-- c、访问静态属性语法:@类的全路径@静态字段-->输出整数的最⼤值:<s:property value="@ng.Integer@MAX_VALUE"/><hr/><!-- d、访问静态⽅法语法:@类的全路径@静态⽅法注意:使⽤静态⽅法时,需要在struts.xml中开启静态⽅法调⽤的开关。

OGNL及其表达式

OGNL及其表达式
OGNL及其表达式
目标
初步理解使用OGNL的优势, 简单的OGNL表达式
初步掌握索引访问
掌握对集合进行操作 OGNL的值栈特性;
lambda表达式
2
一.ቤተ መጻሕፍቲ ባይዱGNL简介
1.OGNL概念 1)对象图导航语言,获取和设置属性的Java对象。 示例:在JSP页面中使用表达式语言获取user对象的 username <%@ page language="java" import="java.util.*,er" %> <% User user = (User)request.getAttribute("user"); out.print(username); %>
1 7
5.访问JavaBean的属性表达式
例如:有两个JavaBean类,并有一个employee对象作为OGNL上下 文的根对象? Public class Address{
Private String country; Private String city; Private String street; ……
表达式指要取谁的姓名呢?即获取在那个范围/环境的姓名 对于不同的环境/上下文,相同的表达式会有不同的结果!
4
4)OGNL表达式语言结构 Struts 2中的OGNL Context实现者为ActionContext
ValueStack(值栈,它是根对象) parameters OGNL Context request session application attr
1 0
二.简单的OGNL表达式
1.作用
表达式的计算在当前对象的上下文中,一个链简 单地使用链中先前链接的结果用作下一步计算的当 前对象 示例:导航链表达式 name.toCharArray()[0].numericValue.toString() ? 2.导航链的组成 计算: 1)属性名A. 获取根对象的name; B. 在String结果上调用toCharArray()方法 2)方法调用 C. 从char数组结果中提取第一个字符? 3)数组索引 D. 从提取的字符对象上得到numericValue属性

STRUTS2实验报告

STRUTS2实验报告

STRUTS2实验报告1. 系统分析与设计 1.1 系统功能描述本系统是个非常简单的注册、登录系统。

本系统的实现是基于struts2、spring、hibernate三个框架,系统功能单一,业务逻辑简单。

当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。

当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。

系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。

系统还提供了一种ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。

故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。

当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。

除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。

1.2 系统功能流程1.3 数据库设计相关的映射文件:<hibernate-mappingpackage= <classname=user table=user_table> <id name=idcolumn=user_id> <generatorclass=identity</id> nique=true/><propertyname==user_passnot-null=true length=50/> <propertyname=emaillength=100/> </class> <propertyname=usercolumn=</hibernate-mapping> 一旦提供了上面的映射文件,hibernate就可以理解user和user_table之间的对应关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ts2 ActionContext 的概念和作用,掌握 ActionContext 中存放的主 要对象及存放位置:值栈及 request、session、application 等命名对象; 2. 掌握利用 debug 标签查看当前页面可以访问的 ActionContext; 3. 掌握 OGNL 表达式访问 ActionContext 中对象(值栈中对象及非值栈中对 象)属性的不同写法; 4. 掌握 Struts2 常用数据标签(property,set,bean,sort,debug)的基本用法; 5. 运用相关技术完成规定功能; 6. 写出实验报告。
实验 4
实验目的:
Struts2 标签库与 OGNL 表达式的使用
熟悉 Struts2 OGNL 表达式结合标签进行数据访问和操作的基本用法 实验内容: 在 MyEclipse 环境下运用 Struts2 OGNL 表达式和标签技术进行数据访问和操 作,主要包括 property、set、bean、debug 等 Struts2 常用数据标签及 OGNL 表达 式的应用,调试运行程序。 (1)OGNL 表达式的使用<s:property> 访问值栈中 action 的属性 <s:property value="username"/> 访 问 值 栈 中 的 对 象 <s:property value="user.age"/> <s:property value="cat.miaomiao()" /> 访问静态方法:<s:property value="@ognl.S@s()"/> 访问静态属性:<s:property value="@ognl.S@STR"/> 访问 Math 类的静态方法:<s:property value="@@max(2,3)" /> 访问普通类的构造方法:<s:property value="new er(19)"/> 访问集合元素 List:<s:property value="userList"/>,Set:<s:property value="dogSet"/>
访问 Map:<s:property value="dogMap"/> (2)仿照上课的例子练习以下标签的用法: 设计数据展示页面 show_table.jsp,通过<iterator>标签实现多行数据 的表格化显示;并通过条件控制标签<if>格式化表格; 通过<sort>标签排序数据; 使用<bean>标签显现页面数据; 通过<date>标签格式化日期数据; 设计用户资料录入页面,要求使用 radio,updownselect, checkbox 等 标签; 使用规则校验文件对输入的数据进行校验。
相关文档
最新文档