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

简介: 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:表单标签

image.png


三:拦截器的使用


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


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


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

image.png

拦截器中包含了三个方法

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>


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


相关文章
|
21天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
46 11
|
1月前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
64 7
|
13天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
18天前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
26天前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
59 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
18天前
|
弹性计算 Java 数据库
Web应用上云经典架构实战
本课程详细介绍了Web应用上云的经典架构实战,涵盖前期准备、配置ALB、创建服务器组和监听、验证ECS公网能力、环境配置(JDK、Maven、Node、Git)、下载并运行若依框架、操作第二台ECS以及验证高可用性。通过具体步骤和命令,帮助学员快速掌握云上部署的全流程。
|
1月前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
18天前
|
弹性计算 负载均衡 安全
云端问道-Web应用上云经典架构方案教学
本文介绍了企业业务上云的经典架构设计,涵盖用户业务现状及挑战、阿里云业务托管架构设计、方案选型配置及业务初期低门槛使用等内容。通过详细分析现有架构的问题,提出了高可用、安全、可扩展的解决方案,并提供了按量付费的低成本选项,帮助企业在业务初期顺利上云。
|
1天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
31 17