Struts2框架学习(五)

本文介绍了Struts2框架中的OGNL(对象图导航语言)的使用方法,包括OGNL的基本概念、如何在Struts2中使用OGNL表达式、OGNL的功能特性,以及OGNL在Struts2中的具体应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struts的OGNL

OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,

它是一个单独的开源项目。 Struts2框架使用OGNL作为默认的表达式语言。

OGNL是struts2整合的一个开源项目,所以在struts2中,要想使用OGNL表达式,必须使用Struts2标签库

OGNL相当 于EL表示式,从作用域取数据

 

s:property类型于JSP的表达式,把value的值直接输出到页面

jsp表达式:【<jsp:setProperty property="" name=""/>】          

value的值就是一个OGNL表达式,它不是一个字符串   

如果想把value的值当字符串输出,加单引号即可

OGNL的功能

访问对象方法

比如字符串的length方法

 访问静态属性 

访问静态方法

 默认OGNL是禁止静态方法访问的,在default.properties中有个struts.ognl.allowStaticMethodAccess=false,如想使用,需要在struts.xml文件中配置允许访问静态方法  

 

封装list数据

 封装Map数据

 

 

 struts.xml中写OGNL

前面的文件下载就是一个OGNL表达式

 可以修改为利用OGNL表达式进行转码

 contextMap

 动作类的生命周期

明确:

动作类是多例的,每次动作访问,动作类都会实例化。所以是线程安全的。

与Struts1的区别是,struts1的动作类是单例的

请求数据的存放

明确:                        

在每次动作执行前,核心控制器StrutsPrepareAndExecuteFilter都会创建一个ActionContextValueStack对象。且每次动作访问都会创建。                       

这两个对象存储了整个动作访问期间用到的数据。

并且把数据绑定到了线程局部变量(ThreadLocal)上了。所以是线程安全的。

contextMap 存储数据

Struts2的官方文档对contextMap的说明

 

 

注意:                                                  

除了value stack之外,全是map,而contextMap也是一个map。

其实就是Map中又封装的Map。(很像dbutils中KeyedHandler封装数据的结构,只是封装数据的结构)

使用s:debug查看contextMap的数据

 测试存储数据

 contextMap中的数据操作

存数据

 利用ActionContext存数据

利用ValueStack存数据

掌握三种获取ValueStack的方法

 

 

 取数据

用Struts2的标签(OGNL表达式)在JSP上(用的最多)

 使用s:property取数据

contextMap里面ValueStack中对象的属性:直接写属性名

contextMap中的数据,需使用#

 如果遇有对象属性重名,可以通过OGNL表达式,选择查找的起始位置

 

在JSP页面取值时,通过索引取

 特殊说明:当s:property不给定value属性时,默认取栈顶对象

 valueStack的其它方法

setValue方法

set方法

掌握压栈的顺序问题

 findValue方法

在jsp页面上的调用的都是findValue方法

 Struts中对EL取值顺序的改变

默认情况下EL查找顺序

表达式取值必须是servlet四大作用域 由小到大排列为

pageContext【page】  >      request   >      session   >      servletContext【application】

 

 在Struts中EL表达式的查找顺序的改变

OGNL表达式:page –>    request  ->      valueStack(根中)-> contextMap  ->  session  ->  application

 Struts标签与OGNL的配合使用

iterator标签

Action

jsp

 OGNL投影(了解)

使用过滤条件投影

 

使用指定属性投影

 

 Struts2#,$,%符号的使用(重要)

#
取contextMap中key时使用,例如<s:property value="#name" />

OGNL中创建Map对象时使用,例如:<s:radio list="#{'male':'男','female':'女'}" />

%

在struts2中,有些标签的value属性取值就是一个OGNL表达式,例如<s:property value="OGNL Expression" />

还有一部分标签,value属性的取值就是普通字 符串,例如<s:textfield value="username"/>,如果想把一个普通的字符串强制看成时OGNL,就需要使用%{}把字符串套起来。

例如<s:textfield value="%{username}"/>

当然在<s:property value="%{OGNL Expression}" />也可以使用,但不会这么用

Struts的其它标签

s:set标签

 

 s:action标签

 s:if标签,s:elseif标签 s:else标签

相当于jstl中的c:choose c:wher c:otherwise

 s:url和s:a标签

struts2中默认主题

默认主题的名称是XHTML,都是在struts的默认属性文件中定义着:default.properties

更改默认的主题方式

第一:在标签内加theme属性

 第二:配置全局的theme

 防止表单重复提交(拦截器)

Servelt的表单重复提交的一种解决方案:session存验证码

比如在登录时,可以通过验证码存在session中来解决

login.jsp

ValidateCodeServlet

LoginServlet

 Struts的表单重复提交解决方案

使用重定向

使用<s:token/>生成令牌配合token拦截器

UserAction

 jsp

 Struts.xml

 此种解决方式不太符合逻辑,它是产生了错误之后再告知用户,应该一直停留在当前界面

使用<s:token/>生成令牌配合tokensession拦截器

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值