转自:http://blog.csdn.net/hanxuemin12345/article/details/38782213

一,引题

1,Json数据格式简介

JSON是脱离语言的理想的数据交换格式,所以它被频繁的应用在客户端与服务器的通信过程中,这一点是毋庸置疑的。而在客户端与服务器的通信过程 中,JSON数据的传递又被分为服务器向客户端传送JSON数据,和客户端向服务器传送JSON数据,前者的核心过程中将对象转换成JSON,而后者的核 心是将JSON转换成对象,这是本质的区别。另外,值得一提的是,JSON数据在传递过程中,其实就是传递一个普通的符合JSON语法格式的字符串而已, 所谓的“JSON对象”是指对这个JSON字符串解析和包装后的结果

2,Struts2返回JSON数据到客户端

这是最常见的需求,在AJAX大行其道的今天,向服务器请求JSON数据已成为每一个WEB应用必备的功能。抛开Struts2暂且不提,在常规WEB应用 中由服务器返回JSON数据到客户端有两种方式:一是在Servlet中输出JSON串,二是在JSP页面中输出JSON串。上文提到,服务器像客户端返 回JSON数据,其实就是返回一个符合JSON语法规范的字符串,所以在上述两种方法中存在一个共同点,就是将需要返回的数据包装称符合JSON语法规范 的字符串后在页面中显示。

3StrutsAction使用传统方式返回json数据

省略。。。。。

4Struts集成Json插件,配置json格式结果集,返回json数据

JSON插件是Structs 2 的Ajax插件,通过利用JSON插件,开发者可以很方便,灵活的利用Ajax进行开发。 Json是一种轻量级的数据交换格式,JSon插件提供了一种名为json的Action ResultType 。使用此结果集的好处:将转换JSON数据的工作交给Struts2来做,与Action中以传统方式输出JSON不同的是,Action只需要负责业务处理,而无需关心结果数据是如何被转换成JSON被返回客户端的——这些 工作通过简单的xml配置及jar包引用,Struts2会帮我们做的更好。

二、的实现步骤:

1,引入Struts包、StrutsJson集成的jar包;struts-plugin.xml配置文件

——

——struts-plugin.xml:配置了集成的Json插件的信息(定义了名为"json"的结果集,和名为"json"的拦截器;注:具体json类型的结果集和拦截器Struts的json插件已经实现了,我们只需在配置文件中将了实现类配置上即可);

  1. <struts>
  2. <package name="json-default"extends="struts-default">
  3. <result-types>
  4. <!--名为"json"的结果集-->
  5. <result-typenameresult-typename="json" class="org.apache.struts2.json.JSONResult"/>
  6. </result-types>
  7. <interceptors>
  8. <!--名为"json"的拦截器-->
  9. <interceptornameinterceptorname="json"class="org.apache.struts2.json.JSONInterceptor"/>
  10. </interceptors>
  11. </package>
  12. </struts>

2Web.xml

——配置Struts2的核心过滤器

  1. <web-appversionweb-appversion="2.5"
  2. xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  6.  
  7. <!-- 配置Struts2的核心的过滤器 -->
  8. <filter>
  9. <filter-name>struts2</filter-name>
  10. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  11. </filter>
  12. <filter-mapping>
  13. <filter-name>struts2</filter-name>
  14. <url-pattern>/*</url-pattern>
  15. </filter-mapping>
  16. <welcome-file-list>
  17. <welcome-file>index.jsp</welcome-file>
  18. </welcome-file-list>
  19. </web-app>

3,用户User类——实体类

  1. private Long uid;//用户id
  2. private String username;//用户名
  3. private String sex;//性别
  4.  
  5. /************get/set方法*******************************************/</span>
  6.  
  7. publicLong getUid() {
  8. returnuid;
  9. }
  10. publicvoid setUid(Long uid) {
  11. this.uid= uid;
  12. }
  13. publicString getUsername() {
  14. returnusername;
  15. }
  16. publicvoid setUsername(String username) {
  17. this.username= username;
  18. }
  19. publicString getSex() {
  20. returnsex;
  21. }
  22. publicvoid setSex(String sex) {
  23. this.sex= sex;
  24. }

