基于java的arcgis server开发(7)

2019-08-30 22:53

} } }

有了这几个强大的函数,我们就可以利用ESRI的成果,来进行Ajax的开发了。说了半天客户端的东西,下一篇我们来讲服务器端的处理,服务器端的处理需要比较大的篇幅来说。

12、ArcGIS Server Java讲座--如何在用JSF在服务器端处理Ajax请求

服务器端的处理才是整个事件的Key,那么我们来看看整个请求,回复的过程,我们通过下面的图看看我们服务器端的代码怎么样才可以plug in进去:

29

看了这个图您肯定已经明白了,我们有机会得到客户端发送过来的HTTP请求,得到这个请求,得到请求里面的参数,我们就可以捋起袖子,大干一番了。

我们用什么方式去处理呢,最简单的一个方法是自己写一个servlet,在servlet的Dopost方法里面,写上处理这个请求的代码,并且把结果以XML的方式返回回去,那么我们这里用一个简单的例子:

throws java.io.IOException {

String action = req.getParameter(\ String item = req.getParameter(\

if ((action != null)&&(item != null)) {

30

// Add or remove items from the Cart if (\ cart.addItem(item);

} else if (\ cart.removeItems(item); } }

// Serialize the Cart's state to XML String cartXml = cart.toXml();

// Write XML to response.

res.setContentType(\ res.getWriter().write(cartXml); }

这对于了解服务器端编程的人来说,是最简单不过的了。当然,我们用了JSF框架,肯定不会再通过Servlet技术去做这件事情。我们这里用JSF的PhaseListener进行处理。什么是PhaseListener,我们来看一下PhaseListener的JavaDoc:

extends java.util.EventListener, java.io.Serializable

An interface implemented by objects that wish to be notified at the beginning and ending of processing for each standard phase of the request processing lifecycle.

原来,这个接口捕捉到每个Request的声明周期,在请求开始处理和请求处理结束时我们可以插入我们自己的代码。这个接口的两个最重要的方法如下:

Handle a notification that the processing for a particular phase has just been completed. void beforePhase(javax.faces.event.PhaseEvent event)

Handle a notification that the processing for a particular phase of the request processing lifecycle is about to begin.

处理结束和处理开始两个方法,我们可以在这两个方法里面写入我们自己的代码,对用户过来的请求进行处理。

比如,我们可以在afterPhase方法里面,插入下面的代码对数据进行处理: ExternalContext externalContext = facesContext.getExternalContext(); Map paramMap = externalContext.getRequestParameterMap();

通过paramMap里面可以得到所有的参数,当然,我们并不是对每一个请求都会进行处理,所以,在客户端Javascript发送Ajax请求得时候,可以添加一个自定义的参数,比如我们前面文档中的ajaxdemo=ajaxdemo参数,这样我们可以判断一下当前是不是我们要处理的请求:

31

if (! AJAX_DEMO.equals(paramMap.get(AJAX_DEMO))) return;

接下去的代码,就可以处理我们的各种各样的请求了,我们在这里要举的例子是如何得到当前地图的比例尺。下次讲座再深入探讨吧。

13、ArcGIS Server Java讲座----利用Ajax得到当前地图的比例尺(服务器端)

现在我们进入实战阶段,看看我们怎么可以在服务器端得到当前地图的范围,这个代码中你将

学到如何从faces Context里面得到当前form中的控件,以及如何利用ESRI提高的工具,简化我们响应AJAX请求的过程:

UIComponent form = facesContext.getViewRoot().findComponent((String) paramMap.get(FORMID));

首先我们得到页面上的form,form是一个container,通过它我们可以得到form中的其它组件,比如我们的地图控件:

我们可以用下面的方法得到这个Mapcontrol和WebMap:

MapControl mc = (MapControl) form.findComponent((String) paramMap.get(MAPID)); WebMap wm = mc.getWebMap();

得到了这个WebMap,哈哈,可以得到Everything了,因为你可以从WebMap中得到WebContext。这个时候,想得到那个比例尺,是再简单也不过的事情了,用下面的代码即可:

wm.getMapScale();

得到了比例尺了,接下去怎么办呢?把它返回到客户端,我们的Ajax客户端认的是XML的流,咋办呢?最笨的办法当然是是一个一个String的组装成XML,然后调用Response的Write写回到客户端,比如下面的代码:

public String toXml() {

StringBuffer xml = new StringBuffer(); xml.append(\ xml.append(“”);

32

xml.append(“100”); xml.append(\ return xml.toString(); }

生成了XML代码,然后用下面的代码把结果返回给客户端: Response res=(Response)externalContext.getResponse(); res.setContentType(\res.getWriter().write(scaleXml);

当然,各位看官想来都是JAVA高手,对于这样的写法实在感觉不舒服,正待想办法用标准的XML工具来写时,你会发现,ESRI已经为您想到了,写好了几个工具类来供你调用了。我们来看看怎么用这些工具:

用下面的代码创建一个标准的XML文档: Document doc = XMLUtil.newDocument(); 用下面的代码新建一个element:

Element responseElement = XMLUtil.createElement(doc, \用下面的代码将我们的比例尺数据写到刚才新建的Element里面:

XMLUtil.createElement(\然后用下面的语句将XML文档写入到客户端: AJAXUtil.writeResponse(facesContext, doc);

很可惜的是,ESRI这些类的代码是不公开的,不过你可以猜一猜,这些方法里面到底发生了什么事情。

OK,皮球又被提到了客户端了,我们下一个讲座来看看,如何解析服务器端返回的XML文档,并且更新页面上的输入框。

14、ArcGIS Server Java讲座--用Ajax得到地图比例尺(客户端代码)

上个讲座我们讲到,服务器端已经得到了当前地图的比例尺,我们需要在客户端做一个处理,把这个比例尺数据给用户看。我们在页面上放一个文本框,用来显示比例尺数据,如下面的代码所示:

33


基于java的arcgis server开发(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:混凝土收缩徐变预测

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: