第三讲 action-续和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都是一个非常有用的工具。

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

OGNL 教程

OGNL 教程

使用表达式语言的一个目的就是避免在JSP页面中出现过多的<%%>的语句,使页面与后台代码分离。

表达式语言主要有以下几大好处:1.避免(MyType) request.getAttribute()和myBean.getMyProperty()之类的语句,使页面更简洁;2.支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功能;3.简单明了地表达代码逻辑,使用代码更可读与便于维护。

Struts 2中的表达式语言Struts 2支持以下几种表达式语言:1.OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言;2.JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言;3.Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些起特性;4.Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,具说其性能要比JSP好。

Struts 2默认的表达式语言是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的用法OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="xx" />等。

ognl表达式判断

ognl表达式判断

ognl表达式判断OGNL表达式是一种强大的表达式语言,它在Java中被广泛使用。

本文将介绍OGNL表达式的基本概念和使用方法,以及一些常见的应用场景。

OGNL是Object-Graph Navigation Language的缩写,它的主要作用是对Java对象进行导航和操作。

通过OGNL表达式,我们可以方便地访问对象的属性、调用对象的方法以及进行一些基本的运算操作。

我们来看一下OGNL表达式的基本语法。

OGNL表达式由一系列的标识符和运算符组成,可以包括对象的属性、方法调用、运算符和常量等。

例如,我们可以使用OGNL表达式来获取一个对象的属性值:``````上面的表达式表示获取user对象的name属性值。

在OGNL中,使用`.`来表示属性的访问。

除了属性的访问,我们还可以使用OGNL表达式来调用对象的方法。

例如,我们可以使用OGNL表达式来调用一个对象的方法并传递参数:```user.getName("张三")```上面的表达式表示调用user对象的getName方法,并传递一个参数"张三"。

除了属性的访问和方法的调用,OGNL还支持一些基本的运算操作,例如加减乘除等。

例如,我们可以使用OGNL表达式来进行简单的数值计算:```1 +2 * 3```上面的表达式表示计算1加2乘3的结果。

除了基本的运算操作,OGNL还支持一些逻辑运算和条件判断。

例如,我们可以使用OGNL表达式来进行条件判断:```user.age > 18 && user.gender == "男"```上面的表达式表示判断user对象的age属性是否大于18,并且gender属性是否等于"男"。

除了基本的语法,OGNL还提供了一些高级的功能,例如集合的遍历、条件过滤等。

例如,我们可以使用OGNL表达式来遍历一个集合并进行条件过滤:```users.{? age > 18 && gender == "男"}.name```上面的表达式表示遍历users集合,并过滤出age大于18且gender等于"男"的元素,然后返回它们的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层同样也发⽣了不匹配,所以我们也需要使⽤⼀些⼯具来帮助我们解决问题。

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表达式来实现动态绑定、数据绑
定、数据校验等等。

Action的总结

Action的总结

Action:1.实现一个Action的方式(有三种),最常用的就是从actionsupport继承。

2.DMI动态方法调用3.通配符配置*{1}{2}a)”_”4.接收参数的方法(一般用属性或者DomainModel -[域模型]、)三种5.简单参数验证addFieldErrora)一般不使用struts2的ul标签6.访问web元素a)Map类型i.Iocii.依赖struts2b)原始类型i.Iocii.依赖struts27.包含文件配置(includ)8.默认action处理Result,常用的四个类型1.dispatcher (默认)直接访问,只能跳转到jsp页面试图2.redirect直接访问,只能跳转到jsp页面试图3.chain链访问,可以访问到Actiona)当result用到chain(链)来跳转到另外一个action的时候,指的是在同一个包下的Action。

当跳转的Action是在另外一个包下的时候。

要查看result文档。

文档是通过加参数的方式。

才可以跳转过去!!4.redirectAction客户端跳转访问Action,可以用这个类型来访问action5.DynamicResult——动态结果6.<result>${r}<\result>.在配置文件里面struts.xml的这种写法。

$是用来代表可以用这种方式去读(Value stack)值栈里面的内容!通俗的说$就是在配置文件里往值、栈里面取值!7.对于任何一个Action。

它的对应的属性都会放在值栈里面的(如下图)下图中显示r已经在ValueStack里面!8.当另一个action访问第一个action的时候,是否需要传参?a)一次request(请求),只有一个值、栈(value、 stack)。

