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&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新手体验(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java获取method,2.5 反射—
- 下一篇: 老旗舰华为能用上鸿蒙吗,华为完全开放鸿蒙