`
larlf
  • 浏览: 107697 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

来看看我新发明的车轮子

阅读更多
AJAX技术得到广泛的应用,相关的架构也泛滥成灾,再有人提起新的AJAX架构,相信有另外很多人会不屑一顾——看哦,又一个在重复发明车轮子的人。

其实也谈不上重复发明,XMLHttpRequest、JSON、Annotation这些技术都是现成的,它们之间有各种不同的组合应用的方法。我只是希望能按新的思路,组合出一个架构来以简单的方式应用在我的项目中。

以下是其中一些比较有代表性的代码,不知道是否能够吸引你?

一、使用Annotation标记以AJAX方式调用的方法

业务对象中的方法如果想暴露在Ajax调用的范围内,可以如下方式说明:

	@Ajax
	static public int length(String[] a)
	{
		return a.length;
	}


在@Ajax上还可以指定调用方法的方式,默认的是新建一个对象调用,当前还支持以静态方式调用和采用对象池的方式,如:

	@Ajax(type=Ajax.RunType.POOL)


二、在页面中以“类名.js”的方式进行引用

	<SCRIPT LANGUAGE="JavaScript">
		$include("ajax/com.opesoft.fw.ajax.TestBO.js");
	</SCRIPT>


其实这个语句就相当于

	<script type="text/javascript" src="/ajax/com.opesoft.fw.ajax.TestBO.js" /></script>


直接用引用的URL对应到要访问的类上,省去了配置文件(约定取代配置,呵呵,借用了一下思路)。

三、JS里的同一方法支持同步和异步两种方式

标准的AJAX当然应该是异步来进行同后台数据交换的,但是相信很多程序,特别是需要应用到旧的系统框架中的程序还是用返回值的方式处理起来更为舒服。在本架构中生成的JS方法可以根据传入的参数不同,以两种不同的方式进行调用。

同步方式:
var num=TestBO.add(5,7);


异步方式:

function show(data,args)
{
	……
}

TestBO.add(5,7,show,'需要传递的信息');


前两个参数对应的是Java方法中的参数,第三个参数是回调函数,如果没有的指定这个参数的话,就认为是同步方式调用。

第四个参数:args存在的理由是:有时我们经常希望能把当前一些状态传入到回调函数中去,这里就可以把这些值放在这个参数里,它们作为第二个参数传给从后台获取数据结束后调用的方法。

四、强大的对象转换

数据传递部分是在JSON的基础上进行了一些封装,能支持调用Java端方法的参数是比较复杂的类型或Bean对象。如传递一个字符串的数组:

TestBO.length(new Array('a','b','c'))


如果参数是一个Java对象,JS端代码:

var user=JavaClass("com.opesoft.fw.core.utils.User");
//其实这句在这里可以简单地写成:var user={};
user.name="Larlf.Wang";
TestBO.getName(user);


数据对象的结构可以在JSON<>Java中相互转换,具体思路可以参见我Blog中的文章:http://larlf.iteye.com/blog/88983

在附件中是一个简单的演示,解压到Tomcat5.5下就可以看到了。

今年流行大奔的轮子,不巧的是我们家只有一辆自行车,那我是否就要找个大奔的轮子套上捌捌扭扭地骑着?我还是认为适合自己的才是最好的,这也许就是为什么总有人重复发明车轮子的原因。
分享到:
评论
6 楼 fkpwolf 2007-10-30  
Annotation的想法倒是不错
个人觉得可以借鉴EJB 3里面的一些方法
5 楼 dengyin2000 2007-10-27  
larlf 写道
开发中就参考了DWR、JSON-RPC等AJAX架构,自觉相比还是有点区别的。文中说的很明白,技术上的确没有什么新的东西,实现功能的代码也不会是从头写的,只是想以一种更简洁的方式在项目中进行应用。

比如说JSON-RPC,我就不太喜欢它这样的使用方式:

<jsp:useBean id="JSONRPCBridge" scope="session"
     class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
<jsp:useBean id="hello" scope="session"
     class="com.metaparadigm.jsonrpc.test.Hello" />
<% JSONRPCBridge.registerObject("hello", hello); %>


我们在项目中整合了jsonrpc 和  spring(在一个filter中初始化)。 根本就不需要这个。  我们用的不是jsp。
4 楼 fyting 2007-10-27  
我晕啊,没看仔细,还以为是纯客户端的js程序,还在想annotation如何实现出来,就是这个: @Ajax
3 楼 birdjavaeye 2007-10-25  
看了你blog中的bean与json的转换,没有看源码,提一个重要问题,不知你怎么处理的
BeanA a = new BeanA();
BeanB b = new BeanB();
a.setWife(b);
b.setHusband(a);

这样的情况类似hibernate中的many to one以及双向关联,要能正确处理:
BeanA a2 = (BeanA)JsonUtils.json2Object
    (JsonUtils.object2JsonString(a));  
assertSame(a2, a2.getWife().getHusband());  

如果采用JSON作字符串格式,这方面相当不好处理
你可以看一下Objot、PHPRPC、Buffalo的源码,都抛弃了JSON,才能快速方便地处理这种情况

当然不处理也可以,就是限制了能传输的数据格式,而且写@Ajax方法时要特别小心不能返回这样的bean
2 楼 larlf 2007-10-25  
开发中就参考了DWR、JSON-RPC等AJAX架构,自觉相比还是有点区别的。文中说的很明白,技术上的确没有什么新的东西,实现功能的代码也不会是从头写的,只是想以一种更简洁的方式在项目中进行应用。

比如说JSON-RPC,我就不太喜欢它这样的使用方式:

<jsp:useBean id="JSONRPCBridge" scope="session"
     class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
<jsp:useBean id="hello" scope="session"
     class="com.metaparadigm.jsonrpc.test.Hello" />
<% JSONRPCBridge.registerObject("hello", hello); %>
1 楼 dengyin2000 2007-10-25  
恩  确实是轮子。 看看JSONRPC-JAVA.

相关推荐

    决不重新发明轮子.docx

    在创新的道路上,"决不重新发明轮子"是一种智慧的体现,尤其在信息技术领域,其重要性愈发凸显。该理念的核心在于,在面对快速变化的技术环境和激烈的市场竞争时,企业应避免重复他人的劳动成果,而是应更多地注重在...

    SolidWorks小轮子

    首先,我们来看看"roue_41-312-100b08.SLDPRT"这个文件。SLDPRT是SolidWorks的零件文件格式,用于存储单个组件的三维几何模型。在这个文件中,设计师会利用SolidWorks的各种工具来创建轮子的精确几何形状。设计过程...

    发明轮子之“红黑树 二”

    NULL 博文链接:https://changzhiwin.iteye.com/blog/505946

    自行车轮子摩擦力分析学习教案.pptx

    自行车轮子摩擦力分析学习教案.pptx

    你知道自行车轮子为什么是圆的PPT教案学习.pptx

    总结来看,自行车轮子之所以是圆形的,是因为这种设计能够提供稳定且高效的运动,并且大幅度减小摩擦阻力。圆形轮子的设计是基于对物理学规律的深刻理解,并在实际应用中得到了充分的验证。与此同时,非圆形轮子如...

    自己实现轮子优秀实践

    总结来说,自己实现轮子是一个极好的学习机会,它涵盖了基础数据结构与算法、设计模式、并发编程、数据库操作、网络编程等多个方面。在Java世界里,你可以选择从简单的工具类到复杂的框架逐一实现,每次成功都会加深...

    行业资料-交通装置-一体注塑式童车轮子.zip

    在儿童玩具领域,童车是孩子们成长过程中不可或缺的一部分,而童车轮子作为童车的重要组成部分,其设计和制造工艺直接影响着童车的性能、安全性和耐用性。一体注塑式童车轮子是一种常见的制造技术,它在行业内被广泛...

    自行车轮子摩擦力分析PPT学习教案.pptx

    总的来说,这份PPT学习教案通过讲解自行车轮子与地面的摩擦力,揭示了摩擦力在自行车运动中的关键作用。不仅帮助我们理解了自行车的行驶原理,还提醒我们在实际骑行中如何有效利用和控制摩擦力,以实现更安全、更...

    了不起的轮子PPT课件.pptx

    在课件中,我们看到了轮子在各个交通工具上的应用实例,比如玩具汽车、自行车和摩托车,它们之所以能够高效地前进和移动,正是轮子的滚动特性使然。 轮子的出现,不仅使个人出行更加便捷,还深刻地改变了人类的交通...

    玩具汽车轮子组装机(含工程图sw15可编辑+BOM).rar

    首先,我们来关注“玩具汽车轮子组装机”这一主题。这是一款专为生产玩具汽车轮子而设计的自动化设备,它将工艺流程中的各个环节整合在一起,包括零部件的定位、装配、质量检测等,旨在提高生产效率,降低成本,确保...

    STM32F103ZET6步进电机智能小车轮子前转一周程序源代码.rar

    该程序源代码用于STM32F103ZET6步进电机智能小车轮子前转一周实验。 1、采用KEIL5软件开发。 2、用到的库文件:Keil.STM32F1xx_DFP.2.3.0.pack。 3、程序对应处理器:STM32F103ZET6。 4、步进电机驱动芯片型号:ULN...

    省力的轮子PPT课件.pptx

    轮子的应用不仅仅局限于传统机械,现代科技也赋予了轮子新的生命。例如,电动滑板车、自动驾驶汽车中的智能轮子,它们集成了传感器和驱动装置,实现了更高级别的控制和智能化。再如,工业自动化中的传送带系统,通过...

    STM32F103ZET6步进电机智能小车轮子前转四分之一周程序源代码.rar

    该程序源代码用于STM32F103ZET6步进电机智能小车轮子前转四分之一周实验。 1、采用KEIL5软件开发。 2、用到的库文件:Keil.STM32F1xx_DFP.2.3.0.pack。 3、程序对应处理器:STM32F103ZET6。 4、步进电机驱动芯片型号...

    STM32F103ZET6步进电机智能小车轮子前转半周程序源代码.rar

    该程序源代码用于STM32F103ZET6步进电机智能小车轮子前转半周实验。 1、采用KEIL5软件开发。 2、用到的库文件:Keil.STM32F1xx_DFP.2.3.0.pack。 3、程序对应处理器:STM32F103ZET6。 4、步进电机驱动芯片型号:ULN...

    maya制作的车轮

    maya车轮子,用各种界面制作的maya车轮子,请使用哈哈

    玩具汽车轮子组装机(含工程图sw15可编辑+BOM)非常好的设计图纸资料.zip

    标题和描述中提到的“玩具汽车轮子组装机”是一个机械设备设计项目,主要涉及机械工程、自动化技术以及可能的3D建模软件SolidWorks(SW15)。此压缩包文件包含了一个详细的工程图,该图是由SolidWorks 2015版本创建...

    《他发明了什么》教学设计.pdf

    很抱歉,由于没有提供具体的文件内容,我无法直接生成与《他发明了什么》教学设计相关的详细IT知识点。但是,我可以根据标题推测这可能是一份关于科技历史或创新发明的教学资料,因此,我可以概括一些与发明和科技...

    行业资料-交通装置-一种儿童电动车上的轮子支架.zip

    行业资料-交通装置-一种儿童电动车上的轮子支架.zip

Global site tag (gtag.js) - Google Analytics