關於JSP發布地圖服務

來源:互聯網
上載者:User
js <b>關於JSP發布地圖服務</b>
首先介紹下用於發布地圖服務的ArsIMS
ArsIMS是一個由Presentation層,Business Logic層,data層組成的多層架構,另外,它還有一個用於管理地圖網頁發布的應用程式集.
(1)presentation 層是ArcIMS的用戶端,可以獲得,瀏覽和分析地理資料(geographic data)
(2)business logic 層的組件用於請求處理和ArcIMS的網頁管理
(3)data 層包含了所有ArcIMS可用的資料來源
(4)應用程式集 為business logic層Authoring, Designing,Adminisering ArcIMS Service 提供入口

business logic 層是整個ArcIMS的核心,是負責用戶端和資料來源互動的中間過程,包括服務啟動和處理請求(request)和反應(response).
一個請求處理的過程是:
當一個包含地理資料分析的請求從用戶端到達WebServer(Tomcat,IIS等)時,WebServer需要將請求傳送給ArcIMS Application Server,它是一個後台執行的程式,傳遞請求到ArcIMS Spatial Server,並列出ArcIMS Spatial Server正在啟動並執行服務.後者處理請求,返回一個Response,這個Response逆序傳到用戶端,由用戶端解析
(parse)並呈現.
這個過程中由於WebServer從用戶端獲得的請求可能是多種語言形式的,而ArcIMS Application Server和ArcIMS Spatial Server之間的互動是通過ArcXML(an implementation of XML used with ArcIMS)來進行的.所以在WebServer和ArcIMS Application Server之間需要有一個connector作為ArcXML的翻譯器,ArcIMS內建了四種可選的connector:
ArcIMS Servlet Connector ArcIMS預設的connector,HTML, Java Custom, and Java Standard 視圖均可.ArcIMS內建的ArcExplorer, ArcMap, 和ArcPad也用這個connector.
ArcIMS ColdFusion Connector 不懂
ArcIMS ActiveX Connector 支援ASP
ArcIMS Java Connector 支援JSP

採用什麼connector這裡面除了有個選擇的開發語言外,還有效能的問題(即Client Side versus Server Side Processing).
選用ArcIMS Servlet Connector,是Client Side Processing,應該就是所謂的"胖客戶"吧,用戶端產生直接ArcXML形式的請求,connector沒有任何解析作用,只是傳遞ArcXML請求和回應,用戶端需要解析ArcXML回應以呈現地圖.
選用Java Connector,是所謂的"瘦客戶",ArcXML的所有處理,包括請求和回應,都是在伺服器端完成的.Jsp傳遞一個請求,WebServer先接受這個請求,Java Connector將這個請求翻譯為ArcXML,然後傳交給Application Server和ArcIMS Spatial Server.當ArcIMS Spatial Server產生回應,原路返回到 Java Connector時,Java Connector又將這個ArcXML形式的回應翻譯為JSP的回應,再通過WebServer傳給用戶端,並動態更新JSP.

很明顯使用Java Conector用戶端的速度會快很多,因為地圖的向量資料比較大,所有的請求和回應都在用戶端進行將影響效能.



下文討論用JSP發布地圖網頁的兩種形式.
使用Java架構來發布ArcIMS,需要有JavaVM,WebServer和Servlet引擎.在我的電腦上,使用的是java1.4sdk,Tomcat,Java Connector.
由於我自己對Servlet瞭解不深,說一點自己的見解,以期拋磚引玉.
<b>Servlet是嵌入在WebServer中的,通過一組servlet API使JavaVM和WebServer串連起來,以完成對JSP等包含JAVA語言的請求的處理.</b>所以這裡的JavaVM不能使用JRE(Java Runtime Enviroment),因為它只運行java的class檔案,不進行編譯,而需要JDK(Java Developing Kit).
ArcIMS中內建了Java Connector,它是以.jar形式存在的,使用時應將它放在WEB-INF下的lib檔案下.

