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

 更新时间:2017年09月06日 11:04:12   投稿:mrr  
Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理。下面通过本文给大家分享struts2数据处理的相关知识,感兴趣的朋友参考下吧

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学院整理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 使用maven编译Java项目实例

    使用maven编译Java项目实例

    这篇文章主要介绍了使用maven编译Java项目实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • 关于BufferedReader的read()和readLine()的区别

    关于BufferedReader的read()和readLine()的区别

    这篇文章主要介绍了关于BufferedReader的read()和readLine()的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 浅谈Java工程读取resources中资源文件路径的问题

    浅谈Java工程读取resources中资源文件路径的问题

    下面小编就为大家带来一篇浅谈Java工程读取resources中资源文件路径的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • SpringCloud中的Stream服务间消息传递详解

    SpringCloud中的Stream服务间消息传递详解

    这篇文章主要介绍了SpringCloud中的Stream服务间消息传递详解,Stream 就是在消息队列的基础上,对其进行封装,可以是我们更方便的去使用,Stream应用由第三方的中间件组成,应用间的通信通过输入通道和输出通道完成,需要的朋友可以参考下
    2024-01-01
  • 在Web项目中手机短信验证码实现的全过程记录

    在Web项目中手机短信验证码实现的全过程记录

    这篇文章主要给大家介绍了关于在Web项目中实现短信验证码的全过程记录,文中通过示例代码介绍的非常详细,在文末跟大家提供了源码下载,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-12-12
  • JavaFX实现拖拽结点效果

    JavaFX实现拖拽结点效果

    这篇文章主要为大家详细介绍了JavaFX实现拖拽结点效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

    java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

    这篇文章主要介绍了java实现无符号数转换、字符串补齐、md5、uuid、随机数示例,需要的朋友可以参考下
    2014-04-04
  • idea web项目没有小蓝点的的两种解决方法

    idea web项目没有小蓝点的的两种解决方法

    本文主要介绍了idea web项目没有小蓝点的的两种解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java基础教程之接口的继承与抽象类

    Java基础教程之接口的继承与抽象类

    这篇文章主要介绍了Java基础教程之接口的继承与抽象类,本文介绍了接口继承、接口的多重继承以及抽象类的知识,需要的朋友可以参考下
    2014-09-09
  • Eclipse Web项目打成war包的方法图解

    Eclipse Web项目打成war包的方法图解

    当Tomcat启动后该压缩文件自动解压缩,war包方便了web工程的发布,那么Eclipse中如何将Web项目打成war包呢?下面小编通过图文并茂的方式给大家讲解下Eclipse Web项目打成war包的方法,一起看看吧
    2016-08-08

最新评论