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>


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


相关文章
|
22天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
37 3
|
10天前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
|
12天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
20天前
|
Java API Apache
|
23天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
24 3
|
23天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
36 2
|
23天前
|
测试技术 持续交付 PHP
PHP在Web开发中的应用与最佳实践###
【10月更文挑战第25天】 本文将深入探讨PHP在现代Web开发中的应用及其优势,并分享一些最佳实践来帮助开发者更有效地使用PHP。无论是初学者还是有经验的开发者,都能从中受益。 ###
51 1
|
23天前
|
API 持续交付 PHP
PHP在现代Web开发中的应用与未来展望####
【10月更文挑战第25天】 本文深入探讨了PHP作为服务器端脚本语言在现代Web开发中的关键作用,分析了其持续流行的原因,并展望了PHP在未来技术趋势中的发展方向。通过实例解析和对比分析,揭示了PHP如何适应快速变化的技术环境,保持其在动态网站构建中的核心地位。 ####
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
112 3
|
22天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
120 45
下一篇
无影云桌面