日期:2014-05-16  浏览次数:20401 次

啊啊,终于还是拿出来吧 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!
   
1 楼 xhyccc 2007-12-23  
看过的留个言撒,小弟学习学习。。。
2 楼 bubble 2008-01-01  
下次没有源码的不要发上来,
一个7k的东西没有源码
你真nb
3 楼 storm119 2008-01-02  
这种钻研精神值得大家学习。呵呵
4 楼 longleg 2008-01-02  
完全没有找到楼主的主题,晕了