80 likes | 385 Views
JSON RPC Java. 简单交流提纲. JSON RPC 基于: 1 、 JavaScript 直接量 (JavaScript 1.1 以上 ) 2 、 AJAX. JavaScript 的直接量: 1 、对象直接量 2 、数组直接量 3 、字符串直接量 4 、基本数据类型直接量 对象直接量: 对象 直接量 是由一个列表构成,这个列表的元素是用冒号分隔的属性 / 值对, 元素之间用逗号隔开,整个列表封闭在大括号之中。 对象直接量,假设我们定义一个人的对象:
E N D
JSON RPC Java 简单交流提纲
JSON RPC 基于: 1、JavaScript 直接量 (JavaScript 1.1以上 ) 2、AJAX
JavaScript的直接量: 1、对象直接量 2、数组直接量 3、字符串直接量 4、基本数据类型直接量 对象直接量: 对象直接量是由一个列表构成,这个列表的元素是用冒号分隔的属性/值对, 元素之间用逗号隔开,整个列表封闭在大括号之中。 对象直接量,假设我们定义一个人的对象: var person={name:”大明”,age:60,sex:”男”}; 可以用 person. name、 person.age取得对象的属性。 例子: Prototype.js中的属性和方法也是这样定义的。 嵌套: 直接量里面可以嵌套直接量,可以无限级的嵌套。 var person={name:”大明”,age:30,sex:”男”,son:{name:”小明”,age:5,sex:”男”}}; 可以这样取值: person.son.name
数组直接量: 一个数组直接量是零或更多表达式的列表,它包含在一对方括号内([ ])。 var arr=[]; var arr=[“one”,”two”]; var arr=[1,2,3]; var arr=[{name:”大明”,age:30},{name:”小明”,age:5}]; 字符串直接量: 字符串直接量是零或若干封装在双括号(“)或单括号(‘)内的字符。 “大明”,’小明’ 基础数据类型直接量: 布尔: true,false 整数:123(十进制),0123(八进制),0x123(十六进制) 浮点数:3.1415, -3.1E12, .1e12 和 2E-12
简单应用:HelloWorld: • 创建Web工程; • 导入JSON Java包,这里我们把源代码导进来; • 修改web.xml; • 创建服务端对象Hello.java,注意要实现序列化方法; • 创建hello.jsp; • 发布,运行。 • “字符串”应用: • 1、返回字符串:sayHello() • 2、 传入字符串:sayHello(String name) • 对象: • 1、返回对象:getPerson(); • 2、传入对象:sayHello(Person person) • 问题:如果相同方法名,相同参数个数,如何匹配? • 比如sayHello(Person person) • 和sayHello(Person1 person),无法区别命中,我找到的规律是,谁排在后面, • 就先命中谁。 • 所以尽量避免这种多态,不同的参数用不同的方法名。
嵌套对象: • JSON会遍历所有的成员变量,以及成员变量的成员变量,进行序列化。 • 1、返回嵌套对象:getPerson(); • {"sex":"\u7537","javaClass":"test.Parent","age":30,"name":"\u5927\u660e", • "son":{"sex":"\u7537","javaClass":"test.Person","age":5,"name":"\u5c0f\u660e"} • },"id":5} • 问题:循环嵌套问题: • getFriend();返回对象里包含对自己的应用,JSON返回错误: • {"error":{"code":593,"msg":"bean test.Friend circular reference"},"id":6} • 2、传入嵌套对象 • setParent(Parent parent); • 3、返回通用对象 • getObject(String className); • 其他数据类型和基本对象类型,同以上类似。
进阶(1): 1、对象序列化器; 2、创建自己的对象序列化器; 3、枚举。(原来json包基于jdk1.4,不支持枚举,创建枚举的序列化器); 4、异步调用。 1、对象序列化器 见Json源代码 2、创建自己的对象序列化器 PersonSerializer 3、枚举 EnumSerializer 4、异步调用 function callback(result,exception){} 调用的时候,把回调函数作为第一个参数,则自动异步调用。 (这里跟.net不一样,.net的回调函数放在最后一个参数,为了跟.net一致, iPgisWeb里也改成最后一个参数为回调函数);
进阶(2): 1、客户端异常处理; 2、Session超时。 1、客户端异常处理; 对json调用进行try…catch,根据异常的情况进行相应的处理。 2、有两种方法: 1)、session时发布一个时间,转到登陆页面。 2)、间隔10分钟,同服务器进行一次握手。