Struts2(3) —— 数据处理
Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理。
值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言。
值栈:ValueStack一种数据结构,操作数据的方式为:先进后出
OGNL : Object-GraphNavigation Language(对象图形导航语言)将多个对象的关系使用一种树形的结构展现出来,更像一个图形,那么如果需要对树形结构的节点数据进行操作,那么可以使用 对象.属性 的方式进行操作,OGNL技术底层采用反射实现。
一:数据的提交方式
1,<form>表单提交
<form action="/user/login_Login.action" method="post" >
用户代码:<inputname="usercode" type="text" ><br>
用户密码:<inputname="userpswd" type="password"><br>
<inputtype="submit" value="登录">
</form>
2,url的方式
http://localhost.egov.com/user/login_Login.action?usercode=admin&userpswd=admin
3,超链接
<a href="/user/delete.action?usercode=admin">删除</a>
4,异步提交
ajax异步提交数据
二:数据存储
数据的存储依赖于框架提供的拦截器功能,拦截器可以对请求进行拦截,获取所有的请求参数,循环遍历设置到值栈中。框架默认将被请求的Action对象存放到值栈的栈顶。Struts2框架提供三种方式将参数存入值栈
1,属性驱动模式
Action中需要提供参数名称的set方法,框架会通过拦截器将请求参数获取到之后,会循环遍历将参数设置到值栈(栈顶对象)中。
<input name="usercode" type="text" >
Ognl.setValue("usercode",action,"admin");//此时根对象是action
2,模型驱动模式
必须要实现模型驱动接口,属于侵入性开发方式,不推荐使用
需要定义数据模型的类,将属性封装到数据模型类中,Action中只需要定义模型对象的类型属性(必须创建对象赋值),模型对象的get/set属性并不是必须的。
Action类需要实现ModelDriven接口,重写getModel()方法。

<inputname="usercode" type="text" ><br>表单依然是模型对象的属性名称作为参数名称
Ognl.setValue("usercode",user,"admin");//此时根(栈顶)对象是user对象
3,域驱动模式
与属性驱动的原理是类似,也是通过参数拦截器,将请求参数获取后循环设置到值栈中。
在Action对象中定义模型对象属性,并提供get/set方法;
在表单元素中增加模型对象属性的名称
<inputname="user.usercode" type="text" >
Ognl.setValue("user.usercode",action,"admin");//此时根对象是action
三:数据的传递
框架将Http对象和包装后的Map集合对象都存放到ActionContext上下文对象集合中。所以可以根据ActionContext来获取想要使用的对象。
1,获取HTTP对象

