前言
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>
创作不易 觉得有帮助或需要源码请点赞关注收藏后评论区留言