从零开始学GeoServer源码十(如何修改菜单项以整合我们的功能?)

快速导航

从零开始学GeoServer源码一(开篇)
从零开始学GeoServer源码二(搭建开发环境)
从零开始学GeoServer源码三(断点应该打在哪?)
从零开始学GeoServer源码四(自定义插件或拓展数据源)
从零开始学GeoServer源码五(切片原理及自定义插件支持wms、wmts、tms)
从零开始学GeoServer源码六(如何打包发布?)
从零开始学GeoServer源码七(如何注册服务并发布3dtiles和cesium的地形terrain?)
从零开始学GeoServer源码八(内存溢出?Out of Memory Error ?)
从零开始学GeoServer源码九(如何集成Cesium以实现预览3dtiles和terrain服务?)
从零开始学GeoServer源码十(如何修改菜单项以整合我们的功能?)
从零开始学GeoServer源码十一(如何解决No Multipart-config for Servlet错误)
从零开始学GeoServer源码十二(GeoServer中的切片规则)
从零开始学GeoServer源码十三(GeoServer生成的矢量切片缺失问题)
从零开始学GeoServer源码十四(GeoServer Cloud微服务版本初体验)

点我去AIGIS公众号查看本文

1.前言

  在第七篇:从零开始学GeoServer源码七(如何注册服务并发布3dtiles和cesium的地形terrain?)和第九篇:从零开始学GeoServer源码九(如何集成Cesium以实现预览3dtiles和terrain服务?)中,我们分别实现了在 GeoServer 中访问静态页面和预览 3dtilesterrain 的功能,但是这个页面的访问地址需要我们去手动输入,对用户来说不太友好,因此,我们要修改一下 GeoServer 的菜单项,让用户能通过点击来进入到我们的页面。

2.思路

  众所周知,GeoServer 的界面是使用 Wicket 框架搭建的,这是一个类似于Asp Jsp 的技术框架,这个框架现在已经过时了,因为现在是前后端分离的思想大行其道。但在那个前后端还没分离的时候,全部是由后端人员来写前后端的交互逻辑,那时候还是很好用的。
  那么 Wicket 框架的思路是什么呢?那就是一个页面就是一个工程,或者说,一个模块就是一个工程,也可以说,一个主菜单就是一个工程。那么在我们这个自定义菜单项制作的过程中,我们就要全程参考 GeoServerLayer Priview 菜单,去向它学习,照猫画虎,做自己的。

3.新建一个java工程

  Wicket 框架的入门思想是有一个页面,就要有一个同名 java 类和它对应,那么我们的模块就顺利成章的创建出来了。因为我们这个页面是要去打开三维页面的,所以我们就叫 terrainPage ,遵守见名知义的原则。
在这里插入图片描述
  simplePage 类要继承 GeoServerBasePage 类,重写 renderHead 方法。

package org.geoserver.terrainPage;

import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.geoserver.web.GeoServerBasePage;

public class simplePage extends GeoServerBasePage {
    public simplePage() {
        add(new Label("label", "页面跳转中......"));
    }

    @Override
    public void renderHead(final IHeaderResponse response) {
    	//调用/geoserver/terrain/home接口
        String js = "window.location.replace('/geoserver/terrain/home');";
        response.render(JavaScriptHeaderItem.forScript(js, this.getId()));
    }
}

  simplePage.html 中的 wicket:id 要和 simplePage.java 中的对应上。

<!DOCTYPE html>
<html lang="en" xmlns:wicket="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>GeoServer: Redirecting</title>
</head>
<body>
    <wicket:extend>
        <div wicket:id="label">
        </div>
    </wicket:extend>
    <p><b>Redirecting to the actual Three Dimension page.</b></p>
    <p>If you're stuck here, it means you don't have javascript
        enabled. Javascript is required to actually use the GeoServer admin console.</p>
</body>
</html>

4.配置applicationContext

  上面已经说过了,我们要参考 Layer Preview 模块,这里就派上用场了,我们直接搜一下 Layer Preview ,看看它是怎么配置的。
在这里插入图片描述
在这里插入图片描述

  非常顺利,一下就找上了,但是有两个值都是它,那就接下来搜 MapPreviewPage.layerPreviewMapPreviewPage.title,看在哪里用的。首先是 MapPreviewPage.layerPreview在这里插入图片描述
发现都是对它赋值,那就不是我们要找的,接下来搜 MapPreviewPage.title,这回找到使用它的地方了:
在这里插入图片描述
双击进入,看看是谁,原来就是 applicationContext,那就是我们要找的,nice。把配置项拷贝到我们自己的 applicationContext 里去,参数改成我们自己的。在这里插入图片描述

order 参数决定了菜单的前后顺序,读者自行调整

titleKey 的值是 simplePage.title,这个是从我们自己的 GeoServerApplication.properties 里提供的
在这里插入图片描述

5.将该工程添加为【gs-web-app】的依赖

    <dependency>
      <groupId>org.geoserver</groupId>
      <artifactId>terrainPage</artifactId>
      <version>1.0</version>
    </dependency>

6.将home接口跳转一个html

  在第3步的时候,我们新建了 java 工程,里面写了一个 simplePage.java 文件,在 renderHead 方法里调用了一个 home 接口,那么这个 home 接口就负责跳转到一个 html 文件,就是我们在前几篇中多次讲到的那个静态页面,我们来看下:

    @RequestMapping("/home")
    public void home(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.sendRedirect("/geoserver/www/home.html");
    }

这个home接口是我以前就写好的,就直接复用了,读者也可以不用接口跳转,直接在执行 js 脚本的时候跳转也可以。

7.大功告成,运行看看

切记新工程要执行 mvn install 操作哦。

在这里插入图片描述
  可以看到这个名就是我们在配置文件里写的 title 的值,点击一下,跳转到了我们熟悉的静态页面。
在这里插入图片描述

8.总结

  本篇博文中,我们通过向 Layer Preview 模块取经,完成了我们自己的模块,完美的实现了修改 Wicket 框架菜单项的配置过程,将我们前期所做的功能进行了一次完美的整合,至此 GeoServer 同时具备了二三维服务发布和预览的功能,也算是一个大的里程碑了吧。
更多精彩内容见公众号AIGIS

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIGIS.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值