- 浏览: 7330498 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
http://blog.csdn.net/suen/article/details/4808860
开始正式的分析了,先分析WMS工程。
GeoServer的WMS工程的包如下所示:
org.geoserver.wms |
包含对wms请求进行响应的WebMapService接口、缺省实现DefaultWebMapService、服务配置信息WMSInfo、WMS加载类以及水印等相关类。DefaultWebMapService类将GetMap等操作转发给具体Bean组件去操作,如wmsGetMap。 |
org.geoserver.wms.kvp |
名称-值对(kvp)相关解析类 |
org.geoserver.wms.responses |
对WMS的输出进行加强,如metatile式输出。 |
org.geoserver.wms.responses.decoration |
在WMS输出上添加装饰,如图例、比例尺、水印等。 |
org.geoserver.wms.util |
包含WMS辅助类,现只包含辅助构造WMS请求的WMSRequests类 |
org.geoserver.wms.xml |
现只包含对SLD请求XML进行读取的类SLDXmlRequestReader。 |
org.vfny.geoserver.config |
配置模型,主要的类为WMSConfig。 |
org.vfny.geoserver.global |
保存应用程序信息,里面只有一个类WMS,已被org.geoserver.wms的WMSInfo接口取代。 |
org.vfny.geoserver.sld |
现只包含对SLD异常进行处理的类SldException |
org.vfny.geoserver.sld.requests |
对WMS中SLD请求进行读取的类 |
org.vfny.geoserver.sld.responses |
对WMS中SLD进行响应的类 |
org.vfny.geoserver.wms |
包含WMS一些操作的响应接口,其中最重要的是GetMapProducer接口,各种格式Map的生成都实现这个接口,包括AbstractGetMapProducer, AbstractRasterMapProducer, AtomGeoRSSMapProducer, DefaultRasterMapProducer, GeoTiffMapProducer, GIFMapProducer, JPEGMapProducer, KMLMapProducer, KMZMapProducer, MetatileMapProducer, OpenLayersMapProducer, PNGMapProducer, RSSGeoRSSMapProducer, SvgMapProducerProxy, TiffMapProducer等 |
org.vfny.geoserver.wms.requests |
包含对WMS请求进行读取的类。 |
org.vfny.geoserver.wms.requests.readers |
包含WmsXmlRequestReader类。 |
org.vfny.geoserver.wms.responses |
对WMS进行响应的包,包含各种格式Map的生成类。 |
org.vfny.geoserver.wms.responses.featureInfo |
|
org.vfny.geoserver.wms.responses.helpers |
包含对WMS进行响应的一些工具类,如DescribeLayerTransformer、JAISupport、WMSCapsTransformer。 |
org.vfny.geoserver.wms.responses.legend.gif |
包含GIF格式的图例的生成和转换类 |
org.vfny.geoserver.wms.responses.legend.jai |
包含JAI库支持的格式的图例的生成和转换类 |
org.vfny.geoserver.wms.responses.legend.png |
包含PNG格式的图例的生成和转换类 |
org.vfny.geoserver.wms.responses.legend.raster |
|
org.vfny.geoserver.wms.responses.map.georss |
包含GeoRSS格式的Map的生成和转换类,如AtomGeoRSSMapProducer、RSSGeoRSSMapProducer等 |
org.vfny.geoserver.wms.responses.map.geotiff |
包含GeoTiff格式的Map的生成和转换类GeoTiffMapProducer |
org.vfny.geoserver.wms.responses.map.gif |
包含GIF格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.jpeg |
包含JPEG格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.kml |
包含KML格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.metatile |
包含瓦片形式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.openlayers |
包含Openlayers形式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.pdf |
包含PDF格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.png |
包含PNG格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.svg |
包含SVG格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.tiff |
包含TIFF格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.palette |
包含与颜色盘相关的类 |
org.vfny.geoserver.wms.servlets |
对wms操作进行响应的实际servlet类,包括GetMap、Capabilities、DescribeLayer、GetFeatureInfo、GetLegendGraphic、GetMapLegacy、KMLReflector、WMService等 |
GeoServer的WMS工程的包如下所示:
org.geoserver.wms |
包含对wms请求进行响应的WebMapService接口、缺省实现DefaultWebMapService、服务配置信息WMSInfo、WMS加载类以及水印等相关类。DefaultWebMapService类将GetMap等操作转发给具体Bean组件去操作,如wmsGetMap。 |
org.geoserver.wms.kvp |
名称-值对(kvp)相关解析类 |
org.geoserver.wms.responses |
对WMS的输出进行加强,如metatile式输出。 |
org.geoserver.wms.responses.decoration |
在WMS输出上添加装饰,如图例、比例尺、水印等。 |
org.geoserver.wms.util |
包含WMS辅助类,现只包含辅助构造WMS请求的WMSRequests类 |
org.geoserver.wms.xml |
现只包含对SLD请求XML进行读取的类SLDXmlRequestReader。 |
org.vfny.geoserver.config |
配置模型,主要的类为WMSConfig。 |
org.vfny.geoserver.global |
保存应用程序信息,里面只有一个类WMS,已被org.geoserver.wms的WMSInfo接口取代。 |
org.vfny.geoserver.sld |
现只包含对SLD异常进行处理的类SldException |
org.vfny.geoserver.sld.requests |
对WMS中SLD请求进行读取的类 |
org.vfny.geoserver.sld.responses |
对WMS中SLD进行响应的类 |
org.vfny.geoserver.wms |
包含WMS一些操作的响应接口,其中最重要的是GetMapProducer接口,各种格式Map的生成都实现这个接口,包括AbstractGetMapProducer, AbstractRasterMapProducer, AtomGeoRSSMapProducer, DefaultRasterMapProducer, GeoTiffMapProducer, GIFMapProducer, JPEGMapProducer, KMLMapProducer, KMZMapProducer, MetatileMapProducer, OpenLayersMapProducer, PNGMapProducer, RSSGeoRSSMapProducer, SvgMapProducerProxy, TiffMapProducer等 |
org.vfny.geoserver.wms.requests |
包含对WMS请求进行读取的类。 |
org.vfny.geoserver.wms.requests.readers |
包含WmsXmlRequestReader类。 |
org.vfny.geoserver.wms.responses |
对WMS进行响应的包,包含各种格式Map的生成类。 |
org.vfny.geoserver.wms.responses.featureInfo |
|
org.vfny.geoserver.wms.responses.helpers |
包含对WMS进行响应的一些工具类,如DescribeLayerTransformer、JAISupport、WMSCapsTransformer。 |
org.vfny.geoserver.wms.responses.legend.gif |
包含GIF格式的图例的生成和转换类 |
org.vfny.geoserver.wms.responses.legend.jai |
包含JAI库支持的格式的图例的生成和转换类 |
org.vfny.geoserver.wms.responses.legend.png |
包含PNG格式的图例的生成和转换类 |
org.vfny.geoserver.wms.responses.legend.raster |
|
org.vfny.geoserver.wms.responses.map.georss |
包含GeoRSS格式的Map的生成和转换类,如AtomGeoRSSMapProducer、RSSGeoRSSMapProducer等 |
org.vfny.geoserver.wms.responses.map.geotiff |
包含GeoTiff格式的Map的生成和转换类GeoTiffMapProducer |
org.vfny.geoserver.wms.responses.map.gif |
包含GIF格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.jpeg |
包含JPEG格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.kml |
包含KML格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.metatile |
包含瓦片形式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.openlayers |
包含Openlayers形式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.pdf |
包含PDF格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.png |
包含PNG格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.svg |
包含SVG格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.map.tiff |
包含TIFF格式的Map的生成和转换类 |
org.vfny.geoserver.wms.responses.palette |
包含与颜色盘相关的类 |
org.vfny.geoserver.wms.servlets |
对wms操作进行响应的实际servlet类,包括GetMap、Capabilities、DescribeLayer、GetFeatureInfo、GetLegendGraphic、GetMapLegacy、KMLReflector、WMService等 |
以一个完整的WMS访问过程来分析WMS工程中代码执行的过程。
一、HTTP GET请求
WMS的请求一般使用HTTP Get的形式直接从地址栏输入或者通过JS代码发送到服务器端。请求的格式如下所示:
http://localhost:8080/geoserver /wms?bbox=-74.01199448397661,40.70732689845813,-74.00841053684495,40.71216558957052&styles=&Format=application/openlayers&request=GetMap&version=1.1.1&layers=tiger:poi&width=457&height=550&srs=EPSG:4326,该请求中wms是要请求的服务,version=1.1.1是请求的wms版本,GetMap是请求的服务方法,tiger:poi是要访问的地理数据。
二、HTTP 派发
GeoServer的MVC架构是建立在Spring的Web MVC的基础之上的。Spring Web MVC的核心控制类是org.springframework.web.servlet.DispatcherServlet。HTTP请求一般都先发送给这个Servlet,做一些HTTP请求的通用处理(比如文件上载)后,通过合适的派发机制转发给不同的Spring容器中的Bean,也就是不同业务逻辑、服务处理的控制器(Logic Control),由这些控制器结合不同模型(Model),如空间数据模型、属性数据模型、地图样式模型等,进行处理,形成结果模型,并经 DispatcherServlet返回客户端。
org.springframework.web.servlet.DispatcherServlet相关配置位于GeoServer的Web工程的配置文件web.xml中。
1、Servlet声明
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
2、URL Mapping
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/wms/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/wcs/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/wfs/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/ows/*</url-pattern>
</servlet-mapping>
这说明,对于/wms/*、/wcs/*、/wfs/*、/ows/*等地址的请求,都会调用org.springframework.web.servlet.DispatcherServlet对象来响应。
三、org.springframework.web.servlet.DispatcherServlet派发流程
在Spring框架下,org.springframework.web.servlet.DispatcherServlet基于每个工程的applicationContext.xml的配置,将请求转发给专门的对象处理。其中,根据wms工程的配置,wms除putstyles路径下的请求,都由dispatcher处理。
<!-- http url mapping -->
<bean id="wmsURLMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true"/>
<property name="mappings">
<props>
<prop key="/wms">dispatcher</prop>
<prop key="/wms/putstyles">putStylesWrapper</prop>
<prop key="/wms/*">dispatcher</prop>
</props>
</property>
</bean>
关于dispatcher对象的配置在main工程的applicationContext.xml,处理对象的类是org.geoserver.ows.Dispatcher。
<!-- dispatcher -->
<bean id="dispatcher" class="org.geoserver.ows.Dispatcher">
<!--
See the applicationSecurityContext document. You can safely remove this
if in need for playing with a non secure version of Geoserver
-->
<property name="securityInterceptor">
<ref bean="operationSecurityInterceptor"/>
</property>
</bean>
org.geoserver.ows.Dispatcher继承自spring框架的AbstractController类。它对于HTTP请求的处理是在handleRequestInternal(HttpServletRequest httpRequest, HttpServletResponse httpResponse)中处理。此函数再调用本身的execute(Request req, Operation opDescriptor),先分析出请求的服务(Service)、版本(Version)、操作(Operation),然后根据配置信息与GeoServerExtensions匹配找到服务处理的Bean,wms的配置信息如下所示。
<!-- wms service + descriptor -->
<bean id="wmsService2" class="org.geoserver.wms.DefaultWebMapService">
<constructor-arg ref="wms"/>
</bean>
<alias name="wmsService2" alias="webMapService"/>
<bean id="wmsServiceDescriptor" class="org.geoserver.platform.Service">
<constructor-arg index="0" value="wms"/>
<constructor-arg index="1" ref="wmsService2"/>
<constructor-arg index="2" value="1.1.1"/>
</bean>
此配置信息说明对于服务ID为wms的操作,由org.geoserver.wms.DefaultWebMapService来使用与操作同名的函数来处理。
这样,对于下面的请求:
http://localhost:8080/geoserver /wms?bbox=-74.01199448397661,40.70732689845813,-74.00841053684495,40.71216558957052&styles=&Format=application/openlayers&request=GetMap&version=1.1.1&layers=tiger:poi&width=457&height=550&srs=EPSG:4326
将由org.geoserver.wms.DefaultWebMapService的getMap函数来处理。
四、org.geoserver.wms.DefaultWebMapService的getMap函数处理过程
此函数先根据配置信息得到wmsGetMap对象,所属类是org.vfny.geoserver.wms.servlets.GetMap。
<bean id="wmsGetMap"
class="org.vfny.geoserver.wms.servlets.GetMap"
parent="wmsService">
</bean>
然后执行此对象的getResponse()方法。然后创建一个GetMapResponse对象。
五、写输出
写输出是通过执行org.geoserver.ows.Dispatcher的void response(Object result, Request req, Operation opDescriptor)函数。此函数先循环搜索和排序响应类集合responses(List responses = GeoServerExtensions.extensions(Response.class);),确定响应类response (Response response = (Response) responses.get(0);),再根据输出策略outputStrategy(ServiceStrategy outputStrategy = findOutputStrategy(req.httpResponse);)进行输出。
具体执行在set the mime type时(req.httpResponse.setContentType(response.getMimeType(result, opDescriptor));)调用ResponseAdapter的getMimeType(Object value, Operation operation)函数,此函数再调用delegate.execute(request)来执行(delegate即第四步创建的GetMapResponse对象)。最终的执行在GetMapResponse对象的execute(Request req)函数。
发表评论
-
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3352TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51574文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 14174最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8687TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2709TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2804TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2448TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2778TestNG官方网站: http://testng.or ... -
TestNG简单的学习(五)参数化测试数据的定制
2013-12-02 09:22 2697TestNG官方网站: http://testng.or ... -
TestNG简单的学习(四)测试方法通过名称名称依赖实现
2013-12-02 09:21 2078TestNG官方网站: http://testng.or ... -
TestNG简单的学习(三)测试方法通过测试分组依赖实现
2013-12-02 09:21 2825TestNG官方网站: http://testng.or ... -
TestNG简单的学习(二)参数化测试并发且多方法测试方法判定
2013-11-29 15:35 3694TestNG官方网站: http://testng.or ... -
TestNG简单的学习(一)类和方法级别@Test的区别
2013-11-29 15:31 9420TestNG官方文档的地址: http://testng ... -
Feed4Junit的简单使用(七)Feed4TestNg
2013-11-29 13:35 6128在Feed4Junit主要针对junit实现的 ... -
Feed4Junit的简单使用(六)数据来特定格式文件
2013-11-29 12:29 2763Feed4Junit官方地址: http://da ... -
Feed4Junit的简单使用(五)数据来自动态约束数据
2013-11-29 12:29 2624Feed4Junit官方地址: http://datab ... -
Feed4Junit的简单使用(四)数据来自定义数据源
2013-11-28 14:09 3095Feed4Junit官方地址: http://databe ... -
Feed4Junit的简单使用(三)数据源来自数据库
2013-11-28 13:58 3164Feed4Junit官方地址: http://databe ... -
Feed4Junit的简单使用(二)数据源来自文件
2013-11-28 13:50 4565Feed4Junit官方地址: http://datab ... -
Feed4Junit的简单使用(一)
2013-11-28 13:47 2207Feed4Junit官方地址: http://databe ...
相关推荐
在IT行业中,尤其是在GIS(地理信息系统)领域,WMS(Web Map Service)是一种重要的标准,用于在网络上发布和访问地理信息。本范例“快速打开WMS服务”专注于提高地图性能,特别针对iMobile Android SuperMap GIS...
4. GIS环境搭建完成后,还需要学习GIS相关的数据格式、投影转换、服务发布等知识,才能更好地进行GIS应用开发。 总之,Windows下的GIS环境搭建是一个系统工程,需要耐心和细致。通过以上步骤,你将能够成功建立一个...
GIS(Geographic Information System,地理信息系统)项目开发文档是软件工程领域中的一种特定类型文档,主要涉及地图数据处理、空间分析以及与地理位置相关的应用开发。这些文档为项目的规划、设计、实现、测试和...
GIS项目开发文档是进行地理信息系统(Geographic Information System,简称GIS)开发的重要参考资料,它涵盖了项目的各个阶段,从需求分析到系统设计、实现、测试以及维护。这些文档为开发团队提供了一个清晰的工作...
2. **GIS软件开发**: GIS开发涉及到使用各种编程语言,如Python、Java、C#等,结合GIS库(如GDAL/OGR、ArcPy、QGIS API)进行地图的创建、编辑和分析。熟悉这些工具和库对于构建自定义GIS应用至关重要。 3. **Web ...
SuperMap是一款享誉全球的地理信息系统(GIS)软件,它提供了全面的GIS解决方案,适用于各种行业和领域,包括城市规划、自然资源管理、环境科学、交通工程等。"SuperMap Demo.zip"是SuperMap的演示版本,旨在让用户...
另一方面,"jar包在目录(放入工程jar目录)"提示了GDAL的Java绑定是以JAR文件的形式提供的。这个JAR包包含了Java接口,使得开发者能够在Java项目中调用GDAL的功能。为了使用这个JAR包,需要将其添加到项目的类路径...
此外,演讲还介绍了参会者与演讲者的身份,包括ArcGIS Server Java产品工程师,以及听众中的ArcGIS Server应用程序开发者、新开发者、Java编程经验和网络技术知识等背景。 接下来的部分详细阐述了演讲的主要议程,...
GeoServer是一款开源的GIS(地理信息系统)服务器,它支持OGC(开放地理空间联盟)标准,包括WMS、WFS等服务,使得地理空间数据能够通过网络进行发布和共享。本开发手册系列主要针对中文用户,旨在帮助开发者深入...
MapXtreme是一款由MapInfo公司开发的专业地理信息系统(GIS)软件,主要用于处理地图数据、进行空间分析以及构建地理信息应用。它与MapInfo Professional一起,构成了强大的地图管理和数据分析工具链。在这个...
Geoserver是一款基于Java的开源GIS服务器,它实现了OGC(开放地理空间联盟)的标准,如WMS(Web Map Service)、WFS(Web Feature Service)等,允许用户发布、管理和共享地理空间数据。它支持多种数据格式,如...
8. **空间分析**:学习GIS中的空间分析方法,如缓冲区分析、叠置分析、网络分析等,以便在Web环境中实现对地理数据的复杂计算。 9. **用户界面设计**:考虑用户体验,设计直观易用的地图界面,包括图层控制、查询...
【标题】"geoserver 地图专题图" 涉及...这个项目为学习和实践GIS服务提供了一个实际的案例,对于理解和掌握GIS应用开发具有很高的价值。通过深入理解这些知识点,开发者可以创建出更智能、更具洞察力的地理信息应用。
在2005年的研究中,解吉波、李爱霞和龚健雅三位学者在武汉大学测绘遥感信息工程国家重点实验室进行了基于Web Services的空间数据下载服务的设计与实现。他们的研究提出了一种在桌面GIS组件基础上利用Web Services...