geoserver 开发1
打开项目,会看见下面这些包(其实还有很多插件之类的包,我都删除了)
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”的配置文件的一部分,它构建一个基本的运行环境;
3)FreeMarker是一个模板引擎(官网的定义),用它提供的模板语言,我们可以很容易实现对象模型与输出格式的分离,GeoServer用它来实现某些HTML文本的输出(我觉得GeoServer对FreeMarker的使用还不够充分,我会把所有的文本输出全部交给它来完成)。
五 预演
本文的最后让我们来看看我们将如何深入GeoServer的代码。方法很简单,就是下断点然后跟踪调试。我们知道WMS里面最基本的方法是GetCapabilities,因此我们在wms包里寻找与“GetCapabilities”相关的内容,很快就发现了类org.vfny.geoserver.wms.responses.WMSCapabilitiesResponse,姑且先不管它是什么反正和GetCapabilities有关,在继续查看了它的代码后,确认“execute”函数是关键。我们启动程序,然后在execute里面下断点,如下图:
现在我们在浏览器里敲入这个地址“http://localhost:8080/geoserver/wms?request=getCapabilities”,回车。程序停留在断点处,这时我们重点来看调用栈,如下图:
我们发现,原来调用是Dispatcher的response方法传递来的。打开Dsipatcher类的代码仔细查看,很快(其实花了我半天的时间)理清了它处理请求的过程,用伪代码描述如下:
//解析HTTP请求,创建请求参数
var request = parseRequestParams(requestURL);
//通过SERVICE和VERSION来寻找合适的服务对象
var service = findService(request.SERVICE,request.VERSION);
//创建执行对象
var operation = buildOperation(service,request.REQUEST,request.PARAMS);
//执行操作,返回结果
var result = execute(operation);
//将结果写入返回流
response(result,request,operation);
到此我们可以确定Dispatcher类是处理请求的核心,一切就从这里开始。下一章我们将用同样的流程来分析GeoServer,最终我们会完全弄清楚它的工作原理,并且学会如何对它进行扩展。
转自:http://www.cnblogs.com/sillyemperor/archive/2011/01/05/1926093.html
欢迎大家来我的新家看一看 3wwang个人博客-记录走过的技术之路
geoserver 开发1的更多相关文章
- Oracle spatial、openlayers、geoserver开发地理信息系统总结
感谢开源,使用OpenLayers+Geoserver的地理信息系统开发很简单,完全可以套用开发MIS系统的经验,我这里总结为三个步骤: 1.数据准备 2.数据发布 3.数据展现 我将按照这个思路来介 ...
- geoserver 开发2
先上源码下载 上一章我们介绍了GeoServer源码分析的必要性(这个就见仁见智了)以及诸项准备工作,并且在最后还给出了OWS请求处理流程的伪代码. 这一章我们来看看要注册自己的服务需要做哪些工作.假 ...
- geoserver扫盲 openlayers相关
转自:http://www.cnblogs.com/lzlynn/archive/2008/07/29/1255702.html WMS: Web Map Service(Web地图服务 ) l 利 ...
- [转]Geoserver全面了解
From:http://www.cnblogs.com/ada-zheng/archive/2013/07/16/3192921.html Geoserver是一个功能齐全,遵循OGC开放标准的开源W ...
- Geoserver
Geoserver是一个功能齐全,遵循OGC开放标准的开源WFS-T和WMS服务器.利用Geoserver可以把数据作为maps/images来发布(利用WMS来实现)也可以直接发布实际的数据(利用W ...
- 符合我公司GIS开源解决方案的探讨
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 这一周,我对GIS开源解决方案中涉及到的开源软件以及相关技术 ...
- GeoPackage - 一个简便轻量的本地地理数据库
GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件.与操作系统无关的地理数据库. 当前标准是1.2.1,该版本的html版说明书:https://www.geopackag ...
- 简析GeoServer服务的内部文件组织以及GeoServer自动化服务发布工具的开发思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 通过GeoServer发布的服务,在GeoServer内部有 ...
- GeoServer地图开发解决方案
转自:http://www.cnblogs.com/beniao/archive/2011/01/08/1930822.html GeoServer 是 OpenGIS Web 服务器规范的 J2EE ...
随机推荐
- Servlet、Servlet容器等内容讲解
转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的挺清晰的,转载下 之前在开源中国看到一篇文章& ...
- IPv4检验和计算
IP分组中的检验和仅覆盖首部,而不管数据,首部被划分为16位的段,把所有段相加,结果取反,塞进首部检验和里 在目的主机中,首部划分为16位,相加,结果肯定是16个1,然后取反,结果为0.如下 在目的主 ...
- 温故而知新-mysql的一些语法show,describe,explain,fulltext
1 show show tables; 显示数据库的所有表 show databases; 显示所有数据库 show columns from table; 显示表的所有列 show grants f ...
- centos7.3nginx配置二级域名过程
nginx1.10.2 1先检查 /etc/nginx/nginx.conf 是否include conf.d include /etc/nginx/conf.d/*.conf; 默认都是包含的,如 ...
- VMware vCenter Server 6.5.0 U1g
VMware vCenter Server 6.5.0 U1gName: VMware-VCSA-all-6.5.0-8024368.iso Release Date: 2018-03-20 Buil ...
- HTML5 Canvas ( 图形变换矩阵 ) transform, setTransform
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 基于OpenGL编写一个简易的2D渲染框架-13 使用例子
这是重构渲染器的最后一部分了,将会给出一个 demo,测试模板测试.裁剪测试.半透明排序等等: 上图是本次 demo 的效果图,中间的绿色图形展现的是模板测试. 模板测试 void init(Pass ...
- How to Pronounce the Word ‘TO’
How to Pronounce the Word ‘TO’ Share Tweet Share Tagged With: TO Reduction Study the TO reduction. ...
- SQL Server - 最佳实践 - 参数嗅探问题 转。
文章来自:https://yq.aliyun.com/articles/61767 先说我的问题,最近某个存储过程,暂定名字:sp_a 总是执行超时,sp_a带有一个参数,暂定名为 para1 var ...
- 迷你MVVM框架 avalonjs 1.3.8发布
avalon1.3.8主要是在ms-repeat. ms-each. ms-with等循环绑定上做重大性能优化,其次是对一些绑定了事件的指令添加了roolback,让其CG回收更顺畅. 重构ms-re ...