GeoServer开发手册系列.doc

上传人:sk****8 文档编号:4217266 上传时间:2019-10-05 格式:DOC 页数:66 大小:1.06MB
下载 相关 举报
GeoServer开发手册系列.doc_第1页
第1页 / 共66页
GeoServer开发手册系列.doc_第2页
第2页 / 共66页
GeoServer开发手册系列.doc_第3页
第3页 / 共66页
GeoServer开发手册系列.doc_第4页
第4页 / 共66页
GeoServer开发手册系列.doc_第5页
第5页 / 共66页
点击查看更多>>
资源描述

1、目 录 写在前面 3 一 介绍 4 二 工具 4 Java.4 Maven .4 Subversion 4 三 源代码 4 源代码 5 提交 5 库结构 5 分支结构 6 快速入门 6 取出源代码 7 由 Maven 构建 .7 由 Maven 生成 Eclipse 工程文件 9 导入模块进 Eclipse.9 在 Eclipse 中运行 GeoServer.12 访问 GeoServer 首页 13 Maven 指南 .13 安装 Maven 13 运行 Maven 13 构建 13 跳过测试 14 离线构建 14 构建扩展 14 Profiles .15 Eclipse15 构建 Web

2、模块 .15 使用 Jetty 运行 web 模块 .16 Eclipse 指南 16 导入模块 17 运行和调试 17 设置数据目录 17 更改 Jetty 默认端口 .18 配置 Jetty 的 JNDI 资源 19 Eclipse 首选项 .20 代码格式化 21 代码模板 22 文本编辑器 22 编译器 23 OWS 服务 .24 OWS 服务概览 .24 实现一个简单的 OWS 服务 24 建立 25 创建插件 27 试一试 30 REST 服务 .34 简介 34 RESTful 服务实现 35 基于 Maps 的 Restful 服务实现 .43 基于反射的 Restful 服务

3、实现 49 GeoServer 中的 Wicket 开发 .55 Web 用户接口 .61 简介 61 实现一个 Wicket UI 扩展 63 写在前面 一 介绍 二 工具 Java Maven Subversion 三 源代码 源代码 提交 库结构 分支结构 四 快速入门 取出源代码 由 Maven 构建 由 Maven 生成 Eclipse 工程文件 导入模块进 Eclipse 在 Eclipse 中运行 GeoServer 访问 GeoServer 首页 五 Maven 指南 六 Eclipse 指南 七 编程指南 八 释放指南 九 释放测试检查列表 十 CITE 测试指南 十一 政策

4、与步骤 写在前面 我一直对 OSGeo 的软件和应用很感兴趣,希望致力于这些软件在中国的普及与应用, GeoServer 开发手册是这些工作的一部分。在近几年开源 Web Map/GIS 实践应用中, GeoServer 的热度一直稳中有升。下图是 Google 趋势就 GeoServer、MapServer 的分析图 表。 图 1 GeoServer、MapServer 趋势分析 尤其有意思的是,在 GeoServer 的使用国家分布来看,以德国居多,其次就是中国 (见图 2)。可见,在中国或者说中文环境下,使用开源地理信息服务器 GeoServer 比较 多。我个人也比较喜欢 GeoSer

5、ver,因为我觉得它的配置、使用比起 MapServer 方便,至 少不需要去编辑某些文件。 图 2 GeoServer 搜索量前 5 名国家(见 Google 趋势) 此次翻译以 2.0.2 版本为原型,对于翻译中出现不正确的地方,希望大家不吝赐教, 与我交流。 一 介绍 空。 二 工具 在 GeoServer 开发者环境搭建以前,需要安装以下工具: Java GeoServer 开发需要 JDK1.5 及其以上版本,可从 Sun Microsystems 获取。 注:除了可以使用 Sun 提供的 JDK 以外,也可以使用其它的,但这里我们推荐使用 Sun 的。 Maven Geoserve

