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

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww