Struts2框架学习(三) 数据处理
Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理。
值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言。
值栈:ValueStack一种数据结构,操作数据的方式为:先进后出
OGNL : Object-GraphNavigation Language(对象图形导航语言)将多个对象的关系使用一种树形的结构展现出来,更像一个图形,那么如果需要对树形结构的节点数据进行操作,那么可以使用 对象.属性 的方式进行操作,OGNL技术底层采用反射实现。
一:数据的提交方式
1,<form>表单提交
- <form action="/user/login_Login.action" method="post" >
- 用户代码:<inputnameinputname="usercode" type="text" ><br>
- 用户密码:<inputnameinputname="userpswd" type="password"><br>
- <inputtypeinputtype="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()方法。
- <inputnameinputname="usercode" type="text" ><br>表单依然是模型对象的属性名称作为参数名称
- Ognl.setValue("usercode",user,"admin");//此时根(栈顶)对象是user对象
3,域驱动模式
与属性驱动的原理是类似,也是通过参数拦截器,将请求参数获取后循环设置到值栈中。
在Action对象中定义模型对象属性,并提供get/set方法;
在表单元素中增加模型对象属性的名称;
- <inputnameinputname="user.usercode" type="text" >
- Ognl.setValue("user.usercode",action,"admin");//此时根对象是action
三:数据的传递
框架将Http对象和包装后的Map集合对象都存放到ActionContext上下文对象集合中。所以可以根据ActionContext来获取想要使用的对象。
1,获取HTTP对象
- ActionContext ac = ActionContext.getContext(); //上下文对象相当于request范围
- HttpServletRequest request =(HttpServletRequest)ac.get(StrutsStatics.HTTP_REQUEST);
- HttpSession session = request.getSession(false);
- ServletContext application = session.getServletContext();
- ServletContext application = ac.get(StrutsStatics.SERVLET_CONTEXT);
- HttpServletRequest request = ServletActionContext.getRequest(); (推荐使用)
- HttpServletResponse response =ServletActionContext.getResponse();
- 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框架学习(三) 数据处理的更多相关文章
- Struts2框架学习(三)——配置详解
一.struts.xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...
- Struts2框架学习(二) Action
Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...
- Struts2框架学习(一)
Struts2框架学习(一) 1,Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发.框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2 ...
- Java之struts2框架学习
Java之struts2框架学习 About Struts2 Struts也是一款MVC框架 , Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全 ...
- [ SSH框架 ] Struts2框架学习之一
一.Struts2框架的概述 Struts2是一种基于MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中.目前掌握 Struts2框架几乎成为 ...
- [ SSH框架 ] Struts2框架学习之二
一.Struts2访问Servlet的API 前面已经对 Struts2的流程已经执行完成了,但是如果表单中有参数如何进行接收又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习 Str ...
- [ SSH框架 ] Struts2框架学习之四(自定义拦截器)
一.Struts2的拦截器 1.1 拦截器概述 拦截器,在AOP( Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截 ...
- struts2框架学习之第一天
day01 Struts2概述 1 什么是框架 试想一下,人与人之间不同之处多,还是相同之处多呢?当然是相同之处多,不同之处少!人都有头,而且头都在脖子上面! 软件之间也是相同之处多,不同之处少,框架 ...
- Struts2框架学习笔记--strtus2初识
struts2概述: 1.struts2框架应用于javaEE三层结构中的Web层框架 2.struts2框架是在struts1和webwork基础之上发展的全新框架(脱胎换骨 ,用法完全不一样)ps ...
随机推荐
- android脚步---不同界面之间切换
对于一个app,可能需要多个界面,使用Button或者其他控件在不同界面之间切换,那么如何做到呢 首先必须明确,一般一个activity.java文件一般只对应一个界面即一个layout.xml文件, ...
- 转:web_custom_request应用示例
LoadRunner提供的web_custom_request函数可以用于实现参数的动态生成.在LoadRunner中,web_reg_save_param和custom_request都常于处理参数 ...
- Linux 互斥锁的实现原理(pthread_mutex_t)
本文参考--http://www.bitscn.com/os/linux/201608/725217.html 和http://blog.csdn.net/jianchaolv/article/det ...
- STM8不用手动复位进入自带Bootloader方法(串口下载)
源:STM8不用手动复位进入自带Bootloader方法(串口下载) STM8不用手动复位进入自带Bootloader方法(串口下载)除非STM8片子的空的,如果复位运行的是自带Bootloader, ...
- cinder /etc/lvm/lvm.conf 注意点
在cinder节点,cinder-volume使用的磁盘(/dev/sdb),需要在/etc/lvm/lvm.conf中配置: devices {...filter = [ "a/sdb/& ...
- 2016"百度之星" - 资格赛(Astar Round1) Problem E
简单模拟题,耐心写就能过. #include <stdio.h> #include <math.h> #include<cstring> #include<c ...
- PDF 补丁丁 0.5 正式版发布
经过了两年的测试,新版本的 PDF 补丁丁已经比较稳定了.在农历新年前发布这个 0.5 版,作为正式稳定版吧. 新的 PDF 补丁丁比旧的 0.3 版增加了许多功能: PDF 可视化编辑文档书签,可从 ...
- Ubuntu iptables 设置
在ubuntu中由于不存在 /etc/init.d/iptales文件,所以无法使用service等命令来启动iptables,需要用modprobe命令. 启动iptables modprobe i ...
- h2database. 官方文档
http://www.h2database.com/html/advanced.html http://www.h2database.com/html/tutorial.html#csv http:/ ...
- openstack controller ha测试环境搭建记录(十四)——配置cinder(存储节点)
先简述cinder存储节点的配置: 1.IP地址是10.0.0.41: 2.主机名被设置为block1: 3.所有节点的hosts文件已添加相应条目: 4.已经配置了ntp时间同步: 5.已 ...