6、r 使用 Maven 工具构建。当前推荐版本是 2.1.0,可从 Apache 获取。虽然 2.1.0 是推荐的,但 2.0.8 以上版本同样可用。 Subversion Geoserver 源代码由 subversion 库完成存储和版本管理。对于不同平台有多种 subversion 客户端可获取。更多细节请访问: http:/subversion.tigris.org/getting.html 。 三 源代码 源代码 GeoServer 源代码存放在: http:/svn.codehaus.org/geoserver。 使用以下方式取出开发版/trunk 版本 svn co http:/s

7、vn.codehaus.org/geoserver/trunk geoserver 使用以下方式取出稳定版/stable 版本: svn co http:/svn.codehaus.org/geoserver/branches/1.7.x geoserver 警告:Geoserver 库包含大量空间数据。从上取出这些数据对于低带宽用户来说相对就很 慢或者很昂贵,这种情况下,用户可以通过以下方式仅获取源代码: svn co http:/svn.codehaus.org/geoserver/trunk/src 提交 通过以下步骤提交到代码库: 1. 安装 subversion 配置 文件,请看后面

8、备注。 2. 注册获取提交权限。 3. 将库切换到 ”https”协议,例如: root of checkout% svn switch https:/svn.codehaus.org/geoserver/trunk 库结构 http:/svn.codehaus.org/geoserver/ branches/ spike/ tags/ trunk/ branches 包含以前所有稳定的开发分支,1.6.x,1.7.x,etc spike 包含实验版本和原型 tags 包含以前所有释放版本 trunk 为当前开发分支。 分支结构 每个开发分支都有如下所示的结构: http:/svn.codeh

9、aus.org/geoserver/ doc/ src/ data/ doc 包含用户和开发人员向导的源文件 src 包含 Geoserver 本身的 Java 源码 data 包含多种 GeoServer 的数据目录 快速入门 本章介绍快速搭建、运行 GeoServer 开发环境具体步骤。我们假定您已经安装好所有必须 的工具(内容见第二章)。 注:本章的上的是为了尽快的让开发者搭建和运行 GeoServer。对于一些更加深入的介绍 请见 Maven 指南和 Eclipse 指南。 取出源代码 由 Maven 构建 由 Maven 生成 Eclipse 工程文件 导入模块进 Eclipse 在

10、 Eclipse 里运行 GeoServer 访问 GeoServer 首页 取出源代码 由 subversion 库中取出源代码。选取 trunk 作为最新开发源码,或者那些基本不可能经 常更新的版本的稳定分支。 要么是: svn co https:/svn.codehaus.org/geoserver/trunk geoserver-trunk 或者(稳定的 1.7.x 分支 ) svn co https:/svn.codehaus.org/geoserver/branches/1.7.x geoserver-1.7.x 在这页示例里面,我们假定你取出源码到一个名为 geoserver 的

11、目录,不过,最好还是把 名字取得更详细一点为好。 由 Maven 构建 修改目录到源树的根,执行以下 maven 构建命令: cd geoserver/src mvn clean install 成功构建后会产生类似于以下的输出: INFO INFO INFO - - INFO Reactor Summary: INFO - - INFO GeoServer . SUCCESS 10.271s INFO GeoServer Maven Plugins . SUCCESS 0.865s INFO Configuration Deployment PlugIn . SUCCESS 3.820s I

12、NFO GeoServer Maven Archetypes SUCCESS 0.054s INFO GeoServer WFS Output Format Archetype . SUCCESS 0.390s INFO Core Platform Module SUCCESS 5.270s INFO Data Module . SUCCESS 4.521s INFO Open Web Service Module . SUCCESS 2.730s INFO Main Module . SUCCESS 10.077s INFO Web Coverage Service Module . SUC

13、CESS 3.785s INFO Web Coverage Service 1.1.1 Module . SUCCESS 5.254s INFO Validation Module . SUCCESS 1.131s INFO Web Feature Service Module SUCCESS 6.695s INFO Web Feature Service Module SUCCESS 1.197s INFO Web Map Service Module SUCCESS 8.519s INFO Geoserver REST Support Code . SUCCESS 3.366s INFO

