2009年4月8日星期三

ArcGIS Server Java ADF 案例教程 11

Map组件详解
以上几个组件的使用非常简单,不需要很多设置就可以搭起一个有模有样的WebGIS页面了——当然,这是因为ADF在后台为我们做了很多事情。后面我们希望从Map组件入手,看看在一个会话中,ADF是怎么把后台的ArcGIS服务呈现到用户的浏览器,并使之能响应用户操作的。

当一个用户会话开始时,让我们首先看一下Map组件在服务器端绑定的WebMap对象,WebMap对象的定义我们可以在“/WebContent/WEB-INF/context-attributes.xml”中找到。在前面我们已经知道,一个JSF应用在启动的时候会读取“faces-config.xml”文件来配置应用;这里的“context-attributes.xml”虽然不是默认配置文件,但是在这里它也会被读取,因为在“/WebContent/WEB-INF/web.xml”中有如下的配置:

前面我们已经提过,“web.xml”是Java Web工程的部署描述文件,上述这段“web.xml”中的配置会指定JSF应用启动时需要读取的若干配置文件路径,“context-attributes.xml”赫然名列其中。对了,你也可以自己新建一个配置文件,然后在这里进行一下配置,比如我习惯新建一个“context-resources.xml”文件来定义WebContext需要的所有服务资源,然后再在“web.xml”中添加如上虚线框中的内容。

在“context-attributes.xml”中首先就是对WebMap的定义:

这段配置文件的含义就是:在应用中,在有需要的时候会实例化一个名为map的WebMap对象供使用,并且其地图输出格式为24位的PNG图片。

从图 3的结构我们可以看到,这个WebMap对象将会被放置到WebContext的attributes中进行使用和管理。比如按照下面这段“faces-config.xml”中的定义,当得到一个WebContext对象mapContext以后,我们就可以通过mapContext.attributes["map"]就可以得到WebMap对象了:

好,目前为止我们已经知道了在一个会话中,Map组件在服务器上绑定的WebMap对象如何生成,并且如何引用了。下面让我们看看Map组件和WebMap怎么配合渲染成浏览器中的一个地图的。

前面在JSP页面中我们是通过“a:map”标签来定义一个Map组件的,实际在ADF中,其对应的JSF组件为MapControl 。MapControl中包含WebMap、MapRenderer 、XslUrl等属性,WebMap负责维护地图的功能,MapRenderer负责将其输出成XML,最后再通过XslUrl指定的XSL文件将XML解释为DHTML输出。

打开“/src/xsl”目录,我们会发现下面有很多“*.xsl”文件,其中的“map.xsl”就是我们的MapControl渲染时候默认使用的XSL文件。当有用户向服务器发送请求的时候,JSF会首先创建或者还原MapControl这个视图对象,然后再使用其MapRenderer按照XSL文件渲染成DHTML响应输出给浏览器。

你可以运行下你的应用,然后查看地图页面的源代码,从中会发现类似以下的代码,这些就是Map组件的MapRenderer渲染的。

在这里出现了EsriMap这个JavaScript类, 它将会实例化浏览器端的地图对象。在下面这一节里,我们将会对EsriMap做详细解释。这里先稍微做一下总结,如图 8,借用帮助里的一张图片,应该可以帮助你了解ADF组件的基本原理。
图 8 Map组件的生命周期

没有评论: