ArcGis Server开发Web GIS新手体验(二)

接(一)

  我们知道,.net adf提供的map组件、toc组件等都是标准的asp.net组件。这些组件在运行时,会生成相应的html代码,将自己展现出来。一般还会通过ViewState来保存状态,并生成_doPostBack(javascript)函数,在必要的时候,通过javascript来调用该函数,将客户端数据返回来服务器端,从而激发服务器的响应。总之,我们通过分析生成的html页面,应该可以大致窥见asp.net组件是怎么运行的。
  好,我们现在按F5运行首页,然后在浏览器中查看网页的源代码,赶快看下一吧:
  
  1、首先会看到ID,MapIdClick,start等javascript函数,这些函数是模板为我们生成的,在default.aspx文件中定义的。ID函数中有两行:
 var iddiv = document.getElementById("MapDiv_Map1");
 if (iddiv!=null) iddiv.onmousedown = MapIdClick;

  可以看到,这几个函数的作用是对地图的Identify(点击查询)作出处理。
  为什么要放在这里呢,为什么单单只有点击查询的javascript要在这里定义呢,其它如放大、缩小、平移为什么不在这里处理?这是因为Toolbar组件对放大、缩小、平移等提供了默认的处理方式,而identify没有,这样可以更方便进行扩展。在后面的代码中有一行<esri:Tool ToolTip="Identify" DefaultImage="Images/identify.gif" ClientToolAction="ID()" Name="Identify"...>,可以看到,这个调用是模板为我们生成的(并且这个调用是可以修改的)。待会我们在进一步分析中可以看到这一点。

  2、再向下,是几个隐藏域,其中包含__VIEWSTATE隐藏域,还有__doPostBack函数,这些是asp.net组件生成的,作用是向服务器提交数据,从而与服务器进行交互。
 
  3、往下我们看到了一些引入js脚本文件的代码:
  <script language="Javascript" src="/aspnet_client/esri_arcgis_server_webcontrols/9_1/JavaScript/common.js"></script>
  <script language="Javascript" src="/aspnet_client/esri_arcgis_server_webcontrols/9_1/JavaScript/map_functions.js"></script>
  <script language="Javascript" src="/aspnet_client/esri_arcgis_server_webcontrols/9_1/JavaScript/overview_functions.js"></script>
  <script language="Javascript" src="/aspnet_client/esri_arcgis_server_webcontrols/9_1/JavaScript/toolbar_functions.js"></script>
  可以看到,共引入了四个js脚本文件,这些文件的地址也比较奇怪,不是与当前网站在同一个虚拟目录下,而是在http://localhost//aspnet_client/esri_arcgis_server_webcontrols/9_1/JavaScript目录下。在c:/inetpub/webroot/aspnet_client/esri_arcgis_server_webcontrols/9_1/JavaScript/文件夹下可以找到这些文件。原来,为了重用的方便,在安装Arcgis Server时,安装程序就已经建立了一个虚拟目录,用于提供这些共享的资源。在这个文件夹上一级目录中,还可以看到images和treeimages两个子目录,以及treeview.htc文件。
  知道了这些javascript文件的藏身之所,各位可以把这些javascript文件逐个看一遍,可以发现其作用主要是与浏览器进行交互。

 4、再往下,是TOC组件的Html代码,代码片断如下:
  <tvns:treenode Expanded="False" DefaultStyle="color:silver;" ImageUrl="/aspnet_client/esri_arcgis_server_webcontrols/9_1/images/outscale.gif" CheckBox="False">
   道路注记<tvns:treenode Expanded="True" ImageUrl="ESRI.Web.Controls.MIMEImage.aspx?ImgID=Default.aspx_Toc1_0_1_0_0&amp;NoCache=true"></tvns:treenode>
  这一段代码有一个特别之处就是ImageUrl="ESRI.Web.Controls.MIMEImage.aspx...",这个ESRI.Web.Controls.MIMEImage.aspx是什么东东,是一个网页吗?在机器里找一下,发现根本就不存在这个网页,那它又是何方神圣,竟然可以作为一个图片的地址?我们先往下看看。

 5、<div id='OverviewMap1backdrop' style = 'position: absolute; left: 16px; top: 400px; width:204px; height:124px;

