如何访问iserver发布的java发布rest服务务

&>&&>&开发技术&>&Java&>&使用iServer REST API发布工作空间(Java)示例代码
使用iServer REST API发布工作空间(Java)示例代码
上传大小:1KB
博客:使用iServer REST API发布工作空间(Java) (http://blog.csdn.net/supermapsupport/article/details/) 的示例代码
综合评分:0(0位用户评分)
所需积分:
下载个数:11
审核通过送C币
创建者:zhengyikuangge
Spring框架从入门到精通
创建者:guoxiaohai
dubbo分布式框架搭建demo
创建者:qq_
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有0条
上传者其他资源上传者专辑
使用iServer JAVA API访问iServer数据服务进行数据操作示例工程
使用iServer JAVA API访问iServer空间分析服务进行叠加分析示例工程
SuperMap iObjects Java 7C tar 包使用指南
SuperMap iObjects Java 8C 产品入门
SuperMap iMobile 7C for Android SP1三维开发指南
开发技术热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&vip年卡&4000万程序员的必选
使用iServer REST API发布工作空间(Java)示例代码
会员到期时间:剩余下载个数:
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
VIP年卡全年1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
supermapsupport
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:技术开发(132)
iClient(54)
iServer/iPortal/ICM/iExpress(71)
&&&&之前两篇(和)完成了服务端的设计和实现,本篇介绍扩展iClient for JavaScript对新扩展的资源进行对接。先放张应用效果预览图:
&&&&扩展一个iClient for JavaScript类的基本方式如下:
变量名=SuperMap.Class(继承的父类,{本类的实现});
&&&&其中,本类的实现要有一个初始化的initialize方法,初始化时可以继承父类(父类.prototype.apply(this, arguments)),当然也可以不继承。
二、输入输出类的准备以及JSON与本地对象互转
&&&&输入类即向服务端请求的对象(会转成JSON发给服务端);输出类则是服务端返回的结果(服务端返回的JSON转成本地类型)。显而易见的,输入类对应服务端创建参数映射的Map对象,即:{params:LCPInputFormat[] };输出类对应LCPOutputFormat类。这里输入类命名SuperMap.REST.LineCapturePointParameter;输出类命名SuperMap.REST.LineCapturePointResult,注意 SuperMap是iClient for JavaScript定义的全局变量,SuperMap.REST也是,所以我们的命名实际是给SuperMap.REST指向的对象添加一个属性,所以,不能任意命名,变量名必须有效。当然,这里只对接了JSON格式的表述,xml等格式(服务端是支持的)的输入输出这里不考虑。
&&&&定义字段就不介绍了,跟服务端的对应类一致就行了,主要介绍iClient for JavaScript的对象转成服务端接受的对象的方法。
&&&&iClient for JavaScript已经定义好了与服务端一致的Geometry类及Feature类,分别叫做:和,并且提供了,与iClient for JavaScript自己的类及类互转的方法,我们只需要直接使用即可。在输入类转为服务端接受类型的时候需要做些兼容,以兼容多种参数类型。另外输入类还初步检查了参数是否合法,规则和服务端检查的一致。还有就是,若设置了返回指定字段,脚本里过滤了下上传点和上传线的字段(服务端不处理上传点和上传线的字段,原样返回);设置了上传线的ID,因为服务端打断线时是通过判断线的ID来实现同一条线上多个捕获点(或叫垂足)进行打断的,所以每条线都需要不同的ID,唯一的问题是,若是同时还查询数据集线,而数据集线的ID(就是属性表SmID值)和上传的线ID一致时,打断线存放对应线的结果不对,若有需要上传线和查询数据集线在同一个输入项同时设置,可以自己修改,上传线的ID给加上一个数值(比如加1w,10000 + “1234” = “”),使不可能和数据集线ID一致。这里不再贴代码,将iClient for JavaScript的Geometry对象转为ServerGeometry对象的方法如下,其中lineFeature为线要素对象:
SuperMap.REST.ServerGeometry.fromGeometry(lineFeature.geometry)
&&&&服务端返回JSON转为对象后,再转成iClient for JavaScript的Feature对象的方法如下,其中jsonObj是JSON转成的JavaScript对象:
SuperMap.REST.ServerFeature.fromJson(jsonObj.line).toFeature()
&&&&因为服务端返回的点、线等可能为null,所以处理输出需要先判断一下。
三、构造服务类,处理发送请求及执行回调
&&&&iClient for JavaScript是开源的,可以去GitHub下载到,在libs/SuperMap/REST目录下找一个服务类照着写行了,默认会根据是否跨域发POST请求(JSON表述)或GET请求(使用iServer JSONP表述)。因为设计了一个轮询功能,所以这里扩展的服务类只会发POST请求。简单解释下这里的轮询功能:
服务设计的请求体是LCPInputFormat[],轮询的作用和别的iClient for JavaScript的轮询功能一致,就是将请求分散发送给不同的URL进行处理,这样每个URL处理的数据量就会减少,也就是意味着需要多个服务端发布同一个工作空间(或数据相同的服务);这里拆分的单位是一个LCPInputFormat输入项,并且加入失败重试功能,直到所有URL都请求失败才会返回失败。
&&&&服务类命名为:SuperMap.REST.LineCapturePointService,其请求方法如下:
processAsync: function (params) {
var me = this, Parameters = null;
if (!params || !me.eventListeners || !me.url.length) {
console.log("请检查服务类及请求参数!");
Parameters = params.getParameter();
if (!Parameters || !Parameters.params.length) {
console.log("点靠近线参数无效!");
me.CD = SuperMap.Credential.CREDENTIAL;
me.setUrl(me.url);
if (!(typeof (me.urls) == "object" && me.urls.length && typeof (me.urls[0]) == "string"))
{ return; }
var PLEN = Parameters.params.
var count = Math.floor(PLEN / me.urls.length);
var extra = PLEN % me.urls.
var LEN = me.urls.
var Result = new SuperMap.REST.LineCapturePointResult({
totalSucessCount: 0,
totalFailedCount: 0,
results: []
var failRt = [];
var Num = 0;
var part = extra == 0 ? LEN :
var hasSucess = false;
var handleSucess = function (rt) {
Result.totalSucessCount += rt.totalSucessC
Result.totalFailedCount += rt.totalFailedC
Result.msg += Result.msg.length ? ("|" + rt.msg) : rt.
Result.results = Result.results.concat(rt.results);
if (Num == part) {
handleFailure(false, false, LEN, 0);
if (Num == part && hasSucess) {
me.getFeatureComplete(Result);
var handleFailure = function (fe, pr, deep, ep) {
if (deep == ep) {
if (deep & LEN) {
SuperMap.Credential.CREDENTIAL = null;
method: "POST",
url: me.urls[deep],
data: SuperMap.Util.toJSON(pr),
scope: me,
isInTheSameDomain: me.isInTheSameDomain,
success: function (e) {
if (me.isReturnPartial) {
me.getFeatureComplete(me.getResult(e));
hasSucess = true;
handleSucess(me.getResult(e));
failure: function (e) {
handleFailure(e, pr, ++deep, ep);
SuperMap.Credential.CREDENTIAL = me.CD;
if (!me.isReturnPartial) {
failRt.push(fe);
if (Num == part) {
handleSucess(false);
if (fe && me.isReturnPartial) {
me.getFeatureError([fe]);
} else if (Num == part && failRt.length) {
me.getFeatureError(failRt);
for (var i = 0; i & LEN; ++i) {
var start, end, pm = { params: [] };
if (i & extra) {
start = i * (count + 1);
end = start + count + 1;
start = i * count +
end = start +
if (start &= PLEN) { break; }
while (start & end) {
pm.params.push(Parameters.params[start]);
SuperMap.Credential.CREDENTIAL = null;
method: "POST",
url: me.urls[i],
data: SuperMap.Util.toJSON(pm),
scope: me,
isInTheSameDomain: me.isInTheSameDomain,
success: function (e) {
if (me.isReturnPartial) {
me.getFeatureComplete(me.getResult(e));
hasSucess = true;
handleSucess(me.getResult(e));
failure: (function (mp, j) {
return function (e) {
handleFailure(e, mp, 0, j);
SuperMap.Credential.CREDENTIAL = me.CD;
&&&&失败重试使用的是顺序执行的方式,即,失败之后才重试,而不是每个URL都发请求,第一个成功则中断其余请求,各有优缺点,可以自己尝试这种方式。
&&&&getFeatureComplete、getFeatureError分别是请求成功和失败时的回调,其它请参考源码。
&&&&mitter()方法用于发送请求、绑定回调,父类(SuperMap.ServiceBase)的request方法也是使用它,这里我们和父类的逻辑不同,所以直接使用mitter();可以看到还做了些别的操作,比如若填了多个URL并且该服务设置了授权,那么这里让iClient for JavaScript的认证类失效,自己处理认证(tooken字符串需要和URL一一对应)。其它请参见下方源码,使用时可以先压缩一下,因为注释很多。
&&&&边写边测,上述扩展完成后,需要在iClient for JavaScript的类库(SuperMap.Include.js)之后引入或者修改SuperMap.Include.js文件。使用方式和别的iClient for JavaScript对接iServer服务的类一致,如下:
var param = new SuperMap.REST.LineCapturePointParameter.requestItem({具体输入设置项});
var param1 = new SuperMap.REST.LineCapturePointParameter.requestItem({具体输入设置项});
var params = new SuperMap.REST.LineCapturePointParameter({
parameters: [param,param1]
var service = new SuperMap.REST.LineCapturePointService(
[url1,url2,url3...],
eventListeners: {
"processCompleted": function (e) {
console.log("成功结果", e);
"processFailed": function (e) {
console.log("失败结果", e);
, isReturnPartial: false
, CREDENTIALS: ["","",""...]
service.processAsync(params);
&&&&验证情况:
&&&&验证设置了两个输入项,有上传点及线,也有查询点,故意在URL数组写了两个一定会请求失败的URL,之后才是能成功执行的URL,验证了脚本无误,当然,也有别的测试,但是难免也会出现问题,包括服务端,欢迎大家一起交流讨论。
五、实例验证
&&&&这就到了最开头那张图片了,验证情况如下:
&&&&使用的是iServer自带示范数据,长春市区图(坐标系为平面无投影,也就是没有坐标系,但是数据应该是投影坐标系下采集的,因为根据坐标计算的距离大致准确),也有试过经纬度坐标系,经纬度下,一般实际容限比设置的容限略大,返回成功结果的距离可能略大于设置的容限,这里不在服务端处理(本来就是为了快),也不在js脚本再次过滤结果。
六、完结&致谢
&&&&到这里,这个扩展就全部完结了,感谢SuperMap,感谢CSDN。下面提供对接脚本和应用示例的下载链接,欢迎传播和围观。
&&&&最后,特别感谢 柳慧珠 小仙女帮我找bug和提供应用示例(动图那个)。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:276943次
积分:5878
积分:5878
排名:第4318名
原创:296篇
评论:73条
(3)(17)(6)(55)(38)(39)(4)(1)(11)(8)(7)(4)(32)(7)(4)(5)(6)(5)(6)(2)(13)(9)(5)(3)(10)安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&

我要回帖

更多关于 java 访问 rest 的文章

 

随机推荐