gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:1237回复:1

关于JSP发布地图服务

楼主#
更多 发布于:2006-01-07 10:53
首先介绍下用于发布地图服务的ArsIMS <BR>ArsIMS是一个由Presentation层,Business Logic层,data层组成的多层架构,另外,它还有一个用于管理地图网页发布的应用程序集. <BR>(1)presentation 层是ArcIMS的客户端,可以获得,浏览和分析地理数据(geographic data) <BR>(2)business logic 层的组件用于请求处理和ArcIMS的网页管理 <BR>(3)data 层包含了所有ArcIMS可用的数据源 <BR>(4)应用程序集 为business logic层Authoring, Designing,Adminisering ArcIMS Service 提供入口 <BR><BR>business logic 层是整个ArcIMS的核心,是负责客户端和数据源交互的中间过程,包括服务启动和处理请求(request)和反应(response). <BR>一个请求处理的过程是: <BR>当一个包含地理数据分析的请求从客户端到达WebServer(Tomcat,IIS等)时,WebServer需要将请求传送给ArcIMS Application Server,它是一个后台执行的程序,传递请求到ArcIMS Spatial Server,并列出ArcIMS Spatial Server正在运行的服务.后者处理请求,返回一个Response,这个Response逆序传到客户端,由客户端解析 <BR>(parse)并呈现. <BR>这个过程中由于WebServer从客户端获得的请求可能是多种语言形式的,而ArcIMS Application Server和ArcIMS Spatial Server之间的交互是通过ArcXML(an implementation of XML used with ArcIMS)来进行的.所以在WebServer和ArcIMS Application Server之间需要有一个connector作为ArcXML的翻译器,ArcIMS自带了四种可选的connector: <BR>ArcIMS Servlet Connector ArcIMS默认的connector,HTML, Java Custom, and Java Standard 视图均可.ArcIMS自带的ArcExplorer, ArcMap, 和ArcPad也用这个connector. <BR>ArcIMS ColdFusion Connector 不懂 <BR>ArcIMS ActiveX Connector 支持ASP <BR>ArcIMS Java Connector 支持JSP <BR><BR>采用什么connector这里面除了有个选择的开发语言外,还有性能的问题(即Client Side versus Server Side Processing). <BR>选用ArcIMS Servlet Connector,是Client Side Processing,应该就是所谓的"胖客户"吧,客户端产生直接ArcXML形式的请求,connector没有任何解析作用,只是传递ArcXML请求和回应,客户端需要解析ArcXML回应以呈现地图. <BR>选用Java Connector,是所谓的"瘦客户",ArcXML的所有处理,包括请求和回应,都是在服务器端完成的.Jsp传递一个请求,WebServer先接受这个请求,Java Connector将这个请求翻译为ArcXML,然后传交给Application Server和ArcIMS Spatial Server.当ArcIMS Spatial Server产生回应,原路返回到 Java Connector时,Java Connector又将这个ArcXML形式的回应翻译为JSP的回应,再通过WebServer传给客户端,并动态更新JSP. <BR><BR>很明显使用Java Conector客户端的速度会快很多,因为地图的矢量数据比较大,所有的请求和回应都在客户端进行将影响性能. <BR><BR><BR><BR>下文讨论用JSP发布地图网页的两种形式. <BR>使用Java框架来发布ArcIMS,需要有JavaVM,WebServer和Servlet引擎.在我的电脑上,使用的是java1.4sdk,Tomcat,Java Connector. <BR>由于我自己对Servlet了解不深,说一点自己的见解,以期抛砖引玉. <BR><b>Servlet是嵌入在WebServer中的,通过一组servlet API使JavaVM和WebServer连接起来,以完成对JSP等包含JAVA语言的请求的处理.</b>所以这里的JavaVM不能使用JRE(Java Runtime Enviroment),因为它只运行java的class文件,不进行编译,而需要JDK(Java Developing Kit). <BR>ArcIMS中自带了Java Connector,它是以.jar形式存在的,使用时应将它放在WEB-INF下的lib文件下. <BR><BR>Java Connector自带了一组JavaBean和一个JSP Tag 库.两者总的功能都是将JSP的请求转化成ArcXML. <BR>这些Javabean是编写独立和可重用的组件成为可能.它们都有一系列良好封装的Set, Get方法,我们可以利用这些JavaBean和它们的方法来实现地图的各种显示功能,描画地图符号(点,线等),增加动态图层,查询相关数据,管理和鉴别服务等,我的理解是ArcGIS等地理绘图软件可以做到的功能,在这些JavaBean中均可找到相应的方法.这些JavaBean构成了ArcIMS Java Connector Object Model. <BR>JSP Tag 库是建立在ArcIMS Java Connector Object Model上的JSP 标记的集合.这些标记提供了Object Model的接口.我们可以认为这个标记是JavaConnector中的Connector.因为它连接了JSP和JavaBean.用这种标记语言 Tag的写的JSP请求由JSP Tag 库转化成JavaBean能够识别的对象,这些JavaBean再将请求转化成ArcXML. <BR>JSP Tag 库包含标记(Tag)的名称,属性,以及嵌套的标记(Tag). <BR>下面给出一个使用JSP Tag 库的JSP例子,能够用JSP发布一幅地图有放大功能. <BR><BR>example.jsp <BR><%@page contentType="text/html"%> <BR><%@taglib uri="arcims_taglib.tld" prefix="aims" %> <BR><% <BR>String theMapAction = request.getParameter("mapaction"); <BR>String x = request.getParameter("map.x"); <BR>String y = request.getParameter("map.y"); <BR><BR>String mapMaxX =null; <BR>String mapMaxY =null; <BR>String mapMinX =null; <BR>String mapMinY =null; <BR><BR>if (request.getParameter("maxx") != null) { <BR>if (!request.getParameter("maxx").equalsIgnoreCase("")) { <BR>mapMaxX = request.getParameter("maxx"); <BR>mapMaxY = request.getParameter("maxy"); <BR>mapMinX = request.getParameter("minx"); <BR>mapMinY = request.getParameter("miny"); <BR>} <BR>} <BR>%> <BR><BR><aims:tcpConnection id="myConnection" host="localhost" port="5300" debug="true"/> <BR><aims:mapService id="myMapService" connectionId="<%=myConnection%>" name="NetUniversity" loadEnvelope="false" loadExtensions="false" loadRecordset="false" loadRenderer="false"/> <BR><aims:map id="myMap" serviceId="<%=myMapService%>" width="500" height="350" envelope="myEnvelope" > <BR><% <BR>if (request.getParameter("maxx") != null) { <BR>if (!request.getParameter("maxx").equalsIgnoreCase("")) { %> <BR><aims:envelope minx="<%=mapMinX%>" miny="<%=mapMinY%>" maxx=">%=mapMaxX%<" maxy="<%=mapMaxY%>" /> <BR><% <BR>} <BR>} <BR><BR>if(theMapAction != null){ <BR>if(theMapAction.equals("zoomin")){ <BR>%> <BR><aims:zoom factor="2" x="<%=x%>" y="<%=y%>" /> <BR><% <BR>} <BR>} <BR>%> <BR></aims:map> <BR><BR><html><head><title>Simple Zoom In</title></head><body> <BR><p align="center"> <BR><form action="example.jsp" method="post"> <BR><table border="1" cellpadding="5" width="500" align="center"> <BR><tr><td align="center"> <BR><input type="image" name="map" src="<%=myMap%>"> <BR></td></tr> <BR></table> <BR><input type="hidden" name="mapaction" value="zoomin" > <BR><input type="hidden" name="maxx" value="<%=myEnvelope.getMaxX()%>"> <BR><input type="hidden" name="maxy" value="<%=myEnvelope.getMaxY()%>"> <BR><input type="hidden" name="minx" value="<%=myEnvelope.getMinX()%>"> <BR><input type="hidden" name="miny" value="<%=myEnvelope.getMinY()%>"> <BR></form> <BR></p> <BR></body> <BR></html> <BR><BR><BR>用JSP发布地图优势是明显的,连接Oacle数据库只需写一个数据库连接的JavaBean就可以实现,也可以读取地图上Symbol的信息作为查询条件,想象的前景是美好的. <BR><BR><BR>
喜欢0 评分0
liu76xt
论坛版主
论坛版主
  • 注册日期2004-05-26
  • 发帖数262
  • QQ
  • 铜币499枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-01-08 16:12
<P><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em06.gif" /><img src="images/post/smile/dvbbs/em06.gif" /></P>
| ------------- | 白云悠悠矶头月涌千骏过, 往事渺渺江上风情一燕来。 | ------------- | [img]http://www.gisempire.com/bbs/showimg.asp?BoardID=3&filename=2004-9/200491972356282.gif[/img]
举报 回复(0) 喜欢(0)     评分
游客

返回顶部