Struts2框架学习(三) 数据处理

Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理。

值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言。

值栈:ValueStack一种数据结构,操作数据的方式为:先进后出

OGNL : Object-GraphNavigation Language(对象图形导航语言)将多个对象的关系使用一种树形的结构展现出来,更像一个图形,那么如果需要对树形结构的节点数据进行操作,那么可以使用 对象.属性 的方式进行操作,OGNL技术底层采用反射实现。

一:数据的提交方式

1,<form>表单提交

  1. <form action="/user/login_Login.action" method="post" >
  2. 用户代码:<inputnameinputname="usercode" type="text" ><br>
  3. 用户密码:<inputnameinputname="userpswd" type="password"><br>
  4. <inputtypeinputtype="submit" value="登录">
  5. </form>

2,url的方式

  1. http://localhost.egov.com/user/login_Login.action?usercode=admin&userpswd=admin

3,超链接

  1. <a href="/user/delete.action?usercode=admin">删除</a>

4,异步提交

ajax异步提交数据

二:数据存储

数据的存储依赖于框架提供的拦截器功能,拦截器可以对请求进行拦截,获取所有的请求参数,循环遍历设置到值栈中。框架默认将被请求的Action对象存放到值栈的栈顶。Struts2框架提供三种方式将参数存入值栈

1,属性驱动模式

Action中需要提供参数名称的set方法,框架会通过拦截器将请求参数获取到之后,会循环遍历将参数设置到值栈(栈顶对象)中。

  1. <input name="usercode" type="text" >
  2. Ognl.setValue("usercode",action,"admin");//此时根对象是action

2,模型驱动模式

必须要实现模型驱动接口,属于侵入性开发方式,不推荐使用

需要定义数据模型的类,将属性封装到数据模型类中,Action中只需要定义模型对象的类型属性(必须创建对象赋值),模型对象的get/set属性并不是必须的。

Action类需要实现ModelDriven接口,重写getModel()方法。

  1. <inputnameinputname="usercode" type="text" ><br>表单依然是模型对象的属性名称作为参数名称
  2. Ognl.setValue("usercode",user,"admin");//此时根(栈顶)对象是user对象

3,域驱动模式

与属性驱动的原理是类似,也是通过参数拦截器,将请求参数获取后循环设置到值栈中。

在Action对象中定义模型对象属性,并提供get/set方法;

在表单元素中增加模型对象属性的名称;

  1. <inputnameinputname="user.usercode" type="text" >
  2. Ognl.setValue("user.usercode",action,"admin");//此时根对象是action

三:数据的传递

框架将Http对象和包装后的Map集合对象都存放到ActionContext上下文对象集合中。所以可以根据ActionContext来获取想要使用的对象。

1,获取HTTP对象

  1. ActionContext ac = ActionContext.getContext(); //上下文对象相当于request范围
  2. HttpServletRequest request =(HttpServletRequest)ac.get(StrutsStatics.HTTP_REQUEST);
  3. HttpSession session = request.getSession(false);
  4. ServletContext application = session.getServletContext();
  5. ServletContext application = ac.get(StrutsStatics.SERVLET_CONTEXT);
  6. HttpServletRequest request = ServletActionContext.getRequest(); (推荐使用)
  7. HttpServletResponse response =ServletActionContext.getResponse();
  8. Action类实现ServletRequestAware,或ServletResponseAware (属于侵入性开发方式,不推荐使用)
  9. private HttpServletRequest request  ; //set注入
  10. private HttpServletResponse response ;
  11. @Override
  12. public void setServletRequest(HttpServletRequest request) {  //实现该方法,该方法由框架调用,传递参数。
  13. this.request= request ;
  14. }
  15. @Override
  16. public void setServletResponse(HttpServletResponse response) {
  17. this.response= response ;
  18. }

2,获取Map集合

  1. ActionContext ac = ActionContext.getContext();
  2. Mapsession = ac.getSession();
  3. Mapsession2 =(Map)ac.get("session");
  4. Mapsession3=(Map)ac.get(ActionContext.SESSION);
  5. Mapapplication = ac.getApplication()
  6. Mapapplication = ac.get(ActionContext.APPLICATION);
  7. Mapapplication = ac.get("application");

3, 获取值栈对象以及参数集合对象

  1. ActionContext ac = ActionContext.getContext();
  2. ValueStack vs = ac.getValueStack();
  3. Map paramts = ac.getParameters();

四:数据的显示

用El表达式的形式,取request对象中的值

  1. ${requestScope.username }
  2. 而这种表达式的方式可以表示成java代码的方式:
  3. <%
  4. Stringusername =(String)request.getAttribute("username");//被重写的方法,底层是通过ognl查询值栈中的数据
  5. out.print(username);
  6. %>

从request返回取数据,实质上底层是通过Ognl语言操作值栈中的数据。 ActionContext对象的集合和OgnlValueStack值栈的集合为同一个集合对象,所以从值栈的Map集合中取数据,就相当于从ActionContext上下文中取数据。

最新文章

  1. jquery 无刷新多级联动
  2. String 字符串递归截取字节字符串
  3. [CareerCup] 17.12 Sum to Specific Value 和为特定数
  4. [shell基础]——tr命令
  5. mysql 查看警告
  6. Java第一阶段总结
  7. 【形式化方法:VDM++系列】4.VDM实战1——铁路费用计算
  8. eclipse怎么切换SVN的用户
  9. 非常有利于seo的主题(红黄蓝绿)通用教程
  10. aptitude与apt-get
  11. 查找文献的BibTex
  12. hook mono实现Assembly.Load从指定路径读取文件
  13. bzoj千题计划230:bzoj3205: [Apio2013]机器人
  14. ViewFlipper的简单用法
  15. Smarty标签运算,控制结构[if,for,foreach,section,while]
  16. docker 入門
  17. java小知识点简单回顾
  18. HBuilder 获取通讯录
  19. 基于flask的代码上传
  20. caffe中的Accuracy+softmaxWithLoss

热门文章

  1. XML字符串解析成对象的时候应注意空格
  2. Fragment(四)Fragment生命周期分析(转)
  3. 解决BT5不能使用putty连接问题
  4. web开发后端开源库收集
  5. dedecms 的这个dede:arclist里怎么调用全局变量?
  6. JSONObject转换JSON之将Date转换为指定格式(转)
  7. 给ThinkPHP5增加验证码功能
  8. Struts2--带参数的结果集
  9. git archive
  10. JS——基础知识(二)