Geoserver源码解读六 插件

系列文章目录

Geoserver源码解读一 环境搭建

Geoserver源码解读二 主入口

Geoserver源码解读三 GeoServerBasePage

Geoserver源码解读四 REST服务

Geoserver源码解读五 Catalog

Geoserver源码解读六 插件(怎么在开发模式下使用)

目录

系列文章目录

前言

一、源码位置

二、开发模式下怎么使用

三、文件资源管理插件(Resource Browser Tool)

1.概览 

2.支持多文件上传

2.1 改动一

2.2 改动二

2.3 改动三

2.4 改动四

3.国际化i18n配置

3.1 第一步 新建GeoServerApplication_zh.properties资源包

3.2 第二步 翻译并转成 ISO-8859 编码


前言

看这篇文章的人相信肯定已经知道geoserver的插件大致有哪些,实用的有哪些,我就不再多说了。简单附上一个插件的下载地址(传送门)。

因为geoserver官方社区给出的插件有很多,此处就不一一说明,这篇文章主要记录下插件的源码位置在哪和怎么在开发模式下使用插件以及以文件资源管理插件为例分析下改造的一个过程。

一、源码位置

从源码中能看到有一个【extension】文件夹(这点儿我还是比较意外的,插件的源码竟然也在源码里面,本来我还以为是另外一个需要单独下载的工程)

默认情况下它是没有蓝色小方块的,只有当你用到它时idea才会加一个蓝色小方块的标识。

二、开发模式下怎么使用

geoserver官方社区的插件在使用的时候,一般都是下载下来插件,然后放到geoserver安装目录的lib文件夹下,然后重启geoserver就行,但是在开发模式下怎么安装插件呢。

常规的思路是在主模块gs-web-app里面引用extension的下面的插件子模块应该可以了,但是我又在 pom.xml文件里发现了一些关于插件的profiles设置

于是乎,打开了maven的设置面板,勾选上想要使用的插件,再点击下刷新按钮就可以了 

三、文件资源管理插件(Resource Browser Tool)

1.概览 

       在maven的配置界面勾选上后,重启geoserver就能在浏览器界面中看到它了

没有做过i18n处理的小伙伴看到的估计名字是【Resource Browser】,这个后面再讲,这个文件资源管理器有个缺点,就是每次上传文件的时候只能上传一个,如果要想上传一个shp文件到服务器就废老劲了,咱们稍微改造下它,让它支持多文件上传

2.支持多文件上传

看过上面第一段的描述后可以看出来它的源码位置在这个地方

src/extension/web-resource

2.1 改动一

看过我前面文章的朋友们应该也知道,geoserver是基于Wicket做的,这个文件资源管理器也是一样的,先找到它的html页面

src/main/resources/org/geoserver/web/resources/PanelUpload.html

这个地方做第一个小改动

<input wicket:id="file" size="40" type="file" multiple>

在input标签上加一个multiple

2.2 改动二

在它的java类上添加查询上传的文件列表方法

org/geoserver/web/resources/PanelUpload.java

    /*** 获取上传的文件列表* @return List<FileUpload>*/public List<FileUpload> getFileUploadList() {return ((FileUploadField) get("file")).getFileUploads();}

2.3 改动三

在资源浏览器类中加获取上传的文件资源列表方法

org/geoserver/web/resources/PageResourceBrowser.java

    /*** 获取文件上传组件的文件列表* @param uploadPanel 文件上传组件* @return List<Resource>*/private List<Resource> getUploadPanelResourceList(PanelUpload uploadPanel) {String dir = uploadPanel.getDirectory();List<Resource> uploadPanelResourceList = new ArrayList<>();uploadPanel.getFileUploadList().forEach(singleFileUpload->{uploadPanelResourceList.add(store().get(Paths.path(dir, singleFileUpload.getClientFileName())));});return uploadPanelResourceList;}

2.4 改动四

