zoukankan      html  css  js  c++  java
  • Tomcat 下配置OpenLayers proxy.cgi代理

    摘要:在OpenLayers访问WFS服务时,会遇到跨域的问题而导致服务无法访问。此时,需要在应用程序中设置代理,通过代理进行访问。本文介绍在tomcat进行proxy.cgi文件配置,以及在调用代理过程中如何设置其访问路径。

    1.获取代理文件proxy.cgi

    如果你下载了openLayers包,在OpenLayers-2.13.1examples文件夹下,可以发现cgi文件。还可以去下载(http://trac.osgeo.org/openlayers/browser/trunk/openlayers/examples/proxy.cgi)。

    2.在你的工程中引用proxy.cgi文件

    将获得的cgi文件拷贝至当前应用的目标路径下,当前应用中的路径可以自己指定。

    添加远程访问的url地址,在cgi文件中的allowedHosts数组中添加远程地图服务所在机器的IP。

    allowedHosts = ['www.openlayers.org', 'openlayers.org',

                    'labs.metacarta.com', 'world.freemap.in',

                    'prototype.openmnnd.org', 'geo.openplans.org',

                    'sigma.openplans.org', 'demo.opengeo.org',

                    'www.openstreetmap.org', 'sample.azavea.com',

                    'v2.suite.opengeo.org', 'v-swe.uni-muenster.de:8080',

                    'vmap0.tiles.osgeo.org', 'www.openrouteservice.org',

                    'maps.wien.gv.at','mapserverIP:8080']

    3.配置proxy.cgi映射路径

    在应用程序的web.xml文件中配置cgi文件的映射路径,将下列代码拷贝至当前应用的web.xml文件中,同时修改sevlet初始化参数cgiPathPrefix和executable,其中参数cgiPathPrefix指得是cgi在当前应用中的路径,参数executable指应用程序运行的电脑上的python.exe文件所在物理路径,如果电脑上没有安装python,则需要进行安装。

    个人认为OpenLayers 中的通过代理执行请求的方式,是通过当前工程默认的default servlet将proxy.cgi文件映射到web.xml文件中配置的python可执行程序中执行,proxy.cgi实际上一段python代码,在执行python代码的过程中进行代理访问。

    <servlet>

        <servlet-name>cgi</servlet-name>

      <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>

           <init-param>

                <param-name>debug</param-name>

                <param-value>0</param-value>

            </init-param>

            <init-param>

                <param-name>cgiPathPrefix</param-name>

          <param-value>media/js/openLayers_/2.13.1/cgi-bin</param-value>

            </init-param>

              <init-param>

                   <param-name>executable</param-name>

                   <param-value>c:/Python26/ArcGIS10.0/python.exe</param-value>

             </init-param>

             <init-param>

                 <param-name>passShellEnvironment</param-name>

                 <param-value>true</param-value>

             </init-param>

            <load-on-startup>5</load-on-startup>

     </servlet>

     <!-- The mapping for the default servlet-->

     <servlet-mapping>

        <servlet-name>default</servlet-name>

        <url-pattern>/</url-pattern>

      </servlet-mapping>

      <servlet-mapping>

         <servlet-name>cgi</servlet-name>

         <url-pattern>/cgi/*</url-pattern>

      </servlet-mapping>

    4.设置tomcat的context.xml文件

    context.xml文件位于tomcat/conf文件夹下,建议将其拷贝一份该文件至但当前应用程序的META-INF文件夹中,并为该文件的<Context>节点增加属性

    <Context privileged="true">

    至此,openLayers的代理proxy设置完成,启动tomcat在浏览器地址栏中输入

    http://localhost:8080/应用程序名称/cgi/proxy.cgi

    如果成功的话,将会显示OpenLayers主页

    否则会显示404错误

       注意:在未连接互联网的情况下通过上述路径访问proxy.cgi时,会显示如下异常信息。

    5.调用代理

    在地图初始化的最前面添加如下代码,以调用代理proxy。

    OpenLayers.ProxyHost = "cgi/proxy.cgi?url=";

    配置好的代理文件,默认处于应用程序根目录下,在调用过程中需要根据其加载页面与根目录的相对路径,设置其路径。即上述语句中“cgi/proxy.cgi?url=”实际上应为“relativeUrl+cgi/proxy.cgi?url=”,其中relativeUrl为加载该语句所在js文件的页面与应用程序根目录之间的相对路径。 

    按照上述设置,要确保“运行过程中调用代理的页面url”+ OpenLayers.ProxyHost路径应为“应用程序名称/cgi/proxy.cgi”,若不符合这种要求,应当调整运行页面与代理之间的相对路径。

    在运行过程中,代理的路径默认情况下为加载 “其设置语句”(即上述语句)所在js文件的页面url+ cgi/proxy.cgi,特别需要注意地方是,如果加载 “代理设置语句”所在js文件的页面不在应用程序的根目录下,即webcontent或webroot目录下(如webcontent/index.html),而是在其子文件夹下(如webcontent/gis/map.html)下,那么在指定代理路径的时候如果将其设置为“cgi/proxy.cgi?url=”就会出现代理无法访问的错误,因为程序运行过程中会将代理的路径映射为“应用程序名/gis/cgi/proxy.cgi”,而实际上我们配置的代理路径为“应用程序名/cgi/proxy.cgi”,解决这个问题需要在设置代理路径时,将其指定为其加载页面的上一级目录,即:

    OpenLayers.ProxyHost = "../cgi/proxy.cgi?url=";

    题外话:web应用程序中的路径有三种情况

    (1)“cgi/proxy.cgi”指当前url+”/”+ cgi/proxy.cgi

    (2)“/cgi/proxy.cgi”指应用程序根目录下的cgi/proxy.cgi

    (3)“../cgi/proxy.cgi”指当前url的上一级目录下的cgi/proxy.cgi

  • 相关阅读:
    邪恶改装2:用单片机实现一次简单的wifi密码欺骗
    TPYBoard自制微信远程智能温湿度计
    什么是私有网络
    DCHP是什么意思
    ipconfig 命令有什么作用
    什么是网关及网关作用
    什么叫路由
    kvm libvirt 虚拟机管理
    通过python-libvirt管理KVM虚拟机 源码
    通过python-libvirt管理KVM虚拟机 代码实现
  • 原文地址:https://www.cnblogs.com/gis-dolphin/p/set_OpenLayers_proxy_in_tomcat.html
Copyright © 2011-2022 走看看