欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

struts2数据处理_动力节点Java学院整理

程序员文章站 2024-02-25 23:39:39
struts2框架框架使用ognl语言和值栈技术实现数据的流转处理。值栈就相当于一个容器,用来存放数据,而ognl是一种快速查询数据的语言。  值栈:val...

struts2框架框架使用ognl语言和值栈技术实现数据的流转处理。值栈就相当于一个容器,用来存放数据,而ognl是一种快速查询数据的语言。

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

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

一:数据的提交方式

,<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" rel="external nofollow" >删除</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数据处理_动力节点java学院整理,希望对大家有所帮助