14、GeoWebCache (GWC) Module SUCCESS 0.255s INFO Web Application Module SUCCESS 27.386s INFO Community Space . SUCCESS 0.312s INFO GeoServer Extensions SUCCESS 0.071s INFO - - INFO - - INFO BUILD SUCCESSFUL INFO - - 由 Maven 生成 Eclipse 工程文件 生成 Eclipse 使用的.project 文件和.classpath 文件: mvn eclipse:eclipse 导入模

15、块进 Eclipse 1. 启动运行 Eclipse 集成开发环境 2. 打开 Eclipse 首选项 Preferences 3. 依次点击进入: Java,BuildPath,Classpath Variables,点击 New 4. 创建类路径变量名称 ”M2_REPO”,并且设置它的值为本地 Maven 库的位置,点击 OK。 5. 单击 OK 以应用新的 Eclipse 首选项。 6. 在包浏览 Package Explorer 右键并单击导入 Import 7. 选择 已有工程导入工作区 Existing Projects into Workspace,单击下一步: 8. 进入 g

16、eoserver/src 目录 9. 确保所有模块都被选取,单击完成 Finish 在 Eclipse 中运行 GeoServer 1. 在包浏览 Package Explorer 中选择 web-app 模块( 1.7.x 或更早版本是 web) 2. 点击进入 org.geoserver.web 包(1.7.x 或更早版本是 org.vfny.geoserver.jetty) 3. 在 Start 类上右键,单击 Run as, Java Application 访问 GeoServer 首页 几秒后,就可通过 http:/localhost:8080/geoserver 访问到 GeoS

17、erver 默认的用户 admin 的密码是 geoserver Maven 指南 本章是使用 Maven 构建 GeoServer 的参考。 安装 Maven 见工具(第二章) 运行 Maven Maven 提供了从模块编译到生成测试覆盖报告的多种命令。大部分 maven 命令可在源树的 根运行,或者某个特模块。 注:在准备由源树的根运行 maven 命令时,请记住要将取出的根目录变换到 src 目录。 在由源树的根运行一个命令时,或者从包含其它模块的目录时,命令将会为所有模块运行。 当从单个模块运行命令时,它只为这个模块运行。 构建 GeoServer 最常用的命令是安装命令: mvn c

18、lean install 虽然 clean 命令不是必须的,但我们还是推荐用上。上面的命令做了以下的事: 编译源代码 运行单元测试 安装成果到本地 Maven 库 跳过测试 通常在构建时跳过单元测试很有用处。在构建命令中添加-DskipTests 标志就可以只编译 单元测试而不会运行测试。 mvn -DskipTests clean install 离线构建 Maven 操作会自动下载待构建模块中声明的依赖库。当处理快照(SNAPSHOT)依赖时,这 就有可能会有问题。Maven 每次执行一天内的首次构建时,会尝试更新它的快照依赖。 由于 GeoServer 依赖 GeoTools 库的快照版

19、本,这时可能会有问题。最终导致 Maven 下载 大量 GeoTools 更新模块并且急剧增加构建时间。而如果你只是本地构建 geotools,这些 就显得不必要了。 这时,可以使用“离线”方式运行 Maven 来改进: mvn -o clean install 在离线模式中,Maven 不会下载任何外部依赖,也不会更新任何快照依赖。 构建扩展 默认情况下,扩展没有被包含在构建中。它们得通过 Profile 来明确增加到构建中。比如 下面的示例就将 restconfig 扩展添加到构建中: mvn clean install -P restconfig 可以同时添加多个扩展同时使用: mvn

20、clean install -P restconfig,oracle 有个特殊的名为 allExtensions 的 Profile 可以添加所有扩展: mvn clean install -P allExtensions Profiles Eclipse Maven 的 Eclipse 插件用于为模块生成 eclipse 工程: mvn eclipse:eclipse 经过此操作后,这些模块就可以导入 Eclipse 工作区。 该插件有个很有用的功能就是可下载第三方依赖的相关源代码。这是通过添加 downloadSources 标志来做的: mvn -DdownloadSources ecl

