zoukankan      html  css  js  c++  java
  • ArcGis Server开发Web GIS新手体验(二)

    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; 204px; height:124px; 

    Z-INDEX:104; border-color:LightSteelBlue; border-3px; border-style:Solid; overflow:hidden;'>
    <table cellspacing=0 cellpadding=0 style = '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接口。呵呵,其实很简单嘛,我们也完全可以自己写一个类,来执行自定义的请求。
      
      又写累了,就到这里吧。

      待续

  • 相关阅读:
    常用的ORM框架与自动化映射工具
    数据持久化
    char、nchar、varchar、nvarchar 的区别
    MS SqlServer还原数据库,出现媒体簇的结构不正确
    根据字段查询所有表名
    java中package指什么
    MybatisGenerator生成的mapper 少了识别主键的方法 byPrimaryKey()
    Sql Server触发器的使用
    WebService生成XML文档时出错。不应是类型XXXX。使用XmlInclude或SoapInclude属性静态指定非已知的类型。
    sqlserver记录去重
  • 原文地址:https://www.cnblogs.com/watsonyin/p/310900.html
Copyright © 2011-2022 走看看