4UserAction.java——处理业务,获取用户

  1. importcom.opensymphony.xwork2.ActionSupport;
  2.  
  3. public classUserAction extends ActionSupport{
  4. privateLong uid;
  5. privateString username;
  6. privateString password;
  7. privateString sex;
  8. privateString phone;
  9. /**
  10. * 获取用户
  11. * @return
  12. */
  13. publicString showUser(){
  14. User user = new User();//创建一个User对象
  15. user.setUid(1L);
  16. user.setUsername("学敏");
  17. user.setSex("女");
  18. user.setPassword("123");
  19. user.setPhone("15466554589");
  20.  
  21. this.uid=user.getUid();
  22. this.sex=user.getSex();
  23. this.password=user.getPassword();
  24. this.phone=user.getPhone();
  25. this.username=user.getUsername();
  26.  
  27. returnSUCCESS;
  28. }
  29. /*******get/set方法**************************/
  30. publicLong getUid() {
  31. returnuid;
  32. }
  33.  
  34. publicvoid setUid(Long uid) {
  35. this.uid= uid;
  36. }
  37.  
  38. publicString getUsername() {
  39. returnusername;
  40. }
  41.  
  42. publicvoid setUsername(String username) {
  43. this.username= username;
  44. }
  45.  
  46. publicString getPassword() {
  47. returnpassword;
  48. }
  49.  
  50. publicvoid setPassword(String password) {
  51. this.password= password;
  52. }
  53.  
  54. publicString getSex() {
  55. returnsex;
  56. }
  57.  
  58. publicvoid setSex(String sex) {
  59. this.sex= sex;
  60. }
  61.  
  62. publicString getPhone() {
  63. returnphone;
  64. }
  65.  
  66. publicvoid setPhone(String phone) {
  67. this.phone= phone;
  68. }
  69. }

5,配置Strut2的配置文件Struts.xml

——继承json-default,指定Action返回的结果集的类型为:json;

  1. <struts>
  2. <packagenamepackagename="userjson" namespace="/"extends="json-default">
  3. <actionnameactionname="userJSONAction_*" method="{1}"class="cn.itcast.oa0909.struts2.action.UserAction">
  4. <!--指定返回的结果集的类型为:json -->
  5. <resulttyperesulttype="json"></result>
  6. </action>
  7. </package>
  8. </struts>

(注:一旦为Action指定了该结果处理类型,JSON插件就会自动将Action里的数据序列化成JSON格式的数据, 并返回给客户端物理视图的JavaScript。简单的说,JSON插件允许我们在JavaScript中异步的调用Action, 而且Action不需要指定视图来显示Action的信息显示。 而是由JSON插件来负责具体将Action里面具体的信息返回给调用页面。)

6test.html页面

  1. <html>
  2. <head>
  3. <title>tree.html</title>
  4. <meta http-equiv="keywords"content="keyword1,keyword2,keyword3">
  5. <meta http-equiv="description"content="this is my page">
  6. <metahttp-equivmetahttp-equiv="content-type" content="text/html;charset=UTF-8">
  7. </head>
  8.  
  9. <!--引入js文件 -->
  10. <scriptsrcscriptsrc="js/jquery-1.4.2.js"></script>
  11. <scriptsrcscriptsrc="js/test.js"></script>
  12.  
  13. <body>
  14. This is my HTML page.
  15. </body>
  16. </html>

7test.js文件

  1. //页面加载执行
  2. $().ready(function(){
  3.  
  4. load();//调用load()函数
  5.  
  6. });
  7. functionload(){
  8. $.post("userJSONAction_showUser.action",null, function(data){
  9. //弹出服务端返回的数据
  10. alert("编号:"+data.uid+",姓名:"+data.username+",性别:"+data.sex);
  11.  
  12. });
  13. }

8,运行

地址:http://localhost:8080/Struts2+Ajax/test.html

结果:

三,json插件执行原理时序图

