GeoServer开发手册系列_第1页
GeoServer开发手册系列_第2页
GeoServer开发手册系列_第3页
GeoServer开发手册系列_第4页
GeoServer开发手册系列_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./目录写在前面3一介绍4二工具4Java4Maven4Subversion4三源代码4源代码5提交5库结构5分支结构6快速入门6取出源代码7由Maven构建7由Maven生成Eclipse工程文件9导入模块进Eclipse9在Eclipse中运行GeoServer12访问GeoServer首页13Maven指南13安装Maven13运行Maven13构建13跳过测试14离线构建14构建扩展14Profiles15Eclipse15构建Web模块15使用Jetty运行web模块16Eclipse指南16导入模块17运行和调试17设置数据目录17更改Jetty默认端口18配置Jetty的JNDI资源19Eclipse首选项20代码格式化21代码模板22文本编辑器22编译器23OWS服务24OWS服务概览24实现一个简单的OWS服务24建立25创建插件27试一试30REST服务34简介34RESTful服务实现35基于Maps的Restful服务实现43基于反射的Restful服务实现49GeoServer中的Wicket开发55Web用户接口61简介61实现一个WicketUI扩展63encoding="ISO-8859-1"?><project4.0.0"xmlns:xsi="/2001/XMLSchema-instance"/maven-v4_0_0.xsd"><modelVersion></modelVersion><!--setparentpomtocommunitypom--><parent><groupId>org.geoserver</groupId><artifactId>community</artifactId><version></version></parent><groupId>org.geoserver</groupId><artifactId>hello</artifactId><packaging>jar</packaging><version>1.0</version><name>HelloWorldServiceModule</name><!--declaredepenencyongeoservermain--><dependencies><dependency><groupId>org.geoserver</groupId><artifactId>main</artifactId><version></version></dependency></dependencies><repositories><repository><id>opengeo</id><name>opengeo</name><url></url></repository></repositories></project>3.在hello目录下创建Java源文件目录。hello/+pom.xml+src/+main/+java/创建插件插件是一系列由springbeans实现的扩展。实例中扩展兴趣点是一个HelloWorld的POJO。1.创建一个名为HelloWorld的类:importjava.io.IOException;importjavax.servlet.ServletException;importttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassHelloWorld{publicHelloWorld<>{//Donothing}publicvoidsayHello<HttpServletRequestrequest,HttpServletResponseresponse>throwsServletException,IOException{response.getOutputStream<>.write<"HelloWorld".getBytes<>>;}}该服务相对比较简单。它提供了一个一个名为sayHello的方法,带有HttpServletRequest,HttpServletResponse参数。该函数的参数列表会由自动发现。2.创建applicationContext.xml文件将上面的类申明为一个bean。<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans><!--SpringwillreferencetheinstanceoftheHelloWorldclassbytheidname"helloService"--><beanid="helloService"class="HelloWorld"></bean>tolocateit.--><beanid="helloService-"class="org.geoserver.platform.Service"><!--usedtoreferencetheserviceintheURL--><constructor-argindex="0"value="hello"/><!--ouractualservicePOJOdefinedpreviously--><constructor-argindex="1"ref="helloService"/><!--aversionnumberforthisservice--><constructor-argindex="2"value=""/><!--alistoffunctionsforthisservice--><constructor-argindex="3"><list><value>sayHello</value></list></constructor-arg></bean></beans>到此,hello工程内容应该是看上去像下面这样了:hello/+pom.xml+src/+main/+java/+HelloWorld.java+applicationContext.xml试一试1.安装hello模块。[hello]%mvninstall[hello]%mvninstall[INFO]Scanningforprojects...[INFO][INFO]BuildingHelloWorldServiceModule[INFO]task-segment:[install][INFO][INFO][resources:resources][INFO]Usingdefaultencodingtocopyfilteredresources.[INFO][compiler:compile][INFO]Compiling1sourcefileto/home/ak/geoserver/community/hello/target/classes[INFO][resources:testResources][INFO]Usingdefaultencodingtocopyfilteredresources.[INFO][compiler:testCompile][INFO]Nosourcestocompile[INFO][surefire:test][INFO]Noteststorun.[INFO][jar:jar][INFO][INFO][jar:test-jar{execution:default}][WARNING]JARwillbeempty-nocontentwasmarkedforinclusion![INFO][INFO][install:install][INFO][INFO][INFO][INFO]BUILDSUCCESSFUL[INFO][INFO]Totaltime:6seconds[INFO]Finishedat:FriSep2114:52:31EDT2007[INFO]FinalMemory:27M/178M[INFO]1.拷贝文件到到你的GeoServer安装的WEB-INF/lib目录。2.重启GeoServer。3.访问:http:<host>/geoserver/ows?request=sayHello&service=hello&version=请求request我们服务内定义的方法服务service applicationContext.xml文件中Service描述符的名称版本version applicationContext.xml文件中Service描述符的版本可选方法1.与web模块一起构建另外一个可选方法是在新的插件工程上从web模块申明一个依赖。1.像上面一样安装hello模块。2.编辑web/pom.xml,添加如下依赖:<dependency><groupId>org.geoserver</groupId><artifactId>hello</artifactId><version>1.0</version></dependency>3.安装、运行web模块[web]mvninstalljetty:run4.访问:http://localhost:8080/geoserver/ows?request=sayHello&serv可选方法2:由GeoServer源中运行作为尝试插件开发的一种可选方法:1.安装hello模块。2.更改路径到web模块3.安装web模块。4.拷贝<hello文件到<webmodule>/target/geoserver/WEB-INF/lib目录:[/dev/geoserver/web]%cp~/hello/target/hello-1.0.jartarget/geoserver/WEB-INF/lib5.使用Jetty运行打包的war。[/dev/geoserver/web]%mvnjetty6:run-exploded6.访问:http://localhost:8080/geoserver/ows?request=sayHeREST服务本节是GeoServer中运行RESTful服务的的预览。简介GeoServer使用著名的Restlet库提供系统所有REST相关功能。Restlet是由Java编写的轻量级rest框架,它能很好的集成基于已有的servlet的应用程序Rest派发GeoServer里面,所有路径/rest下面的请求都被认为是一个restful请求。这每一个请求都交由一个rest派发器来处理。派发器的工作职责是请每个请求导向到相关的处理终端上。该终端就是restlet。Restlet由spring环境加载,因此它们是可插拔的。RestletsRestlet是处理派发器转发来的调用,与类相对应。我们可以扩展该类以实现一个服务端点〔服务点。同样,我们也可以为了某个特殊目的扩展出一个子类。下节描述的就是一个名为finder的子类。Finders和资源Restful服务通常是实现了某一个资源。Finder对象是一个特殊的restlet,它的职责是为特定的请求找到正确的资源。该资源就作为一个最终的终点,并处理请求。相关的类是和。表达Representations\o"Permalinktothisheadline"¶Repreentation,通常是指特殊状态的状态或者资源编码的格式。例如,当某个特殊资源请求进来时,该资源的表达就返回给了客户端。RESTful服务实现本节描述GeoServer如何实现一个restful服务,将以"helloworld"为示例。该服务非常简单,将会向一个GET请求返回一个"HelloWorld"的文本。预置条件在开始之前,GeoServer必须在本地系统上构建成功。具体细节见源代码和/maven-v4_0_0.xsd"><modelVersion></modelVersion><groupId>org.geoserver</groupId><artifactId>hello_rest</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>hello_rest</name><dependencies><dependency><groupId>org.geoserver</groupId><artifactId>rest</artifactId><version>2.0-SNAPSHOT</version></dependency><dependency><groupId>org.geoserver</groupId><artifactId>main</artifactId><version>2.0-SNAPSHOT</version><classifier>tests</classifier><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version></version><scope>test</scope></dependency><dependency><groupId>com.mockrunner</groupId><artifactId>mockrunner</artifactId><version></version><scope>test</scope></dependency></dependencies><build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.5</source><target>1.5</target></configuration></plugin></plugins></build></project>1.在新模块根部创建src/main/java目录[hello_rest]%mkdir-psrc/main/java创建资源类1.当创建新的资源时,我们可以拿到类。在包内创建一个名为HelloResource的新类,它由AbstractResource扩展。packageorg.geoserver.hellorest;importjava.util.List;importorg.geoserver.rest.AbstractResource;importorg.geoserver.rest.format.DataFormat;importorg.restlet.data.Request;importorg.restlet.data.Response;publicclassHelloResourceextendsAbstractResource{@OverrideprotectedList<DataFormat>createSupportedFormats<Requestrequest,Responseresponse>{returnnull;}}2.第一个要实现的方法是createSupportedFormats〔。该方法的目的是创建一个由扩展到特殊格式的映射。那么好,现在我们的目标就是给客户端的".txt"扩展请求返回"HelloWorld"的文本。importjava.util.ArrayList;importorg.geoserver.rest.format.StringFormat;...@OverrideprotectedList<DataFormat>createSupportedFormats<Requestrequest,Responseresponse>{List<DataFormat>formats=newArrayList<>;formats.add<newStringFormat<MediaType.TEXT_PLAIN>>;returnformats;}2.接下来需要覆盖handleGet〔方法。该方法在资源的GET请求拿到时调用。@OverridepublicvoidhandleGet<>{//gettheappropriateformatDataFormatformat=getFormatGet<>;//transformthestring"HelloWorld"totheappropriateresponsegetResponse<>.setEntity<format.toRepresentation<"HelloWorld">>;}上面代码使用getFormatGet〔方法,该方法的目的是确定客户端请求的扩展,并为它找到对应的格式。在本例中,当客户端请求".txt"扩展时,就可看到前面步骤中的StringFormat创建了。创建应用程序环境1.下面一步是创建应用程序环境,用以告知GeoServer上节中所创建的资源。在hello_rest模块根部创建src/main/resources目录。[hello_rest]%mkdirsrc/main/resources2.在hello_rest模块根部创建src/main/resources目录中添加如下的applicationContext.xml文件。<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans><beanid="hello"class="org.geoserver.hellorest.HelloResource"/><beanid="helloMapping"class="org.geoserver.rest.RESTMapping"><propertyname="routes"><map><entry><key><value>/hello.{format}</value></key><value>hello</value></entry></map></property></bean></beans>这部分里面有两点需要注意。第一个是前一节中创建的HelloResource类的实例hellobean。第二个是helloMappingbean,它定义了uri的模块,该uri是用来访问资源的。上面的映射描述了资源将被定位在/rest/hello.{format},其中format是代表客户端请求格式。就像实现程序里的那样,hello.txt是唯一受支持的表达格式。测试1.hello_rest模块根部创建/src/test/java目录。[hello_rest]%mkdir-psrc/test/java2.在包内创建名为HelloResourceTest的测试类,该类由扩展而来:packageorg.geoserver.hellorest;importorg.geoserver.test.GeoServerTestSupport;publicclassHelloResourceTestextendsGeoServerTestSupport{publicvoidtest<>throwsException{}}3.为/rest/hello.txt的GET请求添加一个状态,并且断言到它等于"HelloWorld"字符串。publicvoidtest<>throwsException{assertEquals<"HelloWorld",getAsString<"/rest/hello.txt">>;}4.构建并且测试hello_test模块。[hello_rest]%mvninstall基于Maps的Restful服务实现前一节中我们介绍了如何实现一个简单的restful服务。本节将介绍如何为请求所表达的资源支持额外的格式利用已有的基类,以节省时间。我们所使用的类是。MapResource的目的是资源由包含在中的数据结构来提供。在该map集合中,MapResource类可自动以XML或者JSON格式为资源创建表达形式。预置条件本节建立在上一节中"/dtd/spring-beans.dtd"><beans><beanid="hello"class="org.geoserver.hellorest.HelloResource"/><beanid="helloMap"class="org.geoserver.hellorest.HelloMapResource"/><beanid="helloMapping"class="org.geoserver.rest.RESTMapping"><propertyname="routes"><map><entry><key><value>/hello.{format}</value></key><!--value>hello</value--><value>helloMap</value></entry></map></property></bean></beans>这段中有两件事需要注意。第一个是helloMapbean的添加。第二个是helloMappingbean的修改,它现在映射的是helloMapbean,而非hellobean。测试在包中创建一个新的名为HelloMapResourceTest测试类,它由扩展而来:packageorg.geoserver.hellorest;importorg.geoserver.test.GeoServerTestSupport;publicclassHelloMapResourceTestextendsGeoServerTestSupport{}2.为构建/rest/hello.xmlGET请求添加一个名为testGetAsXML〔的测试方法:...importorg.w3c.dom.Document;importorg.w3c.dom.Node;...publicvoidtestGetAsXML<>throwsException{//maketherequest,parsingtheresultasadomDocumentdom=getAsDOM<"/rest/hello.xml">;//printouttheresultprint<dom>;//makeassertionsNodemessage=getFirstElementByTagName<dom,"message">;assertNotNull<message>;assertEquals<"HelloWorld",message.getFirstChild<>.getNodeValue<>>;}3.为/rest/hello.json的GET请求添加名为testGetAsJSON〔的测试方法。...importnet.sf.json.JSON;importnet.sf.json.JSONObject;...publicvoidtestGetAsJSON<>throwsException{//maketherequest,parsingtheresultintoajsonobjectJSONjson=getAsJSON<"/rest/hello.json">;//printouttheresultprint<json>;//makeassertionsassertTrue<jsoninstanceofJSONObject>;assertEquals<"HelloWorld",<<JSONObject>json>.get<"message">>;}4.构建并测试hello_tes模块。[hello_rest]%mvncleaninstall-Dtest=HelloMapResourceTest基于反射的Restful服务实现上一节中我们介绍了利用MapResource基类可更高效实现RESTful服务的范例。本节我们将介绍另外一个不同的基类,但却有同样的功效。该类是。该类的基本思想是资源由任意一个对象来提供。ReflectiveResource类使用反射来自动创建XML或者JSON格式的资源结果表达。预置条件本节建立在上一节"/dtd/spring-beans.dtd"><beans><beanid="hello"class="org.geoserver.hellorest.HelloResource"/><beanid="helloMap"class="org.geoserver.hellorest.HelloMapResource"/><beanid="helloReflective"class="org.geoserver.hellorest.HelloReflectiveResource"/><beanid="helloMapping"class="org.geoserver.rest.RESTMapping"><propertyname="routes"><map><entry><key><value>/hello.{format}</value></key><!--value>hello</value--><!--value>helloMap</value--><value>helloReflective</value></entry></map></property></bean></beans>有两点需要注意。第一件是helloReflectivebean的添加。第二件是helloMappingbean的修改,它映射到了helloReflectivebean。测试1.在包中创建一个名为HelloReflectiveResourceTest的类,它由扩展而来:packageorg.geoserver.hellorest;importorg.geoserver.test.GeoServerTestSupport;publicclassHelloReflectiveResourceTestextendsGeoServerTestSupport{}2.为构建/rest/hello.xml的GET请求添加一个名为testGetAsXML〔的方法。...importorg.w3c.dom.Document;importorg.w3c.dom.Node;...publicvoidtestGetAsXML<>throwsException{//maketherequest,parsingtheresultasadomDocumentdom=getAsDOM<"/rest/hello.xml">;//printouttheresultprint<dom>;//makeassertionsNodemessage=getFirstElementByTagName<dom,"message">;assertNotNull<message>;assertEquals<"HelloWorld",message.getFirstChild<>.getNodeValue<>>;}3.为/rest/hello.json的GET请求添加一个名为testGetAsJSON〔的方法。...importnet.sf.json.JSON;importnet.sf.json.JSONObject;...publicvoidtestGetAsJSON<>throwsException{//maketherequest,parsingtheresultintoajsonobjectJSONjson=getAsJSON<"/rest/hello.json">;//printouttheresultprint<json>;//makeassertionsassertTrue<jsoninstanceofJSONObject>;JSONObjecthello=<<JSONObject>json>.getJSONObject<"org.geoserver.hellorest.Hello">;assertEquals<"HelloWorld",hello.get<"message">>;}4.构建并测试hello_test模块。[hello_rest]%mvncleaninstall-Dtest=HelloMapReflectiveResourceTestGeoServer中的Wicket开发本节介绍GeoServer2中基于Wicket配置接口创建页面。关于Wicket的更多信息,可去取出工程站点。添加一页在Wicket里面,每个页面都有相应的Java类。为了添加一个页面,我们需要创建新类以扩展,我们也同样需要创建一个链接来引导用户到该页面。〔总体上,Wicket页面没有可靠的URL,因此我们必须在已有页面明确的创建一个链接,让Wicket生成合适的URL。在类不需要参数到它的构建函数的情况下,我们可以用Spring插入一个链接。在Sping创建链接要求我们的页面链接文本必须国际化。我们呆会会对国际化进行更加深入的讨论。GeoServer的最简单的可能的Wicket扩展包含3个文件。有个Java类定义〔在src/main/java/org/geoserver/web/example/MyPage.java文件中。packageorg.geoserver.web.example;import;publicclassMyPageextendsGeoServerBasePage{//Wewillfillintherestlater,fornowthepagecanjustbeblank}同样也需要一个Spring应用环境文档〔src/main/java/applicationContext.xml:<beanclass="org.geoserver.web.MenuPageInfo"id="myPageLink"><!--Aninternalidentifierforthelinkcomponent--><propertyname="id"value="mypage"/><!--Thei18nkeyforthelinktitle--><propertyname="titleKey"value="org.geoserver.web.example.MyPage.page.title"/><!--Thei18nkeyforalongerdescriptionofthe><propertyname="descriptionKey"value="org.geoserver.web.example.MyPage.page.description"/><!--Thefullyqualifiednameofthepageclass--><propertyname="componentClass"value="org.geoserver.web.example.MyPage"/><!--Optional,anicontodisplayalongsidethelink.--><propertyname="icon"value="imgs/some-image.png"/><!--Optional,thecategoryinwhichthelinkshouldbegrouped.--><propertyname="category"ref="someCategory"/><!--Optional,akeyusedtoorderthelinksinthemenu.--><propertyname="order"value="100"/></bean>第三个需要的文件是国际化字符串的默认字典,存于src/main/java/GeoServerAperties文件:=MyExamplePage=AnexamplepagefordeveloperstryingtoextendtheGeoServerUI.如果你使用了这些三个文件创建了一个jar,并且把它添加到GeoServer类路径〔Classpath中,我们就能在左侧看到新的链接。加到页面到这我们已经给UI添加一个页面,但是这个还不是很有趣。在Wicket里面,页面以HTML文件提供他们的内容,该HTML文件与Java代码有着同样的名称,当然扩展名不同。关于这些文件的有些具体细节与标准HTML不同;一方面,它们必须是标准有效的XML,Wicket才能处理。另外,Wicket使用少量的"特殊"元素来描述哪里需要Java代码检测并处理成HTML。下面是GeoServer管理控制台最常用的:Wicket元素目的<foowicket:id="bar"></foo>Wicket:id属性告知Wicket将要使用的名称,当匹配到Wicket组件的。<wicket:child/>不需要内容,但是扩展该页的类可以此处插入内容。<wicket:extend></wicket:extend>封装的内容将会在<wicket:child/>的地方插入到父页,<wicket:panel></wicket:panel>与wicket:extend相似,但是用于创建特定的组件而非扩展的页。<wicket:head></wicket:head>包含这个标记〔能用于页面pages或者面板panels的页面头部需要添加的这节内容〔像包含的CSS或JavaScript代码<wicket:link></wicket:link>封装那些将会重写到页面的链接,CSS文件和它管理的其它资源。〔这会允许你引用那些相对于Java源代码的路径的资源,而不是渲染后的HTML。<wicket:messagekey="i18nKey">DefaultText</wicket:message>告知Wicket到国际化数据库查找字符串,如果找到了就替换成需要的文本。Wicket只提供很少的组件,其中一些见于Wicket组件参考。总体上,Wicket组件需要一个模型对象来处理getting,setting,和转换组件相关的值的to/from字符串。这个示例的目的是,我们将会集中于一个最简单的,即为Label,它会在运行时替换所绑定的值的元素内容。由以上的内容我们继续,我们可以把一个字符串提供给Label的构造函数,并且它透明式的转换成一个模型:packageorg.geoserver.web.example;import;import;publicclassMyPageextendsGeoServerBasePage{publicMyPage<>{add<newLabel<"label","HelloWorld">>;}}相关的HTML源是src/main/java/org/geoserver/web/example/MyPage.html:<html><head></head><body><wicket:extend>Greetings,GeoServerUser!Mymessageforyouis<spanwicket:id="label">thanksforusingGeoServer</span>.</wicket:extend></body></html>当然,我们可以使用Wicket来做很多更加复杂〔并且有用的事,但是这个示例演示的是最通用功能:仅仅是添加一些动作到HTML元素。在导航菜单外部添加链接当然,我们不能在左边菜单中添加全部的东西;一方面,它只定义了静态链接集,GeoServer绑定这些链接到很多不同配置的资源。加一方面,有些页面需要传参数给它们的构造函数。如果你需要添加特定的链接到页面上,你可以使用WicketLinks组件,并且定制onClick行为来调用相应的构造函数。〔你也可以在处理用户输入的其它方法里使用setResponsePage,如form提交。更详细的信息请查询Wicket文档。一个示例://...import;//...add<newLink<"link">{publicvoidonClick<>{setResponsePage<newMyPage<>>;}}>;相对应的HTML将像:Followthislovely<ahref="#"wicket:id="link">link</a>.使它国际化在GeoServerUI,我们使用一个定制的资源查找工具,以供任意模块提供资源字符。你所需要做的是引入你的i18n值在名为GeoServerAperties的Java属性文件,在你的src目录的根部〔比如project/src/main/java/GeoServerAperties。<wicket:message>元素使得文本国际化变得十分容易,但是在你需要插入值到句子中依语言不同而变化的位置时,你将会使用到一些更加复杂的方法。在Wicket里面,i18n值字符串能定义参数,通过这些参数能提供放置动态值到国际化字符串的能力。详见:f添加资源通常在HTML里面,你会需要包含一些有用的东西,如CSS文件,JavaScript库,或者包含到页面上的图片。Wicket允许你使用URL来描述这些相对于你的Java源文件,使用封装在<wicket:link>标签里面的相对路径。Wicket会在运行时使用正确的路径来重写这些链接。尽管如此,对于类似于不是继承于父类的资源,因此如果你需要包含多个包里都有的资源,你就需要一个新的类供两个类中共享资源。看GeoServerUI核心模块中的XMLEditor组件,作为组件的示例,它也是起这个功能。UI设计准则下面是GeoServer中Wicket页面的UI设计简单准则:表单Forms在表单里面,将每个字段分组作为包含一个标签和一个字段的一项放在一个无序列表中。对于单选按钮和复选框,标签应当放在字段后面;对于其它的,标签就可放在字段的前面,比如:<ul><li><labelfor="foo"><wicket:messagekey="foo">Foo</wicket:message><inputwicket:id="foo"type="text"></input></li></ul>避免用户需要特殊知识比如,当需要一个值列表时,可以提供一个工具允许用户一次一个元素地操作列表,而不是给一个逗号分隔的值列表定制组件我们推荐创建一个可持续利用的Wicket组件用于任意一个复杂的值,这些值可能被用户编辑,比如外框或者自由字符串列表。通过提取并封装成一个组件,就能更易于提供一个兼容的、丰富的编辑功能给用户。Web用户接口简介GeoServer使用著名的Wicket网络应用程序框架作为它的用户接口。Wicket与很多Java网络框架不同的是它是基于组件的而非JSP模板的。这点使得Wicket对于很多javat程序员来说是一个显得更加自然的网络框架,因为这些人对于Swing编程比网络编程更熟。插件原生的Wicket组件可由类路径〔classpath加载。这就意味着网络应用程序可以基于模块方式构建,而不是单一方式。GeoServer将这种理念更前进一步,提供一个可插拔的用户接口,在该接口中Wicket组件可通过Spring和规则的GeoServer插件机制进行插拔。插件化的每个组件由组件描述符描述,每个组件描述符是类的一个实例:publicabstractclassComponentInfoimplementsSerializable{/***theidofthecomponent*/Stringid;/***thetitleofthecomponent*/Stringtitle;/***Thedescriptionofthecomponent*/Stringdescription;/***theclassofthecomponent*/ClasscomponentClass;}ComponentInfo的实例包含了关于组件的元信息,如标题和描述等等,还有实现该组件的类。每个ComponentInfo的子类表示了一个特定的\l"extension-points"扩展点。例如,类就表示"main"页面的扩展点,如从应用程序主菜单链接过去的页面。实现一个WicketUI扩展本节描述如何实现一个GeoServerWicket用户接口的扩展。该扩展非常简单,就是一个由主菜单链接过去的很基础的页面,显示一下"HelloWorld"。预置条件在开始之前,GeoServer必须在本地系统上构建成功。具体细节见\l"source"源代码和\l"quickstart"快速入门两章。创建新模块1.在本地系统上创建一个名为hello_web的模块。2.添加如下的pom.xml文件到新模块根部:xmlns="xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/maven-v4_0_0.xsd">org.geoserverweb22.0-SNAPSHOTorg.geoserverhello_webjar1.0-SNAPSHOThello_weborg.geoserver.webweb-core2.0-SNAPSHOTmaven-compiler-plugin1.51.53.在新模块根目录下创建src/main/java目录。[hello_web]%mkdir-psrc/main/java创建页面类1.类是GeoServer中所有页面的基类。在包中创建一个新类HelloPage,它由GeoServerBasePage页面扩展而来。packageorg.geoserver.helloweb;import;publicclassHelloPageextendsGeoServerBasePage{}2.首先,我们需要实现它的构造函数。在Wicket里面,一个页面或组件都是在它的构造函数里面构建。我们的页面很简单,将会创建一个值为"HelloWorld!"的标签。import;...publicHelloPage<>{add<newLabel<"hellolabel","He

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论