分享
 
 
 

关于JSP发布地图服务

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

<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较多,相关方法也不清楚,也许是清楚方法不能写程序,现在非常郁闷.还请大家特别是师兄们给我指点迷津.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有