Struts学习之集成Ajax的更多相关文章

  1. Struts 2常用的Ajax标签

    Struts 2对Ajax的支持 •Struts 2对Ajax提供了很好的支持 –Struts 2.1提供了基于Dojo的Ajax标签,对Ajax操作进行了进步封装,可以更快捷容易的使用Ajax   ...

  2. jQuery学习笔记之Ajax用法详解

    这篇文章主要介绍了jQuery学习笔记之Ajax用法,结合实例形式较为详细的分析总结了jQuery中ajax的相关使用技巧,包括ajax请求.载入.处理.传递等,需要的朋友可以参考下 本文实例讲述了j ...

  3. 深度学习的集成方法——Ensemble Methods for Deep Learning Neural Networks

    本文主要参考Ensemble Methods for Deep Learning Neural Networks一文. 1. 前言 神经网络具有很高的方差,不易复现出结果,而且模型的结果对初始化参数异 ...

  4. 学习笔记:AJAX 跨域问题

    学习笔记:AJAX 跨域问题 AJAX 跨域是浏览器的问题. 只要 xhr 请求,不同的域名就会出现 AJAX 跨域问题. JSONP 是一要简单方式,但是有很多弊端,需要修改服务端代码. JSONP ...

  5. 框架基础:关于ajax设计方案(三)---集成ajax上传技术

    之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的l ...

  6. 深度学习框架集成平台C++ Guide指南

    深度学习框架集成平台C++ Guide指南 这个指南详细地介绍了神经网络C++的API,并介绍了许多不同的方法来处理模型. 提示 所有框架运行时接口都是相同的,因此本指南适用于所有受支持框架(包括Te ...

  7. Struts学习之流程汇总

    struts2 架构图如下图所示: 依照上图,我们可以看出一个请求在struts的处理大概有如下步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求: 2.这个请求经过一系列的 ...

  8. 框架基础:ajax设计方案(三)---集成ajax上传技术

    之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的l ...

  9. 前端通信:ajax设计方案(三)--- 集成ajax上传技术

    在此之前让我感慨一下现在的前端开发的氛围.我遇到好多人,给我的观念都是,这个东西这个框架有了,那个东西那个框架做了,前端嘛,学几个框架,这个拼凑一下那个拼凑一下就好了.其实我想问,东西都框架做了,那你 ...

随机推荐

  1. iOS6和iOS7代码的适配(1)

    苹果的iOS7推出后,对于所有的应用来说都提出了一个天然的需求--适配不同版本的SDK.目前来说,用iOS6的SDK生成的应用,可以在iOS7的系统上跑,UI上也保持了原来的风格样式,这是苹果做的向下 ...

  2. ldap理论属于概念缩略词

    Standalone LDAP Daemon, slapd(standalone lightweight access protocol) ldap 389 default listener port ...

  3. 【Cocos2d TestCpp实例模仿一】-- ActionsTest

    转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/25252539 CCActionInterval(持续性动作) 位置性变化动作以To结束 ...

  4. UVA 12075 - Counting Triangles(容斥原理计数)

    题目链接:12075 - Counting Triangles 题意:求n * m矩形内,最多能组成几个三角形 这题和UVA 1393类似,把总情况扣去三点共线情况,那么问题转化为求三点共线的情况,对 ...

  5. 如何利用Github Pages展示自己写的项目

    接触github很久了,自己搭建过hexo博客,但是对于web项目托管github pages感觉很懵,所以在此总结分享给有需要的亲们. 教程开始: 1.创建一个新库 2.给库命名 3.创建新库后点击 ...

  6. html5 meta标签

     <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-sca ...

  7. vs2013 中HTML页 无法在设计窗口中查看的解决

    VS2013不支持HTML文件的解决办法: 1.将html文件重命名为aspx即可.不需要创建项目,直接拖进vs即可. 2.打开VS菜单->工具->选项->文本编辑器->文件扩 ...

  8. Hadoop学习之自定义二次排序

    一.概述    MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往 往有要对reduce输出结果进行二次排 ...

  9. 一年开发ASP.NET MVC4项目经验总结

    一年开发ASP.NET MVC4项目所用所学技术经验总结 阅读目录 文章背景 前端所用技术摘要 后端所用技术摘要 1. 文章背景 本人2014年从Java转行到C#从事BS项目的开发,刚开始接触的是A ...

  10. 《JavaScript+DOM编程艺术》的摘要(二)---DOM中的几个方法

    //DOM: //对象是一种独立的数据集合,与某个特定对象相关联的变量被称为这个对象的属性,通过某个特定对象可以为之调用的函数被称为这个对象的方法 // //4个非常实用的DOM方法: //检索特定元 ...