也就是说一次forward共享同一个值、栈!所以当其他action访问第一个action的时候,只需要直接访问。

ssh三大框架整合

ssh三大框架整合

ssh三⼤框架整合Hibernate框架 1 hibernate核⼼配置⽂件 (0)orm思想 - 对象关系映射 (1)数据库信息 (2)hibernate信息 (3)映射配置 (4)hibernate核⼼配置⽂件 - 如果单纯使⽤hibernate框架,核⼼配置⽂件名称 hibernate.cfg.xml和位置 src下⾯固定的 - hibernate和spring整合时候,hibernate核⼼配置⽂件名称和位置没有固定要求的 2 hibernate映射配置⽂件 (1)实体类和数据库表映射关系—使⽤orm思想 3 hibernate操作的步骤 (1)在spring框架对hibernate框架进⾏封装,使⽤hibernateTemplateStruts2框架 1 Action操作 (1)action创建三种⽅式 - 继承类 ActionSupport (2)配置action访问路径 - 创建struts.xml配置⽂件,这个⽂件名称和位置固定 src下⾯的 (3)配置访问action的多个⽅法 - 使⽤通配符⽅式配置 (4)在action获取表单提交数据 - 获取request对象 ** 使⽤ServletActionContext类获取 - 属性封装 - 模型驱动(重点) - 表达式封装 (5)在action操作域对象 - 使⽤ServletActionContext获取域对象 (6)配置struts2的过滤器 2 值栈 (1)向值栈放数据 - set⽅法 - push⽅法 - 定义变量,⽣成get⽅法 (2)从值栈获取数据 - 在jsp中使⽤struts2标签+ognl获取 - <s:property> - <s:iterator> 3 拦截器 (1)aop和责任链模式 (2)⾃定义拦截器 - 继承MethodFilterInterceptor - 重写类⾥⾯的⽅法 - 配置拦截器和action关联Spring框架 1 spring核⼼配置⽂件 (1)名称和位置没有固定要求 (2)在spring核⼼配置⽂件中引⼊schema约束 2 创建对象 (1)xml配置⽅式:<bean id=”” class=”” scope=””/> (2)注解⽅式:四个注解 3 注⼊属性(对象类型属性) (1)xml配置⽅式: (2)注解⽅式:两个注解 - autowired - resource 3 使⽤ServletContext对象和监听器实现 (1)在服务器启动时候,加载spring配置⽂件,创建对象 (2)配置spring的监听器 (3)指定spring配置⽂件位置 4 jdbcTemplate 5 spring事务配置 (1)xml⽅式 (2)注解⽅式SSH框架整合思想 1 三⼤框架应⽤在javaee三层结构 2 struts2框架和spring整合 (1)struts2的action在spring配置 3 spring框架和hibernate框架整合 (1)hibernate的sessionFactory交给spring配置 (2)把hibernate数据库配置交给spring配置整合struts2和spring框架 1 把struts2的action交给spring管理 2 实现过程 第⼀步导⼊struts2的jar包 (1)导⼊⽤于整合的jar包 (log4j.properties为log4j的⽇志输出格式,放⼊src下⾯) (2)Spring为了整合Struts还需要额外再导⼊⼀个jar包:(该包在struts的lib⽬录下) (3)导⼊Struts2的jar包(struts2版本为2.3.24): (4)创建Actionpublic class UserAction extends ActionSupport {public String execute() throws Exception {System.out.println("Success....");return NONE;}} (5)创建Strut2的核⼼配置⽂件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><package name="demo" extends="struts-default" namespace="/"><action name="userAction" class="erAction"></action></package></struts> (6)在web.xml中配置struts2的过滤器<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping> (7)导⼊Spring整合Web项⽬的jar包,也就是监控项⽬启动的监听器所在的jar包 (8)创建Spring的核⼼配置⽂件并在其中引⼊约束<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd"></beans> (9)把action交给Spring进⾏配置1 <!-- 配置action的对象 -->2 <!-- 注意action是多实例的,因此我们这⾥把scope配置为prototype的 -->3 <bean id="userAction" class="erAction" scope="prototype"></bean> ①在spring配置action对象,在struts.xml中也配置action对象 ②解决: 只需要在spring⾥⾯配置action对象,不要在struts.xml中配置<struts><package name="demo1" extends="struts-default" namespace="/"><!-- class属性⾥⾯不写action全路径了,因为写,action对象创建两次写spring配置的action的bean的id值--><action name="userAction" class="userAction"></action></package></struts> 可以这样写的原因是我们导⼊了⼀个Spring整合Struts2的jar包:struts2-spring-plugin-2.3.24.jar (10)web.xml中Spring监听器的配置<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:bean.xml</param-value></context-param> (11)测试准备 ①所需的为Struts2的核⼼配置⽂件:struts.xml ②Spring的配置⽂件:bean.xml ③项⽬的配置⽂件:web.xml ④Struts2的UserAction类 ⑤在UserAction中对UserService的调⽤ ⑥UserService中对UserDao的调⽤ ⑦UserDao类的编写struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><package name="demo1" extends="struts-default" namespace="/"><!-- class属性⾥⾯不写action全路径了,因为写,action对象创建两次写spring配置的action的bean的id值--><action name="userAction" class="userAction"></action></package></struts>bean.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd"><bean id="userAction" class="erAction"><property name="userService" ref="userService"></property></bean><bean id="userService" class="erService"><property name="userDao" ref="userDaoImp"></property></bean><bean id="userDaoImp" class="erDaoImp"></bean></beans>web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" <display-name>spring-day4-ssh</display-name><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:bean.xml</param-value></context-param><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>UserAction.javaimport com.opensymphony.xwork2.ActionSupport;import erService;public class UserAction extends ActionSupport {private UserService userService;public void setUserService(UserService userService) {erService = userService;}public String execute() throws Exception {userService.add();return NONE;}}UserService.javapublic class UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {erDao = userDao;}public void add() {userDao.add();}}UserDao.java 其实现类public class UserDaoImp implements UserDao {public void add() {System.out.println("UserDaoImp....");}} (12)测试结果: 可以在后台观察到如下测试结果:image ⾄此,Spring和Struts2的整合已经完毕,然后是Spring对Hibernate的整合了。