Z-INDEX:104; border-color:LightSteelBlue; border-width:3px; border-style:Solid; overflow:hidden;'>
<table cellspacing=0 cellpadding=0 style = 'width:198px; height:118px; overflow:hidden;'><tr><td id=OVCell_OverviewMap1></td></tr></table>
</div>
  是鹰眼导航图的代码。怎么只有一个空的Div层和一个空的表格呢?唉,比较简单,我懒得分析了,同志们自己去找吧~

 6、再往下是Toolbar组件的代码,没什么特别的:
<td nowrap width="29" height ="32" align='Center'
  id="Toolbar1ZoomIn"
  onMouseDown="ToolbarMouseDown( 'Toolbar1', 'ZoomIn', 'Tool', event);"
  onMouseOver="ToolbarMouseOver('Toolbar1', 'ZoomIn');"
  onMouseOut="ToolbarMouseOut( 'Toolbar1', 'ZoomIn');"
  style="background-color:LightSteelBlue;font-family:Arial;font-size:Smaller;font-weight:bold;"
  ><img id="Toolbar1ZoomInImage" alt="Zoom In" src="Images/zoominD.gif"  align="absMiddle"></td>

 7、再下面是生成地图组件的代码:
<script language="JavaScript" id="cs_dynamic_Map1">
Maps[mapCounter] = new MapCreation('Map1',0,mapCounter,0,0,502,378,'MapDiv_Map1','Black',2);
mapURL[mapCounter] = "ESRI.Web.Controls.MIMEImage.aspx?ImgID=Default.aspx-Map1&ct=5";
MakeMapDiv(mapCounter, 'Map1','ESRI.Web.Controls.MIMEImage.aspx?ImgID=Default.aspx-Map1&ct=5', 'MapCell_Map1','');
mapCounter++;
MapDragRectangle('Map1','ZoomIn', true);
</script>
  又看到了MIMEImage这个东东!它究竟是什么东东呢?
  如果对asp.net不是很熟悉的话,要破解这个秘密可能确实比较困难。
  在asp.net中,所有的请求,都是通过httpHandler来进行处理的。那httphandler又是什么东东呢?其实只要实现在IHttpHandler接口的类,都可以作为一个HttpHandler。在web.config或machine.config文件中,可以定义哪些请求可以由哪个httphandler来处理。查看一下web.config文件,没有这些声明。那就看一下mapchine.config文件吧,这个文件在WINDOWS\Microsoft.NET\Framework\v1.1.4322目录下,用记事本打开它,查找ESRI.Web.Controls.MIMEImage.aspx,好家伙,果然在这里啊!
  <httpHandlers>
  <add verb="*" path="ESRI.Web.Controls.MIMEImage.aspx" type="ESRI.ArcGIS.Server.WebControls.ImageHandler, ESRI.ArcGIS.Server.WebControls, Version=9.1.0.722, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86"/>
  原来ESRI.Web.Controls.MIMEImage.aspx请求是能过ESRI.ArcGIS.Server.WebControls.ImageHandler来处理的。在Visual Studio中,使用对像浏览器查看一下esri.arcgis.server.webcontrols.dll文件,可以看到ImageHandler类,果然实现了IHttpHandler接口。呵呵,其实很简单嘛,我们也完全可以自己写一个类,来执行自定义的请求。
  
  又写累了,就到这里吧。

  待续

