啊啊,终于还是拿出来吧 JSON _REST的一个作品
半年前的一次偶然机会,有幸到杭州开了个BEA DEV2DEV的会,回来后被REST的网络服务调用方法吸引,并且接触到了JSON的数据封装方法。我想大概能不能将两者放在一起,做一个轻量级的WS发布工具。摆脱XML,拥抱JSON?
后来有天下午,翘了一堂英语课写了JSON_REST的第一个版本。他是一个Servlet能够接受诸如
http://www.example.com/json_rest?service=TestService&method=now
的URI返回一个JSON风格的字符串,其可序列化任何POJO对象。如上例返回的是
{date:23,day:0,hours:19,minutes:54,month:11,seconds:6,time:1198410846703,timezoneOffset:-480,year:107}
序列化在JsonExcanger类中完成,其方法更是老生常谈。用Reflect,以及Beans包内提供的自省方法扫描setter域得到porperty的名字以及其的getter方法。
其使用流程相当简单,先做一个POJO的类,将业务流程封装其中,然后将提供RPC的方法(Web Method),其参数必须为简单变量,或其数组。然后将相关参数注册在包中config/json_rest.xml下,例子已给出。
<ws service_name="TestService" service_class="sample_lws.TestClass" session="false">
<method name="echo" param_sum="1">
<param name="str" type="String[]"/>
</method>
<method name="now" param_sum="0"/>
<method name="testNull" param_sum="1">
<param name="str" type="String"/>
</method>
</ws>
在浏览器中就可以调用了,方法很简单。
如http://localhost/json_rest?service=TestService&method=echo&str_lenth=4&str_0=xhyccc&str_1=hi&str_2=dfsfsfs&str_3=retertyryt
返回["xhyccc","hi","dfsfsfs","retertyryt"](Json 的数组)数组的调用上要先声明arrayname_lenth数组大小。然后arrayname_number数组每项的值。这样就可以应付绝大多数应用。
至于客户端肯定用javascript最恰当。下面是我用prototype.js开发出来的客户端应用例子。
<script language="javascript">
function mail_chk() {/*看看Email被注册没有*/
var par="service=reg&method=emailCheck&email="+$F("email");
new Ajax.Request('json_rest',
{
method: 'get', parameters: par, onComplete: function(rep){
res=eval('('+rep.responseText+')');/*编译后的JSON对象*/
alert(res);/*对此对象的处理*/
},
onException:function(){
alert('error in rpc '+service);
}
}
);
}
</script>
很简单的应用,大家不要笑,我毕竟只是个华中科技大学的大三学生。第一次发文就发SOA。时分。。。。用武汉话就是闹眼子,望大家见谅。对了整个架构我起了个还蛮好听的名字--Lightech!
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。