ActionContext ac = ActionContext.getContext(); //上下文对象相当于request范围
(1) HttpServletRequest request =(HttpServletRequest)ac.get(StrutsStatics.HTTP_REQUEST); HttpSession session = request.getSession(false); ServletContext application = session.getServletContext();
ServletContext application = ac.get(StrutsStatics.SERVLET_CONTEXT); (2) HttpServletRequest request = ServletActionContext.getRequest(); (推荐使用)
HttpServletResponse response =ServletActionContext.getResponse(); (3) Action类实现ServletRequestAware,或ServletResponseAware (属于侵入性开发方式,不推荐使用) private HttpServletRequest request ; //set注入
private HttpServletResponse response ; @Override
public void setServletRequest(HttpServletRequest request) { //实现该方法,该方法由框架调用,传递参数。
this.request= request ;
} @Override
public void setServletResponse(HttpServletResponse response) {
this.response= response ;
}
2,获取Map集合
ActionContext ac = ActionContext.getContext(); Mapsession = ac.getSession();
Mapsession2 =(Map)ac.get("session");
Mapsession3=(Map)ac.get(ActionContext.SESSION); Mapapplication = ac.getApplication()
Mapapplication = ac.get(ActionContext.APPLICATION);
Mapapplication = ac.get("application");
3, 获取值栈对象以及参数集合对象
ActionContext ac = ActionContext.getContext();
ValueStack vs = ac.getValueStack(); Map paramts = ac.getParameters();
四:数据的显示
用El表达式的形式,取request对象中的值
${requestScope.username }
而这种表达式的方式可以表示成java代码的方式:
<%
Stringusername =(String)request.getAttribute("username");//被重写的方法,底层是通过ognl查询值栈中的数据
out.print(username);
%>
从request返回取数据,实质上底层是通过Ognl语言操作值栈中的数据。 ActionContext对象的集合和OgnlValueStack值栈的集合为同一个集合对象,所以从值栈的Map集合中取数据,就相当于从ActionContext上下文中取数据。
Struts2(3) —— 数据处理的更多相关文章
- java之struts2的数据处理
这里的数据处理,指的是页面上的数据与Action中的数据的处理. struts2中有3种方式来接收请求提交的数据.分别是:属性驱动方式.对象驱动方式.模型驱动方式 1. 属性驱动方式 要求页面中的表单 ...
- struts2 之 struts2数据处理
开门见山,struts2的数据处理总结: 1. 在servlet中,如果要获取页面提交的数据要使用requerst.getParameter方法来获取,并且每次需要进行相关的类型转换工作,数据的获取及 ...
- 浅谈Struts2(三)
一.Struts2收集client的参数 核心思路: <form method="post" action="XXXX"> <input ty ...
- java框架学习系列
这篇文章的目的主要是作为一个框架学习的索引,方便查找及顺序学习 一.struts2学习 1. java之struts框架入门教程 2. java之struts2的执行流程讲解 3. java之stru ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- struts2数据处理的几种方式
package com.loaderman.c_data; import java.util.Map; import javax.servlet.ServletContext; import com. ...
- Struts2中的数据处理的三种方式对比(Action中三种作用域request,session,application对象)
1:在Action中如何获得作用域(request,session,application)对象: 取得Map(键值对映射集)类型的requet,session,application; 对数据操作的 ...
- 深入浅出Struts2+Spring+Hibernate框架
一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...
- Struts2入门(四)——数据输入验证
一.前言 1.1.什么是输入验证?为什么需要输入验证? 在上一篇文章中,我们学习了数据类型转换,我们提到了表示层数据处理的两个方法,也提到了用户输入数据需要进行类型转换才能得到我们想要的数据,那么,我 ...
随机推荐
- Android开发-之认识palette
Android开发中,Google工程师已经给我们封装好了很多的按钮,使得我们在开发中非常的方便和便捷. 那么今天就来认识一下常用的按钮,那么在之前的课程中我已经详细讲过了Button按钮,那么这里就 ...
- SSIS Design5:使用暂存
以数据流的方式来设计Package,将核心数据处理移动到数据流中,一般情况下,能够减少临时表的创建,获得较高的处理性能,在某些情况下,使用暂存表(staging table)能够优化package设计 ...
- 移动混合应用HTML5数据查询优化
项目介绍 pheongap混合应用,跨平台,做应用加工厂提供应用模板编辑器~ 本地应用,完全是模拟IOS,安卓原生应用的实现,所以支持14种手势,所有PPT动画,视觉差效果,等等功能组合... 这是I ...
- jQuery源码 Ajax模块分析
写在前面: 先讲讲ajax中的相关函数,然后结合函数功能来具体分析源代码. 相关函数: >>ajax全局事件处理程序 .ajaxStart(handler) 注册一个ajaxStart事件 ...
- 在ASP.NET Web API项目中使用Hangfire实现后台任务处理
当前项目中有这样一个需求:由前端用户的一个操作,需要触发到不同设备的消息推送.由于推送这个具体功能,我们采用了第三方的服务.而这个服务调用有时候可能会有延时,为此,我们希望将消息推送与用户前端操作实现 ...
- Apache漏洞修复
今天受同事的委托,修复一台服务器的Apache漏洞,主要集中在以下几点: 1.Apache httpd remote denial of service(中危) 修复建议:将Apache HTTP S ...
- 编译lsusb
参考博客: http://blog.csdn.net/mcy_cool/article/details/10178841 涉及到的源码: http://files.cnblogs.com/files/ ...
- (1)从底层设计,探讨插件式GIS框架的实现
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 研一时,听当时的师兄推荐,买了蒋波涛的一本关于GIS插件框架的书.当时 ...
- 3.Java基础之Date对象
毕向东老师Java基础学习笔记——Date对象 今天学习Java中的Date对象后,感觉这个对象对我们主要有以下几点用处. 1.获取时间和日期并按照自己定义的格式显示. 2.网站设计时显示时间. 知 ...
- RDD、DataFrame和DataSet的区别
原文链接:http://www.jianshu.com/p/c0181667daa0 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同. RDD ...