21、ipse:eclipse 警告:当你首次启用 downloadSources 标志时,构建过程需要很长时间,因为它要下载 GeoServer 所依赖的每个库的源代码。 构建 Web 模块 当安装好 web 模块后,它会通过内建的特殊配置构建。默认情况下它注是 minimal 配置。 尽管如此,它也可以通过设置 configId 和 configDirectory 标志来定制任意配置。比如: mvn clean install -DconfigId=release - DconfigDirectory=/home/jdeolive/geoserver_1.7.x/data 上面命令可使用 Geo

22、Server 上的 release 配置构建 web 模块。configId 是包含的配置目录 名称,configDirectory 是包含的配置目录的父级目录。configDirectory 可以像刚才的 一样的绝对路径,也可以是针对 web 模块自身的相对路径: mvn clean install -DconfigId=release -DconfigDirectory=/data 上面的命令与之前有同样的效果,尽管是引用了相对于 web 模块的路径。该路径, /data,在 GeoServer 取出(check out)的代码目录结构是标准结构的情况下可用。 使用 Jetty 运行 we

23、b 模块 Maven 的 jetty 插件可用于运行嵌入了 jetty 容器的基于 web 的模块: cd geoserver_1.7.x/src/web mvn jetty:run 注:该命令必须从 web 模块运行,如果从其它模块运行就会失败。 上面的命令将会使用自带的数据目录来运行 GeoServer。为了使用其它的数据目录可以启 用 GEOSERVER_DATA_DIR 标志: mvn -DGEOSERVER_DATA_DIR=/path/to/datadir jetty:run Eclipse 指南 本章是使用 Eclipse 开发 GeoServer 的参考。 导入模块 运行和调试

24、 设置数据目录 更改 Jetty 默认端口 配置 Jetty 中 JNDI 资源 Eclipse 首选项 代码格式化 代码模块 文本编辑器 编译器 导入模块 参见 Maven 指南中的 Eclipse 部分。 运行和调试 运行和调试 web-app 模块中 org.geoserver.web.Start 类。具体步骤见快速入门。 设置数据目录 如果未设置,GeoServer 默认会使用 web-app 模块里的 minimal 目录作为它的数据目录。 若要修改,执行以下步骤: 1.在 Eclipse 菜单中打开调试配置(Debug Configurations) 2.先把 Start 配置,选

25、择 Argument 面板,并且填写-DGEOSERVER_DATA_DIR 参数,设置数 据目录为绝对路径。 更改 Jetty 默认端口 如果未设置,Jetty 默认会使用 8080 端口。修改请按以下方式: 1. 打开上节所说的 Start 配置中的 Argument 面板。 2. 填写-Djetty.port 参数,设置它到期望的端口 配置 Jetty 的 JNDI 资源 JNDI 资源如数据资源可以通过提供系统属性中名为 jetty.config.file 的 Jetty 服务器配 置文件来配置,这个可以在 Start 配置中的 Argument 面板上通过 VM argument 参

26、数指定。 配置文件路径是相对于 web-app 模块根路径的,该模块是启动配置运行的地方。例如: -Djetty.config.file=/settings/jetty.xml 以下的 Jetty 服务器配置文件就配置了一个 JNDI 数据源:jdbc/demo,它是一个 Oracle 数据库的连接池。 jdbc/demo oracle.jdbc.driver.OracleDriver jdbc:oracle:thin: :1521:demodb claudius s3cr3t 20 10 0 10000 300000 300000 20 true 100 true SELECT SYSDAT

27、E FROM DUAL Jetty 没有在 GeoServer 的 WEB-INF/web.xml 指定 reference-ref,因此没必要修改该文 件。GeoServer web-app 模块和数据目录没有特定于 Jetty 的相关信息,因此 JNDI 资源可 以被测试在 Jetty 下,以便于后面在 Tomcat 下的开发。也可以看看 GeoServer 用户手册 中 Tomcat 中建立 JNDI 连接池章节。 Eclipse 首选项 代码格式化 1. 下载文件: http:/svn.osgeo.org/geotools/trunk/build/eclipse/formatter.x

