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上下文中取数据。

Struts2框架学习(三) 数据处理的更多相关文章

  1. Struts2框架学习(三)——配置详解

    一.struts.xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...

  2. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  3. Struts2框架学习(一)

    Struts2框架学习(一) 1,Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发.框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2 ...

  4. Java之struts2框架学习

    Java之struts2框架学习 About Struts2 Struts也是一款MVC框架 , Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全 ...

  5. [ SSH框架 ] Struts2框架学习之一

    一.Struts2框架的概述 Struts2是一种基于MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中.目前掌握 Struts2框架几乎成为 ...

  6. [ SSH框架 ] Struts2框架学习之二

    一.Struts2访问Servlet的API 前面已经对 Struts2的流程已经执行完成了,但是如果表单中有参数如何进行接收又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习 Str ...

  7. [ SSH框架 ] Struts2框架学习之四(自定义拦截器)

    一.Struts2的拦截器 1.1 拦截器概述 拦截器,在AOP( Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截 ...

  8. struts2框架学习之第一天

    day01 Struts2概述 1 什么是框架 试想一下,人与人之间不同之处多,还是相同之处多呢?当然是相同之处多,不同之处少!人都有头,而且头都在脖子上面! 软件之间也是相同之处多,不同之处少,框架 ...

  9. Struts2框架学习笔记--strtus2初识

    struts2概述: 1.struts2框架应用于javaEE三层结构中的Web层框架 2.struts2框架是在struts1和webwork基础之上发展的全新框架(脱胎换骨 ,用法完全不一样)ps ...

随机推荐

  1. 救援行动(save)

    救援行动(save) 题目描述 Angel被人抓住关在一个迷宫了!迷宫的长.宽均不超过200,迷宫中有不可以越过的墙以及监狱的看守.Angel的朋友带了一个救援队来到了迷宫中.他们的任务是:接近Ang ...

  2. Java回调函数的理解

    所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数.一般说来,C ...

  3. RSA非对称加密Java实现

    原文 加密基础方法类 import java.security.MessageDigest; import sun.misc.BASE64Decoder; import sun.misc.BASE64 ...

  4. C++------------typedef 函数指针类型定义

    摘要bycrazyhacking:        typedef 是定义了一种"函数指针"类型,可以再声明很多变量.函数指针的定义是定义了一个变量. int max(int x,i ...

  5. FreeRTOS 使用指南(转)

    源:FreeRTOS 使用指南 繁星电子开发团队制作 作为一个轻量级的操作系统,FreeRTOS 提供的功能包括:任务管理.时间管理.信号量.消息队列.内存管理.记录功能等,可基本满足较小系统的需要. ...

  6. Attribute name invalid for tag form according to TLD异常解决办法_gaigai_百度空间

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  7. 关于基本视频播放的Demo

    最近在做一个视频的Demo,当然是仿的别人的,现贴出原文地址:http://code4app.com/forum.php?mod=viewthread&tid=8959&highlig ...

  8. Ubuntu和win10双系统Grup无法引导解决方案

    通常我们经常安装双系统, 但是有时候安装完系统无法正常引导, 以下就说明Ubuntu和win10双系统, win10在grub界面不断循环的解决方案 直接在win10启动项目上按e进入编辑模式 在文档 ...

  9. Nginx 中 nginx.conf 详解

    #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | ...

  10. Document Classification

    Natural Language Processing with Python Chapter 6.1 由于nltk.FreqDist的排序问题,获取电影文本特征词的代码有些微改动. import n ...