Java Connector內建了一組JavaBean和一個JSP Tag 庫.兩者總的功能都是將JSP的請求轉化成ArcXML.
這些Javabean是編寫獨立和可重用的組件成為可能.它們都有一系列良好封裝的Set, Get方法,我們可以利用這些JavaBean和它們的方法來實現地圖的各種顯示功能,描畫地圖符號(點,線等),增加動態圖層,查詢相關資料,管理和鑒別服務等,我的理解是ArcGIS等地理繪圖軟體可以做到的功能,在這些JavaBean中均可找到相應的方法.這些JavaBean構成了ArcIMS Java Connector Object Model.
JSP Tag 庫是建立在ArcIMS Java Connector Object Model上的JSP 標記的集合.這些標記提供了Object Model的介面.我們可以認為這個標記是JavaConnector中的Connector.因為它串連了JSP和JavaBean.用這種標記語言 Tag的寫的JSP請求由JSP Tag 庫轉化成JavaBean能夠識別的對象,這些JavaBean再將請求轉化成ArcXML.
JSP Tag 庫包含標記(Tag)的名稱,屬性,以及嵌套的標記(Tag).
下面給出一個使用JSP Tag 庫的JSP例子,能夠用JSP發布一幅地圖有放大功能.

example.jsp
<%@page contentType="text/html"%>
<%@taglib uri="arcims_taglib.tld" prefix="aims" %>
<%
String theMapAction = request.getParameter("mapaction");
String x = request.getParameter("map.x");
String y = request.getParameter("map.y");

String mapMaxX =null;
String mapMaxY =null;
String mapMinX =null;
String mapMinY =null;

if (request.getParameter("maxx") != null) {
if (!request.getParameter("maxx").equalsIgnoreCase("")) {
mapMaxX = request.getParameter("maxx");
mapMaxY = request.getParameter("maxy");
mapMinX = request.getParameter("minx");
mapMinY = request.getParameter("miny");
}
}
%>

<aims:tcpConnection id="myConnection" host="localhost" port="5300" debug="true"/>
<aims:mapService id="myMapService" connectionId="<%=myConnection%>" name="NetUniversity" loadEnvelope="false" loadExtensions="false" loadRecordset="false" loadRenderer="false"/>
<aims:map id="myMap" serviceId="<%=myMapService%>" width="500" height="350" envelope="myEnvelope" >
<%
if (request.getParameter("maxx") != null) {
if (!request.getParameter("maxx").equalsIgnoreCase("")) { %>
<aims:envelope minx="<%=mapMinX%>" miny="<%=mapMinY%>" maxx=">%=mapMaxX%<" maxy="<%=mapMaxY%>" />
<%
}
}

if(theMapAction != null){
if(theMapAction.equals("zoomin")){
%>
<aims:zoom factor="2" x="<%=x%>" y="<%=y%>" />
<%
}
}
%>
</aims:map>

<html><head><title>Simple Zoom In</title></head><body>
<p align="center">
<form action="example.jsp" method="post">
<table border="1" cellpadding="5" width="500" align="center">
<tr><td align="center">
<input type="image" name="map" src="<%=myMap%>">
</td></tr>
</table>
<input type="hidden" name="mapaction" value="zoomin" >
<input type="hidden" name="maxx" value="<%=myEnvelope.getMaxX()%>">
<input type="hidden" name="maxy" value="<%=myEnvelope.getMaxY()%>">
<input type="hidden" name="minx" value="<%=myEnvelope.getMinX()%>">
<input type="hidden" name="miny" value="<%=myEnvelope.getMinY()%>">
</form>
</p>
</body>
</html>


用JSP發布地圖優勢是明顯的,串連Oacle資料庫只需寫一個資料庫連接的JavaBean就可以實現,也可以讀取地圖上Symbol的資訊作為查詢條件,想象的前景是美好的.

暫時先寫到這裡,由於庫中JavaBean較多,相關方法也不清楚,也許是清楚方法不能寫程式,現在非常鬱悶.還請大家特別是師兄們給我指點迷津.




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.