五大框架的理解

五大框架的理解

Java 五大框架之间的对比Spring 及其优点大部分项目都少不了spring的身影,为什么大家对他如此青睐,而且对他的追捧丝毫没有减退之势呢Spring是什么:Spring是一个轻量级的DI和AOP容器框架。

说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应用一般不依赖于spring的类。

DI:称作依赖注入(Dependency Injection),和控制反转一个概念,具体的讲,当一个角色需要另外一个角色协助的时候,在传统的程序设计中,通常有调用者来创建被调用者的实例。

但是在spring中创建被调用者将不再有调用者完成,因此叫控制反转。

创建被调用对象有Spring来完成,在容器实例化对象的时候主动的将被调用者(或者说它的依赖对象)注入给调用对象,因此又叫依赖注入。

AOP:Spring对面向切面编程提供了强有力的支持,通过它让我们将业务逻辑从应用服务(如事务管理)中分离出来,实现了高内聚开发,应用对象只关注业务逻辑,不再负责其它系统问题(如日志、事务等)。

Spring支持用户自定义切面。

面向切面编程是面向对象编程的有力补充。

面向对象编程将程序分成各个层次的对象,面向切面的程序将运行过程分解成各个切面。

AOP是从运行程序的角度去考虑程序的结构,提取业务处理过程的切面,OOP是静态的抽象,AOP是动态的抽象,是对应用执行过程的步骤进行抽象,从而获得步骤之间的逻辑划分。

容器:Spring是个容器,因为它包含并且管理应用对象的生命周期和配置。

如对象的创建、销毁、回调等。

框架:Spring作为一个框架,提供了一些基础功能,(如事务管理,持久层集成等),使开发人员更专注于开发应用逻辑。