28、ml 2. 转到首选项中 Java,Code Style,Formatter,点击 Import 3. 选择步骤 1 中下载的 formatter.xml 文件。 4. 点击 Apply 代码模板 1. 下载文件: http:/svn.osgeo.org/geotools/trunk/build/eclipse/codetemplates.xml 2. 转到首选项 Java,Code Style, Formatter,点击 Important 3. 选择步骤 1 中下载的 formatter.xml 文件。 4. 点击 Apply 文本编辑器 1. 转到 General,Editors,Tex

29、t Editors 2. 选中 Insert Space for tabs 3. 选中 Show print margin,将 Print margin column 设置为 100 4. 选中 Show line numbers 5. 选中 Show whitespace characters(可选) 注:显示空白字符可帮助我们发现无意中提交不必要的空格。 6. 点击 Apply 编译器 1. 转到 Java, Compiler, Building 2. 扩展开 Output folder,并将.svn/加到 Filtered resources 列表中。 3. 点击 Apply OWS 服

30、务 本节介绍 GeoServer 中 OWS 服务(原文为 RESTful 服务,可能为笔误)如何工作。 OWS 服务概览 TBA 实现一个简单的 OWS 服务 本节将通过以下场景来介绍如何给 GeoServer 创建一个简单的 GeoServer OWS 服务。该服 务需要提供一个能广告叫做“sayHello”的单一操作的功能(capabilities)文档。该 sayHello 操作的结果是一个简单的字符串:“Hello World”。 内容: 实现一个简单的 OWS 服务 建立 创建插件 试一试 建立 创建插件的第一步是为它建立一个 maven 工程。该工程我们称为“hello ”。 1

31、. 在本地文件系统中任意地方创建一个名为 hello 的新目录。 2. 给 hello 目录添加名为 pom.xml 文件。 4.0.0 org.geoserver community 2.0.1 org.geoserver hello jar 1.0 Hello World Service Module org.geoserver main 2.0.1 opengeo opengeo http:/repo.opengeo.org 3. 在 hello 目录下创建 Java 源文件目录。 hello/ + pom.xml + src/ + main/ + java/ 创建插件 插件是一系列由

32、spring beans 实现的扩展。实例中扩展兴趣点是一个 HelloWorld 的 POJO。 1. 创建一个名为 HelloWorld 的类: import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorld public HelloWorld() / Do nothing public v

