GeoServer源码解析和扩展

GeoServer源码解析和扩展


发布日期: 2015-07-24 更新日期: 2015-07-24 编辑:bukun 浏览次数: 6205

标签:

摘要: 一、准备 (1)下载源码,我使用的是最新稳定版2.0.2; (2)下载工具,JDK,Eclipse,Maven,SVN,这些东东可以去官网下载; (3)跟着说明,产生Eclipse项目(这个过程比较耗时); (4)打开项目,会看见下面这些包(其实还有很多插件之...

一、准备

(1)下载源码,我使用的是最新稳定版2.0.2;

(2)下载工具,JDK,Eclipse,Maven,SVN,这些东东可以去官网下载;

(3)跟着说明,产生Eclipse项目(这个过程比较耗时);

(4)打开项目,会看见下面这些包(其实还有很多插件之类的包,我都删除了)

(5)可以从Eclipse启动GeoServer了。

如果你已经安装了GeoServer,现在也可以打开它的登陆页面进行操作。

二、结构

在深入代码之前,先来熟悉一下代码的结构。所有“web”打头的包暂时可以不关心,注意力集中在“platform”,“main”,“ows”,“wfs”,“wcs”,“wms”这6个包上。简单介绍下它们的关系,下图

展现了包之间的依赖关系,下面的包依赖上面的包,最顶端是“platform”。

“platform”,“ows”和“main”(这3个完全可以合在一起嘛)包含了GeoServer最基础最核心的类和接口,下面介绍一些重要的类和接口,“wfs”,“wcs”,“wms”将利用这些类来完成具体的功能:

(1)platform包的org.geoserver.platform.Service类代表一个具体的服务,例如WMS,它用ID和VERSION来唯一标定,每一个服务都会提供若干操作(Operation);

(2)platform包的org.geoserver.platform.Operation类代表某个服务下可以被请求的操作,例如GetCapabilities,这个类利用Java的反射机制;

(3)ows包的org.geoserver.ows.Dispatcher类处理所有OWS的请求,这个类将是我们调试的重点,我们会在后面的章节详细描述它;

(4)main包的org.geoserver.catalog.Catalog接口包含资源访问的方法,这些资源有“Layer”,“Layer Group”,“Map”,“Namesapce”,“Resource”,“Store”,“Style”和“Workspace”,我们会在后面对这些资源做详细的讲解,了解了它们就知道GeoServer是如何组织和使用数据的了;

(5)main包的org.geoserver.config.GeoServer接口包含访问服务器公共配置信息的方法,我们将会在很多场合看到它;

(6)main包里面还有一些描述资源的接口,例如org.geoserver.catalog.LayerInfo代表“Layer”资源,这些接口我们也会在后面的章节逐一介绍。

三、第三方库

GeoServer使用了近百个第三方软件包(丰富第三方软件包也许是Java最迷人也最迷惑人的地方)。下面我会介绍一些我认为比较重要或者比较有趣的:

(1)GeoTools可以说是Java语言的GIS标准包,它继承了GeoAPI,一个符合OGC简单要素访问协议(Simple Feature Access)的Java包,提供了大量GIS操作,包括多种格式的空间数据源访问,地图渲染,空间几何操作,GeoServer的GIS部分完全使用它来实现;

(2)SpringFramework是一个程序框架(wiki的解释),GeoServer用它来构建运行时环境,我们会在“main”,“wcs”,“wfs”和“wms”下面看到这样一个文件“applicationContext.xml”,这个文件告诉spring框架需要创建哪些类实例,以及如何创建。下面来看个典型配置:

这是“main”的配置文件的一部分,它构建一个基本的运行环境;

(4)FreeMarker是一个模板引擎(官网的定义),用它提供的模板语言,我们可以很容易实现对象模型与输出格式的分离,GeoServer用它来实现某些HTML文本的输出(我觉得GeoServer对FreeMarker的使用还不够充分,我会把所有的文本输出全部交给它来完成)。

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org