Java Web之Struts2高级技术的应用(OGNL、标签库、拦截器、数据验证)

创作不易 觉得有帮助或需要源码请点赞关注收藏后评论区留言


前言

Struts2是Apache软件组织的一项开放源代码项目 是在WebWork的核心思想上产生的全新框架 在Java Web开发领域中占有十分重要的地位


一、OGNL的解析及使用

OGNL(object grpah navigation language)是一种强大的表达式语言 它能够自动导航对象的结构并访问和设置对象数据 在OGNL表达式中 核心对象为OGNL上下文。OGNL上下文相当于一个Map容器,在Map容器的Value中可以保存任何类型的数据。通过OGNL上下文可以对容器中的对象进行导航

GONL上下文是OGNL的核心 在OGNL上下文中可以存放多个对象 通常情况下 标准的OGNL为设定一个根 访问对象中的属性语法如下

user.name
book.name

当user和book不为OGNL上下文时语法如下

#user.name
#book.name

 OGNL是非常强大的表达式语言 比JSP中的EL更加强大 特点如下

1:支持对象方法的调用

2:支持静态方法的调用

3:支持变量的赋值

4:可以操作集合数据

Struts2中的OGNL

获取值栈中的对象 OGNL上下文中的根可以直接获取

${user.name}

 获取其他JSP内置对象语法如下

#application.name
#request.name
#session.name
#parameters.name
#attr.name

操作普通的属性与方法

<s:property value="user.id"/>
<s:property value="user[id]"/>
还支持方法的调用
<s:property value="user.say()"/>

 访问静态方法与属性

Struts2框架的OGNL表达式支持对象的静态方法与静态属性的调用 它类似于Java语言中的静态引入 需要使用字符@进行标注 其调用静态属性的方法如下

@com.lyq.bean.Bean@NAME
@com.lyq.bean.Bean@greeting()
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>

 访问数组

一个名为arr的数组
arr[0]
arr.length

 访问List Set Map集合

List集合

list[0]

Set集合

集合无序 所以不能通过下标访问

Map集合

Map存储结构是键值对的形式 所以可以用Key值来获取Value

map.key
或者
map.['key']

 

map.keys 获取所有key
map.values 获取所有value

投影与选择

投影是对集合中列的操作 所谓投影 就是指将集合中的某一列数据都抽取出来形成一个集合 这一列数据就是原集合中的投影 语法如下

list.{name}

 选择是对集合中行的操作 所谓选择 就是通过一定的条件获取集合中满足这一条件的数据 所获取的行就是对集合中数据的选择操作 语法如下

list.{?#this.age>10}

 ?表示满足指定条件的所有元素 ^表示满足条件的第一个元素 $表示满足条件的最后一个元素

 

二、Struts2的标签库

1.数据标签的应用

1:property标签

它的作用是获取数据值 并将数据值直接输出到页面中

2:set标签

set标签用于定义一个变量 通过该标签可以为所定义的变量赋值及设置变量的作用域 在默认情况下set标签定义的变量被放置到值栈中

<s:set var="username" value="测试 set标签" scope="request"></s:set>

3:a标签

用于构建一个超链接 其最终效果将形成一个HTML中的超链接

4:param标签

主要用于对参数赋值 它可以当作其他标签的子标签

5:action标签

用于执行一个Action请求 当在一个JSP页面中通过action标签执行Action请求时 可以将Action的返回结果输出到当前页面中 

6:push标签

用于将对象或值压入到值栈中并放置到顶部 因为值栈中对象可以直接调用 所以简化操作

<s:push value="#request.student"></s:push>

 2:控制标签的应用

1:if标签

<s:if> <s:elseif> <s:else>用法与Java中相同 语法如下

<s:if test="1">
  输出结果...
</s:if>
 <s:elseif test="2">
 输出结果...
</s:elseif>
<s:else>
输出结果...
</s:else>

2:iterator标签

iterator标签是Struts2提供的一个迭代数据的标签 它可以根据循环条件 遍历数据和集合类中的所有或部分数据 如通过iterator标签迭代一个集合或者数组 可以迭代出集合或数组的所有数据 有如下属性

begin end status step value var 都是可选属性 

3:表单标签

 

 

三:拦截器的使用

拦截器(interceptor)是Struts2框架中一个非常重要的核心对象 它可以动态增强Action对象的功能 在Struts2框架中 很多重要的功能都是通过拦截器进行实现的

拦截器动态地作用域Action与Result之间 它可以动态地为Action以及Result添加新功能

当客户端发送请求时 会被Struts2的过滤器所拦截 此时Struts2对请求持有控制权 Struts2会创建Action的代理对象 并通过一系列的拦截器对请求进行处理 最后再交给指定的Action进行处理 在这期间 拦截器对象作用于Action  Result的前后 可以在Action对象的前后 Result对象的前后进行任何操作


拦截器中包含了三个方法

public interface Interceptor extends Serializable{
  void destroy(); 
  void init();
  String intercept(ActionInvocation incovation)thorws Exception;
}

 intercept方法是拦截器中的主要方法 用于执行Action对象中的请求处理方法以及在Action的前后进行一些操作 动态的增强Action的功能

 实战:为Action对象配置输出执行事件的拦截器 查看执行所需要的时间

public class TestAction extends ActionSupport{
 private static final long serialVersionUID=1L;
 public String execute()throws Exception{
Thread.sleep(1000);
return SUCCESS;
}
}

 在struts.xml中配置

<struts>
 <constant name="struts.devMode" value="true"/>
 <constant name="struts.configuration.xml.reload" value="true"/>
 <package name="myPackage" extends="struts-default>
<action name="testAction" class="com.lyq.action.TestAction">
<interceptor-ref name="timer"/>
<result>success.jsp</result>
</action>
</package>
</struts>

 四:数据验证机制

1:字段验证其编写风格

指在验证过程中 主要针对字段进行验证 

<vaildators>
 <field name="username">
 <field-vaildator type="requeiredstring">
 <message>请输入用户名</message>
 </field-vaildator>
</field>
<field-validator type="requeiredstring">
<message>请输入密码</message>
</field-vaildator>
</field>
</vaildators>

 2:非字段验证器编写风格  判断用户名与密码字段是否输入字符串值

<vaildators>
<vaildator type="requeirdstring">
<param name="fieldName">password</param>
 <param name="fieldName">username</param>
<message>请输入内容</message>
</vaildator>
</vaildators>

创作不易 觉得有帮助或需要源码请点赞关注收藏后评论区留言 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

showswoller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值