在PageResourceBrowser类的上传按钮的提交事件回调中加处理方法

    @Overrideprotected boolean onSubmit(AjaxRequestTarget target, Component contents) {uploadPanel.getFeedbackMessages().clear();if (uploadPanel.getFileUpload() == null) {uploadPanel.error(new ParamResourceModel("fileRequired", getPage()).getString());} else {List<Resource> uploadPanelResourceList = getUploadPanelResourceList(uploadPanel);AtomicInteger successNumber = new AtomicInteger();uploadPanelResourceList.forEach(singleResource->{if (Resources.exists(singleResource)) {uploadPanel.error(new ParamResourceModel("resourceExists", getPage()).getString().replace("%", "/" + singleResource.path()));} else {try (OutputStream os = singleResource.out()) {IOUtils.copy(uploadPanel.getFileUpload().getInputStream(), os);treeView.setSelectedNode(new ResourceNode(singleResource, expandedStates), target);successNumber.getAndIncrement();
//                                            return true;} catch (IOException | IllegalStateException e) {uploadPanel.error(e.getMessage());}}});if(successNumber.get() == uploadPanelResourceList.size()){return true;}}target.add(uploadPanel.getFeedbackPanel());return false;}

到这儿这个功能就完成了,可以看到下面的多选文件的效果

3.国际化i18n配置

        关于i18n,geoserver官方也给出了一些描述

Translating GeoServer — GeoServer 2.25.x Developer Manual

我们就按照它官网的说明来(不配置也没关系,只不过默认显示的文字是英文)

3.1 第一步 新建GeoServerApplication_zh.properties资源包

从上图能看出来,这个插件默认只有德、法、韩等一些小国家的兼容,没有中文的,所以有必要让它兼容下中文,文件的内容可以拷贝GeoServerApplication.properties

3.2 第二步 翻译并转成 ISO-8859 编码

以插件的title为例在GeoServerApplication.properties中看到下面的描述

PageResourceBrowser.page.title=Resource Browser

翻译成中文是

PageResourceBrowser.page.title=文件资源管理器

但是GeoServerApplication.properties默认是不认中文的,只能用ISO-8859编码,所有要再做一个转换,网上在线转换的网址有很多,比如这个(传送门)

转换成ISO-8859编码后是

PageResourceBrowser.page.title=\u6587\u4ef6\u8d44\u6e90\u6d4f\u89c8\u5668

把其他的配置全改完之后重启geoserver就能看到插件的中文的界面了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3225962.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

微软Win11 24H2七月更新补丁KB5040435发布!附下载

系统之家于7月10日发出最新报道&#xff0c;微软为Win11用户发布了24H2版本七月的最新更新补丁KB5040435。用户升级系统后&#xff0c;会发现版本号升至 26100.1150。此次更新针对远程身份验证拨入用户服务(RADIUS)协议与 MD5冲突等问题进行修复。接下来跟随小编看看此次更新的…

中国 水文站 分布 矢量数据

中国 水文站 分布 矢量数据 数据介绍 水文站hydrological station是观测及搜集河流、湖泊、水库等水体的水文、气象资料的基层水文机构。中国把水文站按性质分为基本站和专用站。前者的任务是收集实测资料&#xff0c;提供探索基本水文规律的资料&#xff0c;满足水资源评价、…

两年经验前端带你重学前端框架必会的ajax+node.js+webpack+git等技术 Day3

前端框架必会的&#xff08;ajaxnode.jswebpackgit&#xff09;个人学习心得作业及bug记录 Day3 你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​ gitee https://gitee.com/Qiuner &#x1f339; 如果本…

sdwan是硬件还是网络协议?

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;并不是一个硬件产品或单一的网络协议&#xff0c;而是结合了软件、硬件和网络技术的一种解决方案。SD-WAN的核心在于其软件定义的特性&#xff0c;它通过软件来控制和管理广域网的…

使用机器学习 最近邻算法(Nearest Neighbors)进行点云分析

使用 NearestNeighbors 进行点云分析 在数据分析和机器学习领域&#xff0c;最近邻算法&#xff08;Nearest Neighbors&#xff09;是一种常用的非参数方法。它广泛应用于分类、回归和聚类分析等任务。下面将介绍如何使用 scikit-learn 库中的 NearestNeighbors 类来进行点云数…

干货!| 针对前端加密爆破的方法及实战案例

一 、概述 现在基本上大部分web应用系统都在后台登录界面对密码使用了js加密&#xff0c;有的是将用户名密码同时进行了加密&#xff0c;对于使用了加密的我们可以利用burp插件直接调用加密函数本地加密后再进行爆破&#xff0c;也可以使用一些工具直接模拟浏览器登录界面进行…

基于 Springboot 红酒庄内部信息管理系统 设计实现

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统流程 &#x1f4da; 系统架构设计 &#x1f4da; 数据库设计 6.1数据三范式&#xff1a; &#x1f4da; 系统功能的具体实现 &#x1f4ac; 系统登录和首页 系统登录 首页 &#x1f4ac; 用户功能模块 添…

基于JavaSpringBoot+Vue+uniapp微信小程序校园宿舍管理系统设计与实现(论文7000字参考+源码+LW+部署讲解)

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

MES系统看板管理模块详细介绍

车间数字化看板作为一种管理工具&#xff0c;广泛应用于制造业&#xff0c;通过在生产现场设置看板&#xff0c;企业能够实现对生产过程的全面、实时的监控和管理。 MES系统提供实时、准确的看板管理&#xff0c;它可以将生产现场的各种数据实时汇总、分析并展示&#xff0c;帮…

AI绘画comfyui工作流,商业海报设计、Logo设计,一个comfyui工作流就能搞定!

前言 创新设计工作流&#xff1a;轻松打造LOGO和海报 本文涉及的工作流和插件&#xff0c;需要的朋友请扫描免费获取哦 —HAPPY NEW YEAR— 大家好&#xff01;今天我要分享的是一个高效且创新的设计工作流&#xff0c;这一工具由国外的网友无私分享&#xff0c;适用于LOGO设…

11计算机视觉—语义分割与转置卷积

目录 1.语义分割应用语义分割和实例分割2.语义分割数据集:Pascal VOC2012 语义分割数据集预处理数据:我们使用图像增广中的随机裁剪,裁剪输入图像和标签的相同区域。3.转置卷积 上采样填充、步幅和多通道填充步幅多通道转置卷积是一种卷积:重新排列输入和核转置卷积是一种卷…

一举跃升!Cancer Discovery修正后IF30.6!

在科学出版界&#xff0c;影响因子&#xff08;IF&#xff09;被广泛认为是衡量期刊学术影响力的重要指标。每年6月&#xff0c;科睿唯安会发布期刊引证报告&#xff08;JCR&#xff09;&#xff0c;但这并不是最终结果。在10月份&#xff0c;JCR会进行统一的更新&#xff0c;包…

LLM大模型应用中的安全对齐的简单理解

LLM大模型应用中的安全对齐的简单理解 随着人工智能技术的不断发展&#xff0c;大规模语言模型&#xff08;如GPT-4&#xff09;的应用越来越广泛。为了保证这些大模型在实际应用中的性能和安全性&#xff0c;安全对齐&#xff08;Safe Alignment&#xff09;成为一个重要的概…

C语言学习笔记[23]:循环语句while①

C语言除了顺序结构和选择结构还有循环结构 whilefordo...while while循环 //while 语法结构 while(表达式)循环语句; 表达式的结果为真&#xff0c;则执行循环语句&#xff0c;否则循环停止 例如&#xff1a;打印1~10 #include <stdio.h>int main() {int i 1;whil…

PostgreSQL16安装Mac(brew)

问题 最近需要从MySQL切换到PostgreSQL。我得在本地准备一个PostgreSQL。 步骤 使用brew安装postgresql16: arch -arm64 brew install postgresql16启动postgresql16: brew services start postgresql16配置postgresql环境变量&#xff0c;打开环境变量文件&#xff1a; …

[leetcode] largest-divisible-subset 最大整除子集

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> largestDivisibleSubset(vector<int>& nums) {int len nums.size();sort(nums.begin(), nums.end());// 第 1 步&#xff1a;动态规划找出最大子集的个数、最大子集中的最大整…

最新Wireshark查看包中gzip内容

虽然是很简单的事情&#xff0c;但是网上查到的查看gzip内容的方法基本都是保存成zip文件&#xff0c;然后进行二进制处理。 其实现在最新版本的Wireshark已经支持获取gzip内容了。 选中HTTP协议&#xff0c;右键选择[追踪流]->[HTTP Stream] 在弹出窗口中&#xff0c;已…

数据中心巡检机器人助力,河南某数据中心机房智能化辅助项目交付

随着数据中心规模的不断扩大和业务需求的不断增长&#xff0c;确保其高效、安全、稳定地运行变得愈发重要。传统的人力巡检方式存在效率低、误差高、成本大等问题&#xff0c;难以满足现代数据中心的需求。为解决这些挑战&#xff0c;智能巡检机器人应运而生&#xff0c;成为数…

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud【翻译与解读】

LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud 摘要 特征提取和匹配是许多机器人视觉任务的基本组成部分&#xff0c;如 2D 或 3D 目标检测、识别和配准。2D 特征提取和匹配已取得巨大成功。然而&#xff0c;在 3D 领域&#xff0c;当前方法由于描述性差…

D634-341C电液伺服系统比例控制阀 R40KO2M0NSS2

D634-341C/R40KO2M0NSS2宁波秉圣现货供应 宁波秉圣工业技术有限公司是一家专门从事于欧洲,美国等多国家的进口备件进出口销售、技术咨询、技术服务、自动化设备服务为一体的贸易公司。公司的优势品牌如下&#xff1a;德国REXROTH&#xff08;力士乐&#xff09;、德国MOOG、美…