半年前的一次偶然机会,有幸到杭州开了个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!
分享到:
相关推荐
该项目是基于Django与Django Rest Framework的快知APP后端设计源码,共包含86个文件,涵盖79个Python源文件、2个Markdown文档、1个Git忽略文件、1个SQLite3数据库文件、1个文本文件、1个JSON文件、1个PNG图片文件。...
dataSnap Rest 跨平台的特性众主要是靠JSON来传输数据,通过HTTP,HTTPS 访问方法来获取所得到的数据. 技术牛人小满的作品。谢谢作者。共享给各位。
【描述】"基于安卓支持单号扫描的快递查询的项目源码,毕设作品" 提示这是一个毕业设计项目,主要功能是通过Android设备扫描快递单号来查询快递状态。这涉及到Android开发的知识,包括UI设计、条形码或二维码扫描库...
4. **处理响应**:响应数据通常是一个包含多个Dribbble作品的对象列表,可以使用Gson转换为Java对象。 5. **使用Picasso加载图片**:在UI上显示作品时,使用Picasso的`load()`方法指定图片URL,然后调用`into()`方法...
"这是我最近的第一个PHP项目"表明这是一个初学者的实践作品,意味着它可能包含了基本的API设计和实现。 **描述分析:** 描述部分与标题相同,再次确认了这是一个以PHP编程语言创建的、功能未完全定义的简单REST ...
处理重试,分页和现代Veracode REST API的其他功能。 不是正式的Veracode产品。 基于原创作品。 设置 从pypi安装: pypi veracode_api_py (可选)将Veracode API凭据保存在~/.veracode/credentials [default] ...
标识符翻译服务 标识符翻译服务是JSON REST API。 翻译服务将作品(出版物)映射到URI(例如info:doi:10.11647 / obp.0001,urn:isbn:9781906924010, ://www.openbookpublishers.com/product/3),以允许从一...
【Grooo外卖】是一款在校学生参与的创业项目,同时也是比赛和毕业设计的作品,它提供了一个完整的iOS应用程序,并配备了相应的后端服务。这个项目的核心在于构建一个便捷、高效的外卖订餐平台,让学生和周边商家能够...
【个人网站博客(毕业设计作品)1】是一个典型的IT项目,展示了如何构建一个全面的在线平台,供个人展示自我、分享思想和互动交流。在这个项目中,开发者通常会涵盖多种技术栈和概念,以实现登录功能、日志发布、...
本项目是一个基于Java技术栈开发的社交媒体即时通讯系统,灵感来源于国外知名的Discord即时通讯社交平台。该系统旨在提供类似Discord的功能,包括实时的文字聊天、语音通信、群组管理以及用户互动等功能,适用于各种...
**Poesize-api: 一个基于Express.js和MongoDB构建的RESTful API** Poesize-api是一个专门为Poesize应用程序设计的RESTful API,它在技术栈中扮演着核心角色,为这个虚构的社交网络提供数据交互接口。Poesize App...
使用JavaScript和Vue,您的任务是实现一个页面,该页面从获取作者及其作品,并以可能的最佳方式显示该页面。 期望 您需要: 实施一个作者页面,以获取并显示企鹅随机屋下的所有作者 使用VueX存储来自API的数据 实施...
这个系统旨在提高教学效率,方便教师管理学生作品,同时也为家长提供一个了解孩子学习进度的平台。 一、SpringBoot简介与应用 SpringBoot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发...
其次,前端部分使用Vue.js框架,这是一个轻量级的JavaScript库,具有响应式数据绑定和组件化特性,适合构建用户友好的单页应用程序。Vue的相关知识点可能包括: 1. **Vue CLI**:Vue的命令行工具,用于快速搭建项目...
标题中的“单人博客开发,单用户,支持评论,前后端分离,后端采用flask-resfult进行api开发”表明这是一个针对个人博主设计的、只允许一个用户登录的博客系统,它具备评论功能,并且采用了现代Web开发的前后端分离...
【描述】提到的是“本人毕设作品”,这暗示了这是一个毕业设计项目,通常包含了开发者从需求分析、设计、编码到测试的完整开发流程。它是一个微信点餐小程序,这意味着用户可以通过微信平台进行在线订餐,方便快捷地...
"毕业设计"意味着这个项目可能是学生在完成学业时的一个实践作品,旨在检验和提升学生的实际开发能力。"微信小程序"可能表示系统还提供了移动端接入,允许用户通过微信小程序访问和管理产品信息。"springboot"虽然在...
《健康管理系统的设计与实现》是...综上所述,《健康管理系统的设计与实现》项目集成了后端开发、前端展示和数据库管理等多个IT领域的知识,不仅是一个完整的毕业设计作品,也为实际的健康管理类应用提供了参考和借鉴。
在【标签】中提到了“毕业设计”,暗示这是一个学生作为毕业项目所完成的作品,通常会涵盖基础的系统设计、数据库设计、功能实现等多个方面。此外,“Java springboot”表明除了SSM之外,可能还使用了Spring Boot,...