看完了Spring是什么,再来看看Spring有哪些优点1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑2.可以提供众多服务,事务管理,WS等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OGNL
1、JSP支持的表达式语言有:JSTL、EL、OGNL等 、 支持的表达式语言有: 支持的表达式语言有 、 、 等 1、 EL即Expression Language(表达式语言) EL的语法 的语法:${ EL 、 即 (表达式语言) 的语法 exprission } ${ } 或 ${ bean[‘name’] } ,EL是用来显示数 是用来显示数 据的,功能跟<%=表达式 表达式%> 一样,EL是不需要引入什么东西的 一样, 是不需要引入什么东西的 据的,功能跟 表达式 2、JSTL(JavaServerPages Standard Tag Library)JSP标准标签 、 ( ) 标准标签 标准标签库包括核心标签库和SQL标签库,核心标签库常用的 标签库, 库 JSTL标准标签库包括核心标签库和 标准标签库包括核心标签库和 标签库 常实现网页逻辑判断和迭代显示的, 是if和forEach 。JSTL常实现网页逻辑判断和迭代显示的,需要引入 和 常实现网页逻辑判断和迭代显示的 <%@ taglib uri="/jsp/jstl/core" prefix="c"%> 只要JSTL和EL结合,就基本可以让页面不再有 结合, 代码。 只要 和 结合 就基本可以让页面不再有<% %> jsp代码。 代码 2、表达式语言主要有以下几大好处 、 1、避免 request.getAttribute()和myBean.getMyProperty()之类的语 、 和 之类的语 使页面更简洁; 句,使页面更简洁; 2、支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功 ),比普通的标志具有更高的自由度和更强的功 、支持运算符( ), 能; 3、简单明了地表达代码逻辑,使用代码更可读与便于维护 、简单明了地表达代码逻辑,
2、动态结果集
${}用在配置文件 用在配置文件struts.xml里从值栈中取数据。 里从值栈中取数据。 用在配置文件 里从值栈中取数据
3、带参数的结果集
1、从值栈中取值 value=“参数名”,参数名是action中的参数 2、从actioncontext中取值 #parameters.参数名,参数名是struts中的参数 3、在客户端跳转时一次request只有一个valueStack。
Action-续 OGNL
主要内容
1、域模型接收参数 、 2、动态结果集 、 3、带参数的结果集 、 4、中文解决问题 、 5、OGNL 、
1、用域模型接受参数
1、当向action中传递参数时,struts会自动的 、当向 中传递参数时, 会自动的new一个对 中传递参数时 会自动的 一个对 因此在action中不用 中不用new对象。 对象。 象。因此在 中不用 对象 2、Struts2中的 、 中的MVC 中的 M-模型:一些对象的模型 模型: 模型 V-试图:用来显示的页面 试图: 试图 C-控制:编写的 控制: 控制 编想初始化domain model,可以自己 想初始化 ,可以自己new,也可以传 , 参数值, 参数值,但这时候需要保持参数为空的构造方法 。 2、访问静态的属性和方法 、 静态方法访问应当在struts.xml中配置 静态方法访问应当在 中配置 <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant> 3、访问集合:list、set(不能取某一个元素)、 、访问集合: 、 (不能取某一个元素)、 )、map 4、投影:? ^ $ 、投影:
4、中文解决问题
当向action中传递参数时,往往出现中文字体乱码的问题。 中传递参数时,往往出现中文字体乱码的问题。 当向 中传递参数时 解决方法: 解决方法: 在struts.xml中添加 中添加 <constant name="struts.i18n.encoding" value="GBK" /> 但是? 但是? 可以在web.xml中将 可以在web.xml中将 <filterclass>org.apache.struts2.dispatcher.ng.filter.StrutsPr epareAndExecuteFilter</filter-class> 换成 <filterclass>org.apache.struts2.dispatcher.FilterDispatcher </filter-class>
Struts 2默认的表达式语言是 默认的表达式语言是OGNL,相对于其它的表达式 默认的表达式语言是 , 语言OGNL的功能更为强大,它提供了很多高级而必须的特 的功能更为强大, 语言 的功能更为强大 性: 1、支持对象方法调用,如xxx.doSomeSpecial(); 、支持对象方法调用, ; 2、支持类静态的方法调用和值访问 、 3、支持赋值操作和表达式串联 、 4、访问 上下文( 、访问OGNL上下文(OGNL context)和 上下文 ) ActionContext; ; 5、操作集合对象。 、操作集合对象。
3、OGNL表达式语言 、 表达式语言 OGNL的全称是Object Graph Navigation Language(对 象图导航语言),它是一种强大的表达式语言,通过简单一 致的表达式语法来读取和设置Java对象的属性值,调用对象 的方法,遍历整个对象的结构图,实现字段类型转换等功能。 4、为什么使用 、为什么使用OGNL? ? Struts2的一个关键特性就是它可以对Action携带的数据 进行读写访问,例如在表单中使用username指定数据传递 给Action的username属性,在<s:property name=“username”>元素中使用username来获取用户的名 字,这种表达式语言就是OGNL。 既然JSP2.0已经内置了一种JSTL表达式语言,那么为什么 还要使用OGNL呢?
相关文档
最新文档