1. 相关介绍:
1.1 是什么
是一个基于flash、java、js架构设计的超轻量级rpc框架。
1.2 特点是什么
1、js2java rpc:能够在javascript的web浏览器环境中指定java类,获取该类实例的属性,调用该实例的方法
2、支持复杂js对象作为入参:能够传递复杂的javascript object对象作为调用参数,在java中得到对应的map对象
3、自动压缩、解压传递的数据:调用过程中传递的数据自动进行压缩传输,后台自动解压,然后转换为map给开发人员;因此从一定层面上保护、加密了传输的数据
4、js回调函数中能够接收java返回的复杂对象:java中可以返回复杂的对象,比如map、list,在javascript中对应为object和array
5、友好逐行数据输出并回调:java中可以将list逐行输出到浏览器中,框架每接收到一条数据,能够自动回调给定的javascript方法,从而实现数据流的逐行输出;该接口继承与“com.ibatis.sqlmap.client.event.rowhandler”因此很容易将ibatis的数据流逐行输出给浏览器,从而实现非常友好的数据加载方式
6、支持回调全异步(观察者模式):所有的过程调用都采用异步方式,可以指定回调函数,用来接收返回的对象,并进行其他处理
7、日志回调:l异步过程可以设置日志回调函数,让你掌控全过程
1.3 包含什么
包含:
xtzpstream.swf:v1.0:25kb,flash文件
xtzpstream_1.0.jar:655 kb,java服务端jar
xtzpstream.js:3.69 kb,
jsp中使用的代码片段:未压缩,大约2.61 kb
1.4 应该注意什么
xtzpstream和json-rpc-for-java都要求utf-8字符集---js代码
1.5 下载地址是什么
1.6 依赖什么
依赖的jar【2.36 mb】:
backport-util-concurrent.jar
commons-httpclient-3.0.1.jar
jgroups.jar
2 web.xml配置
仅仅需要在web.xml中配置,http://code.google.com/p/json-rpc-for-java/上的两个rpc框架都是,只需要简单的配置.
xtzpstream 在web.xml中的配置:
commonhttpservlet
com.rmuzwqqryqmyyvft1de0fat7jwvjj3ja.commonhttpservlet
3
commonhttpservlet
/cmhs
3 如何使用
3.1 java
package com.rmuzwqqryqmyyvft1de0fat7jwvjj3ja;
import java.util.arraylist;
import java.util.list;
import java.util.map;
public class test {
/**
* 一般对象
* @param m
* @return
*/
public object mycbktest(map m)
{
list lst = new arraylist();
lst.add(new string[]{"牧仁", "之", "数据压缩传输", "创新"});
lst.add(new int[]{1,1,6,0,2,0,1,1});
return lst;
}
/**
* 行流方式
* @param m
* @param cbk
* @throws exception
*/
public void mycbktestrow(map m, irowhandler cbk) throws exception
{
list lst = new arraylist();
lst.add(new string[]{"牧仁2", "之", "数据压缩传输", "创新"});
lst.add(new int[]{1,1,6,0,2,0,1,1});
if(null != cbk)
for(int i = 0; i < lst.size(); i )
cbk.handlerow(lst.get(i));
}
/**
* @param args
*/
public static void main(string[] args) {
system.out.println(new objecttojson(new test()).tojson());
}
}
3.2 jsp
<%@ page pageencoding="utf-8"%>
<%
string path = request.getcontextpath();
string basepath = request.getscheme() "://"
request.getservername() ":" request.getserverport()
path "/";
%>
xtzpstream框架使用演示(demo)
3.3 js api
// 指定上下文路径,必须的,没有的上下文的时候就是空串""
var contextpath = "<%=path%>";
var xtzps = xtzpstream(contextpath);
1、xtzps.nextid(); // 生成一个唯一的字符串id
2、xtzps.getrpcobj(s,mycbk);
-------------------------------------------------------------
s 类名,例如:"com.rmuzwqqryqmyyvft1de0fat7jwvjj3ja.test"
-------------------------------------------------------------
mycbk 回调函数,有一个入参,是指定类转换为js的对象,例如:
function(o)
{
/*//////和下面的方法效果一样/////////
o.mycbktest({data:"表单数据"}, function(p)
{
for(var k in p)alert(k " = " p[k]);
});
/////////////////////////*/
test.mycbktest({data:"表单数据"}, function(p)
{
for(var k in p)alert(k " = " p[k]);
});
}
3、xtzps.readstm(o, fncbk, ctx);
-------------------------------------------------------------
o 传递到后台的复杂js对象,例如:
{ name:"牧仁",
qq:11602011,
age:"9zb",
a: {b:[1234,34,33,34]}, /* 复杂对象传递测试*/
/* 回调java方法,并返回结果,入口参数为: public object mycbktest(map m) */
xtstreamcbk: "com.rmuzwqqryqmyyvft1de0fat7jwvjj3ja.test.mycbktest"
}
xtstreamcbk用于指定要回调的java类名:(com.rmuzwqqryqmyyvft1de0fat7jwvjj3ja.test)和方法(mycbktest)
其中方法定义、入参要求是:
// 入参要去是map
public object mycbktest(map m)
{
list lst = new arraylist();
lst.add(new string[]{"牧仁", "之", "数据压缩传输", "创新"});
lst.add(new int[]{1,1,6,0,2,0,1,1});
return lst;
}
另外:
/* 回调java方法,并返回结果,入口参数为: public void mycbktestrow(map m, irowhandler cbk) throws exception */
xtstreamcbkrow: "com.rmuzwqqryqmyyvft1de0fat7jwvjj3ja.test.mycbktestrow"
用来指定基于流的方式输出行流对象,并逐行回调js方法,方法的定义要求:
public void mycbktestrow(map m, com.rmuzwqqryqmyyvft1de0fat7jwvjj3ja.irowhandler cbk) throws exception
{
list lst = new arraylist();
lst.add(new string[]{"牧仁2", "之", "数据压缩传输", "创新"});
lst.add(new int[]{1,1,6,0,2,0,1,1});
if(null != cbk)
for(int i = 0; i < lst.size(); i )
cbk.handlerow(lst.get(i));// 这里逐行输出数据
}
-------------------------------------------------------------
fncbk 回调函数,具有一个入口参数,是异步返回的对象,例如:
var k, cbk = function(o)
{
o || (o = {});
var k;
for(k in o)
alert(k " = " o[k]);
};
-------------------------------------------------------------
ctx 当前应用上下文路径,没有时为"",例如:var ctx = "<%=request.getcontextpath()%>";
项目网站:
下载地址:
8 楼 jxpath 2012-05-09 16:00
优势:数据压缩传输,尤其是后台返回list数据,是经过压缩后,下载效率就非常高了,例如应用开发中1000~n条数据的加载
肯定可以指定定特定的参数传递了
7 楼 2012-02-17 08:46
6 楼 2011-12-14 18:19
5 楼 2011-08-21 15:10
4 楼 2011-08-19 17:10
3 楼 jxpath 2011-08-19 12:33
2、不要注册使用的java类
3、支持数据流传输
2 楼 2011-08-19 10:44
1 楼 2011-08-19 10:43