ArcGis Server开发Web GIS新手体验(二)相关推荐

  1. ArcGIS Maritime Server 开发教程(九)二三维水深服务

    ArcGIS Maritime Server 开发教程(九)二三维水深服务 本章导读:ArcGIS 软件体系是使用 ArcGIS Bathymetry 桌面扩展构建和管理水深数据库,并且利用 Imag ...

  2. 管理员需要对此项目进行安全扫描_当ArcGIS Server与Web安全擦出火花??

    在WebGIS的项目开发过程中,前端项目的安全隐患也经常出现在GIS系统中,如常见的WEB安全问题,如XSS.XSRF.SQL注入等时刻都影响GIS系统安全,要保证GIS系统的安全,从某种程度上就必须 ...

  3. ArcGIS Server .Net Web ADF体系结构

    ArcGIS Server .Net Web ADF体系结构 ArcGIS Server .net来创建应用有三个层次, 1 使用manager来创建一个web应用 2 使用 .net模板来创建应用 ...

  4. 用mapXtreme Java开发web gis应用 (上)

    1.开发控件的选择目前影响较大的国外地理服务器有Mapinfo MapXtreme.MapObject.Autodesk Map Guide.ArcIMS.Argcgisserver以及国内的Supe ...

  5. ArcGIS Server 开发系列(一)--编程框架总览

    ArcGIS Server是一个发布企业级GIS应用程序的综合平台,如果想对ArcGIS Server基础有更多的了解,可以先看看<ArcGIS Server 体系结构>.ESRI(中国) ...

  6. [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端(续)

    前言 本篇是承接上一篇: [Axis2与Eclipse整合开发Web Service系列之二] Top-Down方式,通过WSDL逆向生成服务端 在上一篇粗略地介绍了如何使用Top-Down的方式创建 ...

  7. Arcgis Server开发使用query报错

    问题描述:arcgis server js开发,query task不能正确结束,在arcgis service directory相应图层进行query 1=1查询报错,报错内容为 Error:   ...

  8. ArcGIS Server开发教程系列(3)切片

    切片工作,我们可以一级一级的切,也可以,所有的一块切,Recreate All Tiles这项是说,在没有进行任何的切片工作时,可以选用这项:Recreate Empty Tiles这项是说,如果之前 ...

  9. ArcGIS Server开发的一些小经验

    版本:ArcGIS Server ADF 9.2 for .NET          SQLServer 2005          ArcSDE 9.2          Windows XP SP ...

最新文章

  1. 用java实现一个计算器程序_1.2第一个java程序——hello world
  2. 十点总结,为何 Linux 如此深得人心
  3. 漫步凸分析六——凸集的相对内点
  4. 带着canvas去流浪系列之一:绘制柱状图
  5. 使用ASP.NET AJAX Control Toolkit中的NoBot控件拒绝垃圾发布程序 【转载】
  6. “相约重渡沟 情定鸡冠洞”消夏养生欢乐行活动
  7. Linux 集群搭建
  8. Java及J2EE Web核心开发技术
  9. 一个从培训机构出来的程序员
  10. 记录下docker命令
  11. android桌面隐藏功能,如何开启 安卓10 隐藏的桌面模式并或者显示器拓展支持
  12. 面向切面编程--加缓存
  13. vm虚拟机分配处理器_虚拟机处理器核数与物理cpu的关系
  14. 分享120个HTML公司企业模板,总有一款适合您
  15. 用Python做三角形的面积
  16. MySQL主从同步的原理
  17. QT调用opencv的videowrite类输出生成视频打不开(已解决)
  18. Winndowns 2008 mail邮件服务
  19. 用视频快速了解XDOC
  20. 信息安全技术 关键信息基础设施安全保护要求 2022版附下载地址

热门文章

  1. 如何开启Apache Rewrite功能
  2. pt-online-schema-change 修改主键导致数据删除失败的问题调查
  3. Launchy – 快速调出你的程序
  4. GConf error:Failed to contact configuration server
  5. PHP获取访问用户IP
  6. 不经意传输(oblivious transfer)
  7. 推荐算法为啥这么“灵”,又为啥会“失灵”?
  8. “左手5G右手AI”,任正非推崇的王喜文在华为这样说
  9. FreeModbus移植到STM32F107(以太网传输方式)
  10. FreeModbus输入寄存器