GeoServer后台管理web功能扩展

后台管理项目是用spring管理,UI用的wicket框架,此框架不熟悉,参照官方doc能写个大概的例子。以下是例子。

前提:需要下载GeoServer的源码,maven编译通过后,可以导入eclipse等IDE。以下是我整个geoServer项目的结构。

工作空间:我的结构是:D:\workspace\geoserver\src,当然我对maven也是一知半解,故导入的项目也是7788.不过都能够编译通过的。GeoServer的所有子模块(Model)的pom.xml都会继承他提供的根pom.xml,当然在实际扩展某些功能的时候,他的pom.xml我也有经过改动的。因为根据官方的例子,有的编译不通过,比如:扩展pom.xml中的依赖,如:

<dependencies>
    <dependency>
      <groupId>org.geoserver.web</groupId>
      <artifactId>web-core</artifactId>
      <version>2.5-SNAPSHOT</version>
    </dependency>
  </dependencies>

注意version这个,官方例子貌似还是2.0.这个时候,就需要根据你下载的版本进行更改了。这个版本在你从git下载的源码包里的pom.xml能查到,如我geoserver父pom.xml的:

 <modelVersion>4.0.0</modelVersion>
 <groupId>org.geoserver</groupId>
 <artifactId>geoserver</artifactId>
 <packaging>pom</packaging>
 <version>2.5-SNAPSHOT</version>
 <name>GeoServer</name>
<groupId>org.geoserver.web</groupId>
    <artifactId>gs-web-core</artifactId>
    <version>${gs.version}</version>
   </dependency>
<properties>
  <gs.version>2.5-SNAPSHOT</gs.version>
  <gt.version>11-SNAPSHOT</gt.version>
  <gwc.version>1.5.0</gwc.version>
  <spring.version>3.1.4.RELEASE</spring.version>
  <spring.security.version>3.1.0.RELEASE</spring.security.version> 
  <poi.version>3.8</poi.version>
  <wicket.version>1.4.12</wicket.version>
  <ant.version>1.8.4</ant.version>
  <java.awt.headless>true</java.awt.headless>
  <jvm.opts></jvm.opts>
  <jalopy.phase>disabled</jalopy.phase>
  <jalopy.srcExcludesPattern>disabled</jalopy.srcExcludesPattern>
  <test.maxHeapSize>512M</test.maxHeapSize>
  <test.maxPermSize>128M</test.maxPermSize>
  <test.excludedGroups></test.excludedGroups>
  <test.exclude.pattern>none</test.exclude.pattern>
  <quietTests>true</quietTests>
  <remoteOwsTests>false</remoteOwsTests>
  <maven.build.timestamp.format>dd-MMM-yyyy HH:mm</maven.build.timestamp.format>
  <build.timestamp>${maven.build.timestamp}</build.timestamp>
  <build.hudsonId>-1</build.hudsonId>
  <fork.javac>true</fork.javac>
  <javac.maxHeapSize>256m</javac.maxHeapSize>
  <image.tests>true</image.tests>
  <interactive.tests>false</interactive.tests>
 </properties>

当然,上面有一部分废话,懂maven结构的groupid什么的,根据你的parent的pom实际情况改子模块pom就行了。

我的子模块或者叫扩展模块的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  
  <parent>
    <groupId>org.geoserver</groupId>
    <artifactId>web</artifactId>
    <version>2.5-SNAPSHOT</version>
  </parent>
  
  <groupId>org.geoserver</groupId>
  <artifactId>hello_web</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>hello_web</name>
  <description>hello_web</description>
  
  <dependencies>
    <dependency>
      <groupId>org.geoserver.web</groupId>
      <artifactId>web-core</artifactId>
      <version>2.5-SNAPSHOT</version>
    </dependency>
  </dependencies>

<!--   <build> -->
<!--     <plugins> -->
<!--       <plugin> -->
<!--         <artifactId>maven-compiler-plugin</artifactId> -->
<!--         <configuration> -->
<!--           <source>1.5</source> -->
<!--           <target>1.5</target> -->
<!--         </configuration> -->
<!--      </plugin> -->
<!--    </plugins> -->
<!--   </build> -->
  
</project>

测试及其他的我都注释或者删掉了。因为maven的测试还没怎么搞明白,打包的时候总是失败。

建一个maven的web项目,搞一个spring配置文件:applicationContext.xml

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

 <beans>
    <bean id="helloPage" class="org.geoserver.web.MenuPageInfo">
      <property name="id" value="helloPage"/>
      <property name="titleKey" value="HelloPage.page.title"/>
      <property name="descriptionKey" value="HelloPage.page.description"/>
      <property name="componentClass" value="org.geoserver.helloweb.HelloPage"/>
    </bean>
</beans>

一个GeoServerApplication.properties,与applicationContext.xml同在,

HelloPage.page.title=Hello
HelloPage.page.description=A page to say hello

HelloPage.title=Hello Page Title
HelloPage.description=This is the description of the page

一个类:

org.geoserver.helloweb.HelloPage.java,applicationContext.xml中

 <property name="componentClass" value="org.geoserver.helloweb.HelloPage"/>

对应的包名、类名,此处随意。

最后UI的html:HelloPage.html

可以跟你的HelloPage.java放一个目录,也可以放WebContent(反正你web工程根目录)下:

<html xmlns:wicket="http://wicket.apache.org">
  <body>
     <wicket:extend>
        <div wicket:id="hellolabel"></div>
     </wicket:extend>
  </body>
</html>

注意有了这个

html xmlns:wicket="http://wicket.apache.org"

就可以使用wicket的标签了。

此时,即完成了。该web界面如果需要更多功能,则自己参照源码扩展吧。或者写自己的特定服务。

然后就是maven打包,我的pom是生成jar。

因为GeoServer所有的子模块以jar包的形式,也可以理解为插件的方式,懂的话,就可以根据需要进行自定义组装需要和不需要的功能了。打包方式是因为我的pom的依赖项:

  <dependencies>
    <dependency>
      <groupId>org.geoserver.web</groupId>
      <artifactId>web-core</artifactId>
      <version>2.5-SNAPSHOT</version>
    </dependency>
  </dependencies>

对应着:D:\workspace\geoserver\src\web\core源码中:web包里的core包的pom,web\core中的pom段:

<groupId>org.geoserver.web</groupId>
  <artifactId>gs-web-core</artifactId>
  <packaging>jar</packaging>
  <version>2.5-SNAPSHOT</version>
  <name>Core UI Module</name>

指明了packaging的类型。

so,此时,打开cmd命令行窗口,当然如果你是linux开发的话,就不需说,你比我懂。进入我建的子模块工程目录,我的是:D:\workspace\gs-hello_web

我没跟他自身的子模块放一起,只是把他的根pom考出来了放workspace下而已,有弊端是他回去更新依赖项,只要能找到依赖pom项即可。

我跳过了maven的测试test功能,命令:mvn clean install -Dmaven.test.skip=true 

然后到哪去找生成的jar就不说了。复制到你安装的GeoServer或者把他的webapps下的项目考到自己的tomcat(我是这个干的,他用的web容器我不熟悉。)下的工程的lib里。重启就可以了。最终效果是:




thanks。有错误请指正。大概是可以的。我主要是在maven方面的命令,以及xml配置卡住了,弄俩个项目就基本的会用了。






转载自:https://mtr-1.oss-cn-beijing.aliyuncs.com/qyblog/2019/04/20120751.jpg

You may also like...

退出移动版