33、oid sayHello(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.getOutputStream().write( “Hello World“.getBytes() ); 该服务相对比较简单。它提供了一个一个名为 sayHello 的方法,带有 HttpServletRequest,HttpServletResponse 参数。该函数的参数列表会由 org.geoserver.ows.Dispatcher 自动发现。 2. 创建

34、 applicationContext.xml 文件将上面的类申明为一个 bean。 sayHello 到此,hello 工程内容应该是看上去像下面这样了: hello/ + pom.xml + src/ + main/ + java/ + HelloWorld.java + applicationContext.xml 试一试 1. 安装 hello 模块。 hello% mvn install hello% mvn install INFO Scanning for projects. INFO - - INFO Building Hello World Service Module IN

35、FO task-segment: install INFO - - INFO resources:resources INFO Using default encoding to copy filtered resources. INFO compiler:compile INFO Compiling 1 source file to /home/ak/geoserver/community/hello/target/classes INFO resources:testResources INFO Using default encoding to copy filtered resourc

36、es. INFO compiler:testCompile INFO No sources to compile INFO surefire:test INFO No tests to run. INFO jar:jar INFO Building jar: /home/ak/geoserver/community/hello/target/hello-1.0.jar INFO jar:test-jar execution: default WARNING JAR will be empty - no content was marked for inclusion! INFO Buildin

37、g jar: /home/ak/geoserver/community/hello/target/hello-1.0- tests.jar INFO install:install INFO Installing /home/ak/geoserver/community/hello/target/hello-1.0.jar to /home/ak/.m2/repository/org/geoserver/hello/1.0/hello-1.0.jar INFO Installing /home/ak/geoserver/community/hello/target/hello-1.0- tes

38、ts.jar to /home/ak/.m2/repository/org/geoserver/hello/1.0/hello-1.0- tests.jar INFO - - INFO BUILD SUCCESSFUL INFO - - INFO Total time: 6 seconds INFO Finished at: Fri Sep 21 14:52:31 EDT 2007 INFO Final Memory: 27M/178M INFO - 1.拷贝 target/hello-1.0.jar 文件到到你的 GeoServer 安装的 WEB-INF/lib 目录。 2.重启 GeoS

39、erver。 3.访问:http:/geoserver/ ows?request=sayHello import java.util.List; import org.geoserver.rest.AbstractResource; import org.geoserver.rest.format.DataFormat; import org.restlet.data.Request; import org.restlet.data.Response; public class HelloResource extends AbstractResource Override protected

40、List createSupportedFormats(Request request, Response response) return null; 2第一个要实现的方法是 createSupportedFormats()。该方法的目的是创建一个由扩展 到特殊格式的映射。那么好,现在我们的目标就是给客户端的“.txt”扩展请求返回 “Hello World”的文本。 import java.util.ArrayList; import org.geoserver.rest.format.StringFormat; . Override protected List createSuppor

41、tedFormats(Request request, Response response) List formats = new ArrayList(); formats.add(new StringFormat( MediaType.TEXT_PLAIN ); return formats; 2. 接下来需要覆盖 handleGet()方法。该方法在资源的 GET 请求拿到时调用。 Override public void handleGet() /get the appropriate format DataFormat format = getFormatGet(); /transfo

42、rm the string “Hello World“ to the appropriate response getResponse().setEntity(format.toRepresentation(“Hello World“); 上面代码使用 getFormatGet()方法,该方法的目的是确定客户端请求的扩展,并为它找 到对应的格式。在本例中,当客户端请求“.txt”扩展时,就可看到前面步骤中的 StringFormat 创建了。 创建应用程序环境 1. 下面一步是创建应用程序环境,用以告知 GeoServer 上节中所创建的资源。在 hello_rest 模块根部创建 src/m

43、ain/resources 目录。 hello_rest% mkdir src/main/resources 2. 在 hello_rest 模块根部创建 src/main/resources 目录中添加如下的 applicationContext.xml 文件。 /hello.format hello 这部分里面有两点需要注意。第一个是前一节中创建的 HelloResource 类的实例 hello bean。第二个是 helloMapping bean,它定义了 uri 的模块,该 uri 是用来访问资源的。上面 的映射描述了资源将被定位在/rest/hello.format ,其中 fo

44、rmat 是代表客户端请求格式。就 像实现程序里的那样,hello.txt 是唯一受支持的表达格式。 测试 1. hello_rest 模块根部创建 /src/test/java 目录。 hello_rest% mkdir -p src/test/java 2. 在 org.geoserver.hellorest 包内创建名为 HelloResourceTest 的测试类,该类由 org.geoserver.test.GeoServerTestSupport 扩展而来: package org.geoserver.hellorest; import org.geoserver.test.Geo

45、ServerTestSupport; public class HelloResourceTest extends GeoServerTestSupport public void test() throws Exception 3. 为/rest/hello.txt 的 GET 请求添加一个状态,并且断言到它等于 “Hello World”字符 串。 public void test() throws Exception assertEquals( “Hello World“, getAsString(“/rest/hello.txt“); 4. 构建并且测试 hello_test 模块。

46、hello_rest% mvn install 基于 Maps 的 Restful 服务实现 前一节中我们介绍了如何实现一个简单的 restful 服务。本节将介绍如何为请求所表达的资 源支持额外的格式利用已有的基类,以节省时间。 我们所使用的类是 org.geoserver.rest.MapResource。MapResource 的目的是资源由包含在 java.util.Map 中的数据结构来提供。在该 map 集合中,MapResource 类可自动以 XML 或者 JSON 格式为资源创建表达形式。 预置条件 本节建立在上一节中 RESTful 服务实现的实例基础上。 创建新的资源类 1. org.geoserver.hellorest 包中创建名为 HelloMapResource 的新类,该类由 MapResource 扩展: package org.geoserver.hellorest; import java.util.Map

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 自然科学

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。