GeoServer的Http请求派发过程------GeoServer研究随笔一

2024-03-02 19:38

本文主要是介绍GeoServer的Http请求派发过程------GeoServer研究随笔一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GeoServer是著名的、遵循OGC规范的、开源的WebGIS实现之一,其应用Spring的Web MVC作为OGC服务外部HTTP请求处理框架,把HTTP请求分派给WMS、WFS、WCS等服务实现,这些服务实现则基于Geotools库提供的功能来完成。以下以GetMap HTTP请求总结说明派发过程。(OGC服务之外,GeoServer的管理及其他一些功能实现则基于Struts架构)。

    Spring Web MVC的核心控制类org.springframework.web.servlet.DispatcherServlet,也就是前置控制器(Pre Control),任何HTTP请求都可以发送给这个Servlet,做一些HTTP请求的通用处理(比如文件上载)后,通过合适的派发机制转发给不同的Spring容器中的Bean,也就是不同业务逻辑、服务处理的控制器(Logic Control),由这些控制器结合不同模型(Model),如空间数据模型、属性数据模型、地图样式模型等,进行处理,形成结果模型,并经DispatcherServlet返回客户端。从而在Spring的Web MVC的基础上形成GeoServer的MVC架构实作。

    一、GeoServer的Web工程的配置文件web.xml中说明了那些URL要传递到DispatcherServlet:

    1、Servlet声明

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
    </servlet>

    2、URL Mapping

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/wms/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/wcs/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/wfs/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/ows/*</url-pattern>
    </servlet-mapping>
    类似的还有一些,请参阅web.xml。

    二、不同GeoServer的工程Spring配置文件applicationContext.xml中通过org.springframework.web.servlet.handler.SimpleUrlHandlerMapping说明不同的URL路径需要不同的业务逻辑控制器做进一步处理。

    工程wms、wfs、web、wcs、wcs1_1、rest、gwc等,都有类似的说明,并说明了GeoServer的控制器dispatcher、putStylesWrapper、filePublisher、restWrapper、gwcRestDispatcher、geowebcacheDispatcher、geowebcacheDispatcher等做进一步处理。

    其中OGC的GetMap请求是由dispatcher做处理的,其在main工程的配置文件applicationContext.xml中声明如下:

    <bean id="dispatcher" class="org.geoserver.ows.Dispatcher">

    GeoServer的Dispatcher类扩展org.springframework.web.servlet.mvc.AbstractController,并通过AbstractController实现Spring DispatcherServlet要求的接口org.springframework.web.servlet.mvc.Controller。

    三、GeoServer Dispatcher从HTTP请求中取得要访问的服务和要执行的操作以及操作参数,并调用对应的Bean服务方法。http://localhost:8080/geoserver/wms?bbox=-74.01199448397661,40.70732689845813,-74.00841053684495,40.71216558957052&styles=&Format=application/openlayers&request=GetMap&version=1.1.1&layers=tiger:poi&width=457&height=550&srs=EPSG:4326,该请求中wms是要请求的服务,GetMap是请求的服务方法,tiger:poi是要访问的地理数据。Dispatcher找到到服务实现封装类DefaultWebMapService,调用其getMap方法,getMap方法进一步找到服务方法的实现类GetMap,由GetMap找到合适的GetMapProducer实现,并调用该Producer类的相关方法,形成最终要返回到客户端的结果。GetMapProducer的子类有很多,如PNGMapProducer、PDFMapProducer等,根据请求的不同获得不同的Producer并生成不同的结果。相关Producer一般以GeoTools类库为基础实现。

这篇关于GeoServer的Http请求派发过程------GeoServer研究随笔一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/767220

相关文章

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送