CIMS 集成制造系统 CIMS 经验总结
第一讲
当规划一个 ArcIMS的站点时,第一个面临的问题就是“我要选择什么样的客户端?”这是
一个很难回答的问题。ESRI提供了三种 viewer以供选择。然而,通过选择不同的连接器
——Servlet、ActivX、ColdFusion或 AppServerLink连接器——可以获得一个不同寻常
的客户端。所以,当我们考虑使用什么 Viewer时,选择什么样的连接器同样是一个需要仔
细考虑的问题。下面的讨论可以帮助 ArcIMS的用户,开发商和管理员决定最合适的连接器
和 Viewer的组合。
ArcIMS客户端组件
Viewers决定了 ArcIMS站点的功能和外观,决定了提供哪些空间、属性查询工具和显示工
具。ArcIMS提供了三种 Viewer选择。
HTMLViewer
HTMLViewer由一组 HTML和 JavaScript程序组成。它比任何一种 JavaViewer都更轻巧,但
不是最瘦的 viewer。Viewer的胖或瘦代表了需要下载到浏览器的数据量。选择 HTMLViewer
的一个主要原因是它的功能的可扩展性。通过 DHTML,JavaScript,XML和其他技术,我们
可以对已有的功能进行扩展。不需使用任何 ArcIMS连接器,我们仍然可以在 HTMLViewer中
使用 ActiveServerPages(ASP),ColdFusion和 Java技术。但是,HTMLViewer同时只能显
示一个 ImageMapService。ImageMapService将结果以 JPG,GIF或 PNG格式发到客户端
——与 FeatureMapService数据流的发送方式不同。
JavaViewer
ArcIMS提供两种 JavaViewers——JavaStandardViewer和 JavaCustomViewer。JavaViewer
通过 Javaapplets提供地图服务和信息查询。Javaapplet不同于 servlet,它运行在客户端,
不是服务器端,并且必须下载到客户端。因此,Java客户端比其他的客户端更胖。通过
Javaviewer浏览网站,用户必须首先下载两个 plug-ins。
JavaStandardViewer无法定制工具或布局。而 JavaCustomViewer可以通过 HTML和
JavaScript调 用 applets进 行 定 制 。 因 为 Netscape不 支 持 applet编 程 , 因 此
JavaCustomViewer不能在 Netscape浏览器中使用。
所有的 JavaViewers都可以支持 Image和 FeatureMapServices,并且支持同时使用多个
MapServices。FeatureMapService使用数据流,因此可以支持客户端的用户交互和分析功
能。
应用服务器连接器
ArcIMS应用服务器连接器连接了 Web服务器和 ArcIMS应用服务器。其中 Servlet连接器
——ArcIMS的默认连接器——可以用在 ArcIMS的所有三个 Viewers中。ColdFusion和
ActiveX连接器通过定制的客户端将各自的语言翻译为 ArcXML,用来和 ArcIMS的应用服务
器进行通讯。AppServerLink是 Java应用向 ArcIMS应用服务器发送 ArcXML请求的通道。
它 可 以 用 于 独 立 的 Java应 用 , 或 网 站 调 用 的 Javaapplet, 或 构 建 网 站 的
JavaServerPagers(JSP)中。
ServletConnector
Servlet是运行在服务器端的 Java应用。如果使用 servlet,需要 ServletEngine软件的支
持。如果 WebServer本身不包含 ServletEngine,则需要第三方的 ServletEngine软件。通
过 ServletConnector建立的站点几乎可以支持任何 WebServer和 Viewer的组合。通过
ArcIMSDesigner可以创建 ServletConnector连接的站点,而且只需要很少的编程工作就可
以建立一个基本的,但稳固的站点。
ActiveXConnector
通过 ActiveXConnector,可以使用 ASP进行网站的开发。VBScript、HTML、JavaScript和
XML可以用来定制网站。ASP在服务器端解释并被以只读的格式传送到浏览器。客户端不需
要下载任何东西。ActiveXConnector定制的客户端与 HTML或 JavaViewer相比是更瘦的客
户端。 ActiveXConnector需要基于 MicrosoftWindows的服务器, WebServer 必须是
MicrosoftInternetInformationServer(IIS)。客户端可以是任何浏览器,不需要插件支持。
ActivXConnector还可以被用在独立的 VB应用中,使用方式类似于 MapObjects的应用。在
开发文档中,ESRI提供示例程序和对象模型图。但是,它的功能没有 HTML或 JavaViewer
那么强大。
ColdFusionConnector
ColdFusionConnector非常类似于 ActiveXConnector,因为它的代码位于服务器,并被翻译
为浏览器可以识别的格式。ColdFusion使用 ColdFusion标记语言(CML),一种类似于 HTML
的可以被 ColdFusion服务器解释的标记。该连接器可以用于 Windows或 UNIX服务器上的大
部分 WebServer。WebServer上必须安装 ColdFusion服务器。ColdFusionConnector定制的
客户端与 HTML或 JavaViewer相比是更瘦的客户端,也不需要插件的支持。可以通过
ColdFusion标签,HTML,JavaScript和 XML搭建 ColdFusion站点。ESRI提供入门示例帮
助 建 立 站 点 , 但 功 能 没 有 HTML或 JavaViewer强 大 。 可 以 通 过 安 装
ColdFusionStudio——ColdFusion的开发环境,使得开发过程变得更容易。
AppServerLink
AppServerLink为 开 发 基 于 Java的 ArcIMSViewers提 供 了 更 多 的 选 择 。 通 过
AppServerLink,可以编写 Java独立应用,applets和 JSP。搭建 Java独立应用的过程很类
似于编写 MapObjects的应用。象 Java版本的 ArcExplore一样,Java的独立应用可以使用
ArcIMS的数据和信息;还可以应用 applets建立类似于 JavaViewers的站点,但这种方法
提供了更灵活的定制手段。
最后,通过AppServerLink,还可以使用JSP——JavaServlet技术的扩展——建立类似于ASP
和 ColdFusion的站点。通过 JSP和 Java,HTML,JavaScript和 XML编写全部的代码。服务
器将代码解释成浏览器可读的格式。JSP是另外一种不需要任何浏览器插件支持的瘦客户端,
但它需要服务器端的 Servlet引擎的支持。但是,因为 ArcIMS需要 Servlet引擎,因此不
需要额外的资源。ESRI提供 java类的 API,以及应用 JavaBeans使用 AppServerLink的一
些 Java和 JSPViewer的示例。
如何做出选择
当考虑如何选择连接器和 Viewer时,面对的用户和所需的功能是需要重点考虑的两个问题。
站点是建立在 Intranet还是 Internet?用户使用什么浏览器?用户的 GIS背景?需要使用
什么功能?定制的工作量有多大?
如果要建立一个 Intranet站点,JavaViewer 可能是个明智的选择。在一个机构内部,要求
用户事先安装插件或在桌面端下载并安装插件相对容易。JavaViewer支持更丰富的功能,
如 MapNotes和 EditNotes,这是 HTMLViewer所不支持的。一旦客户端加载了 applets,地
图的显示和查询速度将非常快,但相对于其他的 Viewers,JavaViewer的定制功能非常有限。
如 果 要 建 立 一 个 Internet站 点 , 可 以 考 虑 HTMLViewer、 ActiveXConnector、
ColdFusionConnector或 AppServerLink。使用 HTMLViewer的主要原因是不需定制,就可以
获得强大的功能。ArcIMSDesigner输出了一组预先定义好的功能。HTMLViewer的文档详细
描述了它的功能,变量和方法。并且 HTMLViewer支持所有平台的客户端和服务器。开发者
只需熟悉 HTML和 JavaScript就可以通过 HTMLViewer建立站点。HTMLViewer的主要缺点是
它比其他连接器的客户端胖,响应时间慢,特别是当访问大数据量时。
其他定制连接器建立的客户端更瘦,因为代码位于服务器端并且不需下载到客户端。我们可
以根据两个主要因素——环境和资源——选择连接器。如果使用 Windows服务器上的
MicrosoftIIS,可以选择 ActiveXConnector;如果不是,选择任何连接器都是可行的。对
于 UNIX服务器,可以选择 ColdFusion或 AppServerLink连接器,但 ActiveXConnector不
行。
选择 Connector的另一个重要因素是你所掌握的开发手段。如果熟悉 VB,可以使用
ActiveXConnector。同样地,如果开发人员掌握 ColdFusion,则 ColdFusionConnector可
能成为最佳选择。对于所有连接器,HTML和 JavaScript简单易学,是必须掌握的开发手段。
所以如果你不熟悉其他的开发方式,HTML和 JavaViewer是最佳的选择。如果使用
AppServerLink,则需要 Java编程的经验。而对于初学者来说,Java不是很容易入门。虽
然所有的连接器都备有开发文档,但 ServletConnector的文档是最完整的。
第二讲
这篇文章假设读者熟悉使用 ArcIMSManager工具(包括三个部分:Author、Administrator
和 Designer)创建一个简单站点的过程,现在希望使用 ArcXML实现更多的功能或改变地图
的显示——ArcXML是 ArcIMS用来在各组件之间进行通信的文件格式。这篇文章除了详细介
绍如何通过在地图配置文件中添加 ArcXML元素扩展 ArcIMS功能外,还概括介绍了 ArcXML
的结构和语法。在 ArcUserOnline站点上提供了三个循序渐进的教学例子。请登录站点
http:///arcuser下载教学例子和数据。
当用 ArcIMS程序创建基本的 ArcIMS站点时, Author把用户选择的数据(例如:
Shapefile、coverage、ArcSDE层、图象等)整理成地图的图层;设置显示比例尺,要素表
现特性,和地理编码;并输出一个用 ArcXML写的地图配置文件。Administrator用这个地
图配置文件生成一个 Mapservice。ArcIMS空间服务器解析用户请求并进行相应的处理,根
据地图配置文件中的定义把这些数据组织在一起发送给客户端。
ArcXML源于 XML和 HTML有相似的地方,是 SGML的子集;它是一种发展了的标记语言;描
述结构数据的内容而不是数据的表现。ArcXML文件是文本文件,以.axl结尾,可以编辑。
ArcXML定义了 MapService的内容以及从客户端发出的请求,ArcIMS响应,各业务逻辑层和
服务器之间的通信的内容。通过在地图配置文件里手工添加元素和元素的属性,可以实现一
些不能通过 Author实现的功能,例如更多的表现方法和标注选项,数据源,表联接以及其
他的功能。
ArcXML结构和语法
所有的 ArcXML语句由元素和属性组成,这些元素和属性以等级结构组织在一起。在这种等
级结构下,元素被分为父元素和子元素,子元素嵌在父元素的里面。多数的元素都有一个或
多个由名称/值对组成的属性。一些 ArcXML元素要求必须指定一些属性。如果在地图配置文
件里没有指定元素的属性,系统会使用缺省属性。
当写元素和属性时,必须严格遵守 ArcXML语法,否则不能创建 Mapservice。元素必须被大
写,并象 HTML一样用小于(<)大于(>)号封闭。属性必须小写,属性值必须用双引号括
起来。一次只能定义一个属性值。
ArcXML程序员参考指南
元素和属性的用法可以参考“ArcIMS程序员参考手册”。这本手册以 PDF格式随 ArcIMS发
送,是用户了解和学习 ArcXML元素和属性的非常有帮助的资料。它列出了所有的 ArcXML元
素以及与之相关的属性的详细描述。每一个元素的必要属性用粗体表示。所有的属性都列出
了定义的值或值的类型。
例如,对元素 HASHLINESYMBOL的描述包括有效定义的值(如,type属性的 foreground和
background值)和允许的值的类型(如,color属性值从 0,0,0到 255,255,255)。属
性默认值用方括号括起来。元素介绍开头的地方都有指向父元素和子元素的超联接。必要的
子元素用粗体表示。另外,该手册还包含了一些如何使用 ArcXML元素和属性的例子。在
ArcOnline站点上也可以得到“ArcIMS程序员参考手册”。
给地图配置文件中添加要素
可以使用简单的文本编辑器或 XML编辑器编辑地图配置文件,例如微软的 Wordpad、notepad
或 Altova公司的 XMLSpy或 IBM的 Xeena(如在中文环境下,则需要支持 unicode的文本编
辑器,如 emeditor)。除非在 Administrator里刷新了 Mapservice,对地图配置文件的修改
不能立即显示在客户端。刷新 MapService会使地图配置文件被重新读入,并把所做的改变
反映在 MapService里面。
编辑地图配置文件时,必须严格遵守 ArcXML语法,地图配置中的任何错误都会导致
Mapservice不能被刷新,并且会导致 Mapservice从 Administrator中被删除。消息控制台
可以从 Author或者 Administrator中的 Help->MessageConsole菜单进入。消息控制台是用
来显示 ArcIMS产生的错误和警告。下面的部分用来描述怎样通过使用符号化、标注和图形
元素来改变地图的显示或者查询数据和连接表。
改变要素符号化
有三个 ArcXML元素用来表示如何符号化点线面数据。要素数据用下列的元素表示:
SIMPLERENDERER使用同样的符号画所有的要素,
VALUEMAPRENDERE使用表里的一个字段画要素,
SCALEDEPENDENTRENDERER仅仅画一个特定比例尺范围里的要素。
一层里的多个表现方法元素必须包含在一个 GROUPRENDERER里。每一个表现方法元素都包含
了一个子元素,用来定义要素如何显示。
有多种符号元素,符号元素对要被表现的要素类型来说是特定的,例如;SIMPLEMARKERSYMBOL
只能用于点要素,虽然 HASHLINESYMBOL元素在 Author里可以用来表示铁路,但是一些属性
例如宽度和间隔可以在地图配置文件中修改,这些改变可以覆盖它的默认属性,从而重新定
义如何画 HASHLINESYMBOL元素。
要素的符号化也能基于一个字段。VALUEMAPRENDERER元素能够根据一个字段的值为一层要
素分类,根据这个分类,它可以使用连续的或者唯一的符号表现数据。
EXACT、RANGE、和 OTHER这三个和 VALUEMAPRENDERER一起使用的子元素指定了要被符号化
的值。使用 EXACT元素用一个特定的值表现要素,然而使用 RANGE时使用一个范围来表现要
素。OTHER元素用来表现不包含一个特定值的要素,例如一个特定的 TRUETYPE符号用来表
示首府城市,其他的城市都用一个简单的点符号表示。
有些符号元素,例如 GRADIENTFILLSYMBOL和 TRUETYPEMARKERSYMBOL元素在 Author界面上
无法定义,只能使用 ArcXML定义。通过 ArcXML可以使用 ESRI定义的许多点符号。
标注要素
标注属性用两个标注元素来定义(SIMPLELABELRENDERER和 VALUEMAPLABELRENDERER)前者
为所有的要素设置了同样的标注属性,后者根据一个数据库里的值定义标注属性。Author
能够设置层的标注属性,例如标注子段,标注位置和字体特征。在层属性对话框中只能指定
一个字段。Author也能够为标注元素添加子元素,例如为文本标注添加 TEXTSYMBOL和为高
速公路标注添加 SHIELDSYMBOL。
手工编辑地图配置文件为标注提供了很大的灵活性。例如:使用外边框和箭头标注要素的
CALLOUTMARKERSYMBOL元素有一些包括箭头的长度在内的定义字体和外边框的符号的属性。
表现方法元素属性能改变标注出现的位置和频率。当使用 SIMPLELABELRENDERER元素时允许
使用多个字段做标注。以同样的过程,使用 VALUEMAPLABELRENDERER元素的 labelfield属
性连接标注。
点要素的 labelpriorities属性用于点要素的标注定位,labelbufferratio属性在每一个
标注周围建一个缓冲区,这样其他标注就不能放置在离它一定距离之内的范围。
Howmanylabels属性控制了要画的标注的方法——是一个要素图形一个还是要素每个部分
都标,或一个要素名称标一个。
使用图形元素
把 LAYER的 type属性设置为 acetate可以在地图上面加一个图形层。Acetate层在数据层
上又添加了一个图形层,它只能用于 HTMLViewer。缺省情况下,Acetate层里的 OBJECT子
元素有:指北针,比例尺和版权文字。通过往地图配置文件里添加新的 LAYER元素可以往
acetate层添加新的 OBJECT对象。
每一个新的 LAYER元素的 type属性必须设置为 acetate。在 LAYER元素里有一个或多个
OBJECT子元素,每个 OBJECT元素都有一个 units属性,其值可以是 pixel或 database。如
果 units属性被设置成 pixel,对象将使用以地图左下角坐标为原点的像素坐标。如果 units
属性设置为 database,对象将使用地图服务的地图坐标。
除了指北针和比例尺,一些点线面图形或文本都可以添加到 acetate层,并允许把一些由文
字 和 徽 标 组 成 的 标 题 添 加 到 新 的 LAYER元 素 里 。 通 过 往 POINT元 素 里 添 加
RASTERMARKERSYMBOL元素可以添加图像。POLYGON元素可以包含SIMPLEPOLYGONSYMBOL元素,
通过把它的 overlap属性设置为 false可以防止标注压盖 acetate层的边框。还有一些对象,
如复制地图坐标网格线的 LINE对象元素,也可以添加到地图显示中来。
查询数据和联接表
基于空间条件或关系数据库查询数据是 GIS的基本功能。空间查询和数据库表查询能够通过
使用 SPATIALQUERY元素实现。这个元素根据空间查询或表查询或两者结合查询的结果在地
图上画要素。SPATIALQUERY还能实现一些简单的表联接。
表查询的语句放在 SPATIALQUERY元素的 where属性里,格式和 SQL语句里的 WHERE子句一
样,所有满足 where属性条件的要素将被画在地图上。在要用到符号的查询语句里,如大于
小于号,必须在 where属性里使用这些符号的代替值。
空间过滤器定义了空间查询的范围。范围可以是一个矩形,点,多边形或缓冲区。所有的在
空间过滤器里的要素都将被画在地图上。SPATIALFILTER元素用在 SPATIALQUERY里面,一
般定义为使用矩形空间过滤的 ENVELOPE元素或定义为使用顶点定义的多边形。无论哪一种
都指定了空间过滤器的范围。SPATIALFILTER元素的 relation属性指定了空间过滤器是个
围 绕 在 图 形 周 围 的 矩 形 ( envelopeintersection) 还 是 就 是 图 形 本 身 的 区 域
(areaintersection)。
SPATIALQUERY元素还能够用来联接 dBASE(DBF)文件和 shapefiles或用来联接 ArcSDE的
表。Shapefile的层只能和同一目录下的 DBF文件相连,ArcSDE的表只能和同一 DBMS下的
表相连。在 SPATIALQUERY元素里要指定主表(TO表),字段名,连接表(join表),字段名
以及联接类型。Exact联接适合于一对一或多对一关系。Scan联接对一对多或多对多最有效。
结论
通过了解 ArcXML的结构,元素和属性,我们知道 ArcIMS的功能可以通过修改地图配置文件
里的元素来进行扩展。ArcUser站点提供了三个用来展示如何手工修改地图配置文件的教学
例子。请登录/arcuser下载教学例子以及实验数据。要了解更多的有关 ArcXML和地图配置
文件的内容请参考《ArcXMLProgrammer´sReferenceGuide》。
第三讲
怎样设置 ArcIMS的权限验证
ArcIMSServletConnector允许为 MapService(地图服务)设定访问权限,这样只有被授权
的用户才能访问他们。这个过程被称为权限验证。默认的,不进行权限验证,
ServletConnector将所有请求发给 ArcIMSApplicationServer(应用服务器)。但是,你可以
通过配置 ServletConnector来验证客户端:
*是否有有效的用户名和密码
*是否可以从特定的机器(通过 IP地址判断)访问 MapService
*是否有未过期的访问权限(如未服务设定了有效期)
*是否有特定请求的访问权限(如是否能执行地址匹配功能)
当接到从客户端发来的请求,ServletConncctor首先检查是否为 MapService设定了权限验
证。如果设定了,ServletConncector从客户端获取必要的信息——如用户名,密码
——然后确定是否满足条件。如果条件满足,请求将被发给 ApplicationServer。否则,将
会提示用户无权访问该 MapService。
ServletConncctor通过访问控制列表(ACL)来管理限定的和非限定的 MapServices以及权
限验证信息。ACL有两种格式:基于文件的 ACL和基于 JDBC的 ACL。
基于文件的 ACL的主要优点是容易建立,不需要其他的部件支持。基于文件的 ACL将权限信
息保存在 XML文件中,该文件可以通过任何文本编辑器建立。在这个文件中,你可以定义哪
个 MapServices被限定以及如何访问他们——如包含所需的用户名和密码。当 Servlet初始
化时,这个文件的内容被加载进内存。因此,如果你编辑了 ACL文件,需要重新启动
servletengine(如果 servletengine嵌入 web服务器,则需要重启 web服务器)使你的更改
生效。而且,在 ACL文件中定义的用户数量的增加会导致 web服务器的内存使用量的增加。
基于 JDBC的 ACL将权限信息保存在通过 JDBC驱动程序访问的关系型数据库中。JDBC的 ACL
可以比文件的 ACL管理更大量的用户和 MapService。而且,如果你需要频繁更改 ACL,基于
JDBC的 ACL可以不终止服务,即不需要重新启动 servletengine,而使更改立即生效。为了
使用基于 JDBC的 ACL,你必须运行一个关系型数据库(如 Oracle),并且有它的 JDBC驱动。
注意:只有通过 ArcIMSServletConnector处理的 HTTP请求,才可以使用权限管理,其他连
接器(如 ActiveXConnector)不可用。
基于文件的 ACL的权限验证
下面表明了通过 XML文件设置 MapServices的权限验证的步骤:
第一步:创建地图配置文件,设计 web站点。
通过 Author创建地图配置文件(AXL),然后通过 Designer设计站点的外观。
注意:Designer不能访问到被限定的 MapServices;所以,你必须在限定权限之前生成站点。
第二步:编辑 Esrimap_prop文件。
定位 Esrimap_prop文件所在目录,因为 servletengine不同,安装的目录有所不同,并用
文 本 编 辑 器 进 行 编 辑 。 注 意 ArcIMS在 Windows的
<installationdirectory>ConnectorsServlet或 UNIX的
<installationdirectory>/Middleware/Servlet_Connector目 录 下 安 装 了
ServletConnector的 一 套 备 份 文 件 。 不 要 编 辑 该 目 录 下 的 文 件 , 它 不 会 影 响
ServletConnector的操作。
按照下面的提示设置属性。你可以简单地通过移走 Esrimap_prop文件中的注释字符(#)设
置许多属性。这些属性名称大小写敏感,但属性值不敏感。在 ArcIMSServletConnector属
性文件中详细地描述了这些属性。
注意:如果你同时为基于 XML文件和基于 JDBC的 ACL设置了属性,那结果将使用 JDBC的设
置。
enable=True
使用 ArcIMSServletConnector.
authenticate=True
使用 ServletConnector的权限验证
authMethods=Basic
两种权限验证的方法:Basic和 Digest.。Digest更安全,但不是所有的浏览器都支持。
authenticateWithSessions=True
允许 ServletConnector更高效地处理客户端的请求。
sessionTimeout=120
大多数情况下,120秒应该足够了。
aclFileName=<ACL文件的全目录>/
一般地,你可以将 ACL文件放在与 Esrimap_prop文件相同的目录下。表示目录的斜杠必须
是“/”。
realm=ArcIMSNetwork
当提示用户输入用户名和密码时,realm名显示在对话框上。
第三步:创建保存访问控制列表的 XML文件。
用文本编辑器创建 XML文件。该文件表明哪个用户有权访问哪个 MapServices。
需要牢记的是:
*确认按照在Esrimap_prop文件的aclFileName属性中定义的文件和目录名命名并保存该文
件。
*用户名和密码是大小写敏感的。
*在 ACL文件中定义的 MapService的名字必须与在 Administrator中的完全一致。
*只有在 ACL文件中列出的 MapServices才可用,即使你还有其他的 MapServices在
Administrator中运行。
下面的 ACL文件包含一个限定的 MapService和两个非限定的 MapServices。
<?xmlversion=""?>
<AIMSACL>
<USERname="*"services="SanFrancisco,World"/>
<USERname="private"password=""services="SecretData"/>
</AIMSACL>
下面的 ACL文件表明了怎样限定特定的机器访问限定的 MapService,还增加了一个可以访
问所有 MapServices的用户。
<?xmlversion=""?>
<AIMSACL>
<USERname="*"services="SanFrancisco,World"/>
<USERname="private"password=""
services="SecretData"trustedclients=","/>
<USERname="superuser"password=""services="*"/>
</AIMSACL>
关于所有属性的描述,请参见 ArcIMSServletConnector属性文件。
第四步:如果你使用的是 MicrosoftWindows2000和 (IIS),
你需要为权限验证配置 IIS。
在任务栏,点击开始|设置|控制面板|管理工具|Internet服务管理器。在左面板,双击机
器名,展开树状目录,双击默认的 Web站点。如果你运行的 servletengine软件是
ServletExec或 Jrun,双击 Scripts;如果是 Tomcat,双击 jakarta。在右边面板,右键点
击 ,或 ,打开属性窗口。
点击“文件安全性”。
在“匿名访问和验证控制”栏点击“编辑”按钮。
取消“集成 Windows验证”。
第五步:停止,重启 servletengine。如果 servletengine嵌入 web服务器,停止、重启 web
服务器。
重启 servletengine(或 web服务器)使得你在 Esrimap_prop文件中的设置生效——通过 ACL
文件进行权限验证的工作完成了。
基于 JDBC的 ACL的权限验证
下面表明了通过基于 JDBC的 ACL设置 MapServices的权限验证的步骤。前提条件假定你已
经运行了一个关系型数据库,并且你已经安装并配置了 JDBC驱动:
第一步:创建地图配置文件,设计 web站点。(同基于文件的 ACL第一步)
第二步:编辑 Esrimap_prop文件。
前部分同基于文件的 ACL的第二步,接下来要做的是:
useJdbc=True
使用可通过 JDBC访问的数据库存储权限
jdbcDriver=<JDBC驱动的名称>
例如:jdbcDriver=。驱动器所在目录必须是 servletengine
的 classpath设置的一部分。
jdbcUrl=<到数据库的 URL>
到数据库的 URL存储了访问控制信息。格式为:jdbc:<数据库类型>:@<机器名>.<域>.<组织
代码>
如:jdbcUrl=jdbc:oracle:oci8:@
jdbcUser=<数据库用户名>
访问数据库的用户名
jdbcPassword=<数据库用户的密码>
特定数据库用户的密码
jdbcUserTable=<数据表名>
数据库中存储有效用户和密码的表名
jdbcPermTable=<数据表名>
数据库中包含 MapService名和特定用户访问权限列表的数据表名。
jdbcUidColumn=<数据库表字段名>
在数据库用户表和权限表中都存在的用户代码字段名
第三步:停止,重启 servletengine。如果 servletengine嵌入 web服务器,停止、重启 web
服务器。(同基于文件的 ACL第五步)
第四步:在关系型数据库中创建用户表
用户表包含了你希望访问你的 MapServices的用户的名称和密码。它还包含了一个唯一的用
户代码,ArcIMS通过它将此表和权限表连接。该表名必须与 Esrimap_prop文件中
jdbcUserTable设置的名称相同。该表必须包含下列字段:
字段名类型(宽度)
UseridNumber(32)
UsernameVarchar(64)
PasswordVarchar(64)
为了增加灵活性,你可以将 userid字段命名为任何你希望的名称,只要它与 Esrimap_prop
文件中 jdbcUidColumn设定的名称一致即可。其他两个字段必须为 username和 password。
所有字段的描述信息,可以在 ACL属性参考中找到。
第五步:在关系型数据库中为用户表添加记录
为用户表添加用户名和密码。确保 userid是唯一的。你可以用*表明该 MapServices不需要
用户输入用户名和密码就可以访问。
UseridUsernamePassword
1*
2USER1PASSWORD1
3USER2PASSWORD2
4USER3PASSWORD3
第六步:在关系型数据库中创建权限表。
权限表将每个 MapService与一组或多组用户名和密码关联。该表名必须与 Esrimap_prop文
件中 jdbcPermTable定义的名称一致。该表必须包含下列字段:
UserID字段名必须与用户表中定义的名字和 Esrimap_prop文件中 jdbcUidColumn设定的名
称一致。其他五个字段必须命名为以上字段名称。
所有字段的描述信息,可以在 ACL属性参考中找到。
第七步:在关系型数据库中为权限表添加记录
为权限表添加用户代码,MapServices名和激活状态。每个记录只包含一个 MapServices名。
用户代码将 MapService与用户名和密码关联起来。你可以增加其他的具有相同用户代码的
记录与多个 MapServices关联。下表显示了一个基本的权限表的配置。
字段名类型(宽度)
UseridNumber(32)
ServiceVarchar(64)
ActiveNumber(32)
ExpirationData(格式 MM/DD/YYYYHH:MM:SS)
TclientsVarchar(1024)
FtagsVarchar(1024)
你可以有选择地填写其他字段为 MapService增加额外的限定条件。如,你可以增加过期时
间 (10/16/200111:24:30),一组用逗号分开的通过 IP地址识别的信任用户列表
(,)和 一 组 用 逗 号 分 开 的 限 定 功 能 的 标 签 列 表
(GET_GEOCODE,GET_EXTRACT).
第八步:如果你使用的是 MicrosoftWindows2000和 (IIS),
你需要为权限验证配置 IIS。(同基于文件的 ACL第四步)
第四讲
ArcIMS(HTMLViewer)定制开发探讨
(以水情监测信息系统原型开发为例)
一、ArcIMS体系结构简介
ArcIMS(InternetMapServer)是 ESRI最新推出的第二代互联网上地理信息系统平台,其结
构经过特别设计用来满足在 Internet上提供地理数据和服务的需要。
多层结构
ArcIMS的多层结构由展示层(presentationTier),逻辑事务层(BusinessLogicTier)和
数据存储层(DataStorageTier)组成。展示层是指 ArcIMSViewers。逻辑事务层由
WebServer,ArcIMS应用服务器和 ArcIMS应用服务器连接器及 ArcIMS空间服务器组成。数
据存储层指数据源。各个不同层之间通过 ArcXML进行通讯。ArcXML是 ArcIMS版本的 XML,
即可扩展的标记语言(eXtensibleMarkupLanguage)。
二、ArcIMS客户:Viewers介绍
ArcIMSViewers可以全部由 HTML组成或包含 JavaApplets。ArcIMS通过 Designer可以生成
一种 HTML/DHTMLViewer和两种 JavaViewer,并在实例中包含了使用 ColdFusion和 ActiveX
连接器的 HTMLViewer。ArcIMS还包含一种独立运行的 JavaViewer叫 ArcExplorer3。这些
viewer可以通过 HTML和 JavaScript进行修改。
1、HTML/DHTMLViewer
HTMLViewer由 HTML,DHTML和 JavaScript写成。在 HTMLViewer里同时只能支持一个影像
地图服务。当用户点击地图或工具后,Viewer生成一个请求并通过 ServletConnector将请
求发送到 ArcIMS的空间服务器端。当响应返回时,客户端解析响应结果并完成显示操作。
HTMLViewer要求 或更高版本的浏览器。通过定制 Viewer,可以支持低版本的浏览器。
2、使用 ColdFusion和 ActiveX连接器的 Viewer
ColdFusion和 ActiveXViewer同样也是 HTML/DHTML机制。他们与 HTMLViewer的不同之处
在于所有的处理过程都在服务器端完成。请求通过第三方应用服务器生成,响应以 HTML页
的格式动态返回。这类 viewer不需要自己生成请求或解析响应,因此是最瘦的客户端。对
于最终用户来说,这两类 viewer外观相似,功能相仿,但他们处理请求和响应的方式完全
不同。ArcIMS提供了使用 ColdFusion和 ActiveX连接器的 viewer的例子。
3、JavaViewers
与 HTML/DHTMLViewer相比,JavaViewer是胖客户端。因为他同时支持影像和矢量地图服务。
多个地图服务的数据可以与本地数据一起显示在一个 JavaViewer里。JavaViewer通过
Java2Applet来显示地图和处理请求。
JavaViewer支持矢量数据流和更丰富的客户端的功能。数据临时下载到客户机的高速缓存
中。除非需要下载新的数据,其他所有的请求都由客户机来完成当 viewer关闭时,临时缓
存被清空。
ArcIMS支持两种 JavaViewers:可定制的 JavaViewer和标准的 JavaViewer。它们具有相似
的功能。
可定制的 JavaViewer通过 JavaScript与 applets通讯。通过 Viewer的对象模型接口
( ObjectModelAPI)可以定制 viewer的功能。同时,可定制的 JavaViewer只支持
和 。
标准的 JavaViewer不使用 JavaScript。所有的工具和功能都是预先设定的,不能通过对象
模型接口( ObjectModelAPI)进行定制。标准的 JavaViewer同时支持 Netscape和
及更高版本。
ArcIMS还包含一个独立运行的、不需要标准浏览器的 Viewer,ArcExplorer3。
JavaViewer需要下载两部分内容。一是使用 Java2Applet要求的 Java运行环境。二是一次
性下载的 ArcIMSviewer的部件,applet通过这些部件与服务器进行通讯。
三、客户 Viewers的定制开发
支持定制开发 ArcIMS的客户端有 HTMLVIEWER与 JAVAVIEWER其中 HTMLVIEWER根据应用服务
器连接类型可分为:Servletconnector、ActiveXconnector、ColdFusionconnector三种。
针对以上四种类型的客户都有相应的定制开发方法,ESRI也提供了相应的文挡,本文将重
点介绍 ServletconnectorHTMLVIEWER的定制开发方法。
HTMLVIEWER由 HTML、DHTML及 JavaScript组成,因此对 HTML、DHTML及 JavaScript的熟
悉是进行深度定制开发的前提与基础。此外,ArcXML是 ArcIMS各部件间用来通讯的语言,
对它有一定的了解是十分必要的,而且了解越深,收益越大;最后,如果要操作外部数据库
的话,对 JSP(JAVASERVERPAGE)或 ASP(ACTIVESERVERPAGE)以及 SQL应有所掌握,掌握
越深,见效越快。
HTML是 WEB站点设计使用与支持最为广泛的语言,而且相当简单,只需一两天就能够学会,
主要用来描述页面的表现形式,HTML周期性地标准化,随着浏览器开发商不断推出新的标
志,属性和属性值,这个语言在不断扩大,版本不断翻新。由于 Netscape和 Microsoft占
有了浏览器市场的最大份额,他们领导了 HTML新内容的定义。由于这些补充不是正式 HTML
语言的一部分,他们称其为扩展。大多数扩展最终都会集成到下一个 HTML正式版本中。
的扩展中有个 LAYER标志,使 WEB页面可以放上多个重叠文档层,这个 LAYER标志
对于 ArcIMS的 HTMLVIEWER也是相当重要的。此外,FRAME标志与 TABLE标志使 HTMLVIEWER
的布局更为漂亮。
JavaScript是个脚本编程语言,支持 Web应用程序的客户机和服务器方构件的开发。在客
户机中,它可用于编写 Web浏览器在 Web页面上下文中执行的程序;在服务器端,它可用于
编写处理 Web浏览器提交的信息并相应地更新浏览器显示的 Web服务器程序。ARCIMS的
HTMLVIEWER缺省包含一个 JavaScript函数库,其中设计了几百个函数和几百个全局变量,
是进行定制开发的核心。这些函数按功能进行了分组,以*.js形式保存。当然,你可以改
写或补充它,这也是进行深度定制开发所必经的过程,有一个组织良好的 Javascript函数
库,决定了开发的效率与质量。本文的重点与创新也在于 JavaScript函数库的设计。下面
的代码片段展示了如何创建自己的 Javascript函数库:
//
//===================================================================
//NOTES:2/24/2001
中的全局变量和函数主要用来调试跟踪其它 Javascript函数库中的函数及全
局变量,因此其它 Javascript函数库中的函数要做相应的修改,修改可以手工操作,也可
以程序方式批量操作。
//======================================================================
//用于调试的开关变量设计
varaimscommon=false;//
varaimscustom=false;//
varaimsmap=false;//
varaimslayers=false;//
varaimsdhtml=false;//
varaimstracker=false;//
varaimsclick=false;//
varaimsselect=false;//
varaimsidentify=false;//
varaimslegend=false;//
varcall_display;
varcurrent_loc;
varfirst_debug=false;
varalert_display;
//用于以信息列表框方式显示调试信息,其中 dflag为调试开关变量,func_name为被调试
函数名,file_name为被调试函数所在的 js文件名
functiondebugfun(dflag,func_name,file_name){
if(dflag){
//call_display,current_loc,first_debug是上面所定义的全局变量,TopFrame是 HTML叶
面中一框窗名
call_display=call_display+"||"+current_loc+"|"+file_name+":"+func_name+"nr";
if(first_debug){
if(>4000){
(call_display);
call_display="";
first_debug=false;
}
}else{
(call_display);
call_display="";
}
}
//用于以弹出对话框方式显示调试信息,其中 dflag为调试开关变量,func_name为被调试
函数名,file_name为被调试函数所在的 js文件名,alert_str为所要显示的调试信息
functiondebugfun_alert_fun(dflag,func_name,file_name,alert_str){
if(dflag){
//alert_display,current_loc是上面所定义的全局变量,MapFrame是 HTML叶面中一框窗
名
alert_display="||"+_loc+"|"+
file_name+":"+func_name+"nr"+alert_str;
alert(alert_display);
}
}
面的代码片段展示了其它 Javascript函数库中的函数要做相应的修改:
//
//movelayertox,y
//下面这个函数是 中的函数,具有图层位置移动功能
functionmoveLayer(name,x,y){
//用于调试的语句,设置全局变量 current_loc
current_loc=current_loc+":moveLayer";
//用于调试的语句,调用 模块中的调试函数 debugfun
debugfun(aimsdhtml,"moveLayer(name="+name+",x="+x+",y="+y,"");
//以上增加的两句用于调试版,在正式版中可以去掉
varlayer=getLayer(name);
if(isNav4)
(x,y);
//if(){
else{
=x;
=y;
}
//用于调试的语句,恢复全局变量 current_loc的设置,其中 string_rtrim是
中的一个函数
current_loc=string_rtrim(current_loc,":moveLayer");
//以上增加的一句用于调试版,在正式版中可以去掉}
JavaScript的一个最重要的功能是基于对象(Object-Based)功能的支持,这一点使
JavaScript程序的设计更加简单,直观,结构模块化以及代码可复用。但是,JavaScript
是个脚本语言,而不是完整的编程语言,它不支持分类,继承,包装和信息隐藏等面向对象
编程的基本功能。至于对象编程的详细规范在此不做介绍,如有兴趣,可阅读相关文档。
ArcXML在不同部件间通讯。ArcXML文件类似于 HTML页。但区别在于,HTML用于显示,而
ArcXML用来描述内容。如果熟悉 HTML及 XML,手边有一本 ArcXML参考手册或电子文档,使
用起来相当简单,在此不再多言。
JSP或 ASP是服务器端的脚本环境,功能接近,开发者可根据系统需求及个人喜好选择其一,
至于各自的优缺点及使用方法,在此不做介绍。本文所提到的开发系统原型选择了 ASP技术。
四、示范 ArcIMS开发方法的水情监测信息系统原型的目标及需求
(1)系统建设目标
从某省水利厅信息管理工作来看,当前的首要任务是在汛期来临之际,对各重要地区的水情
进行实时监测和有效管理,为相关决策部门提供实时的水情数据,以确保防汛工作科学有效
地展开。
(2)系统需求
该系统需实现的功能如下:
*浏览器端可对相关地图进行放大、缩小、平移、索引图等功能;
*可分图层浏览、显示,并以图上点击、输入监测站名、输入地名、给定范围等多种方式查
询监测站信息;
*图上监测信息可由客户端选择组合标注;
*可进行图形、属性的双向查询;
*可动态显示监测数据的统计曲线图和柱状图;
*对超过警戒水位的监测站点进行自动报警。
五、示范 ArcIMS开发方法的水情监测信息系统原型的技术路线分析与方案配置
考虑到全省水文监测站近三百个且分散分布,采用基于 Browser/Server分布式计算模式的
WebGIS作为应用与开发平台应该是最经济,最合理的。每个水文监测站会定期地将所测数
据通过网络传入水利厅的数据库中,因此对属性数据库的网络存取也是本系统的重点,要做
到属性数据库与空间数据库,静态数据库与实时数据库的完美整合。
采用基于 Browser/Server分布式计算模式的 WebGIS的优点:
1、客户端维护工作量很少;
2、有利于研究区域内分散分布的监测站实时数据的集中收集与处理;
3、操作界面统一且简单,可节省培训成本;
4、系统的扩展与升级集中在服务器端完成,浏览器可以很快地分享到系统升级带来的高效;
5、信息高度共享,提高了相关部门协调工作和相互交流的能力。
ArcIMS是 ESRI新一代的基于 Web的制图和 GIS软件。对于最终用户来说,它提供了一种更
为快速、廉价的方式以获取地理信息。从前面章节的介绍中可以看出,ArcIMS是一个理想
的 WebGIS平台,所以本系统选择它作为水情监测信息的收集与发布平台。
Webserver的性能对于 WebGIS应用很关键,特别在并发访问数非常高的情况下,ArcIMS可
以 支 持 多 种 Web服 务 器 , 考 虑 到 是 一 个 原 型 系 统 , 选 择 了 Microsoft的 IIS
(InternetInformationServer)。
数据库方面,Microsoft的 SQLServer 是一个价格不贵,适合于中型应用的数据库平台,所
以本原型系统选择了它。
ASP(ActiveServerPages)内含于 IIS中,与 IIS运行于同一进程,能更快,更有效地处理
客户请求。ASP提供了更简单,更方便的数据库访问方法,所以,本系统选择了它。
系统配置如下: