1

我想为 openlayers 设置一个代理来使用,所以我按照以下步骤操作:

  1. 从 OpenLayers 网站下载 proxy.cgi 文件:http: //trac.osgeo.org/openlayers/browser/trunk/openlayers/examples/proxy.cgi

  2. 修改 proxy.cgi 文件以将我的域包含在 allowedHosts 列表中:

    allowedHosts = ['localhost:6901']

  3. 将 proxy.cgi 文件复制到以下文件夹:

    $TOMCAT_PATH$/webapps/yourApp/WEB-INF/cgi/

  4. 通过添加以下部分来修改 Web 应用程序的文件 web.xml。您可以在以下位置找到文件

    $TOMCAT_PATH$/webapps/yourApp/WEB-INF/web.xml

注释:如果您的 webapp 不存在 web.xml 文件,只需自己创建或从另一个 webapp 复制并修改它。(创建!)

注释: “executable”参数的“param-value”必须包含 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>WEB-INF/cgi</param-value> 
    </init-param> 
    <init-param> 
      <param-name>executable</param-name> 
      <param-value>c:\python25\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> 

  <servlet-mapping> 
    <servlet-name>cgi</servlet-name> 
    <url-pattern>/cgi-bin/*</url-pattern> 
  </servlet-mapping>
  1. 通过添加以下元素来修改 Web 应用程序的文件 context.xml。您可以在以下位置找到文件$TOMCAT_PATH$/webapps/yourApp/META-INF/context.xml

  2. 重启Tomcat

  3. 要将代理与 OpenLayers 一起使用,只需在代码中包含这一行:

    OpenLayers.ProxyHost = "/yourWebApp/cgi-bin/proxy.cgi?url=";

但是当我尝试像这样使用它时:

/webappname/cgi-bin/proxy.cgi?url=labs.metacarta.com

我收到此错误:

Some unexpected error occurred. Error text was: list index out of range

我认为它与 os.environ["REQUEST_METHOD"] 有关,但我不知道它是如何相关的..

4

3 回答 3

1

您正在提交:

/webappname/cgi-bin/proxy.cgi?url=labs.metacarta.com

但是 proxy.cgi 脚本正在尝试这样做:

host = url.split("/")[2]

尝试http://labs.metacarta.com作为您的 url,以便 proxy.cgi 有一些斜线可以拆分,或者修改它以更智能地解析 url。

于 2012-09-11T21:55:50.587 回答
1

您要求的是未定义的环境变量。

您需要捕获并处理异常或使用os.environ.get

try:
    methodq = os.environ["REQUEST_METHOD"]
except KeyError:
    methodq = "default value"

或者:

methodq = os.environ.get("REQUEST_METHOD", "default value")
于 2012-08-05T13:49:01.647 回答
0

答案是:您没有在 Tomcat 上安装或使用 cgi 代理。

cgi 适用于用作前端服务器的 apache 服务器或 IIS。Tomcat 可能坐在它后面。Apache的配置详解在:http: //tomcat.apache.org/tomcat-6.0-doc/proxy-howto.html

请注意,OpenLayers 警告说它的 proxy.cgi 只是一个示例,可能没有足够好的检查来阻止它被利用,即它可能运行一些恶意脚本。

如果您仅在 Tomcat 上提供 OpenLayers 客户端页面,并且它包含来自其他 GeoServer 或 Mapserver 的图层,则可以使用代理 servlet 并将其指定为:

OpenLayers.ProxyHost = "服务于该页面的服务器上的 sevlet URL";

http://wiki.apache.org/tomcat/ServletProxy

https://svn.openxdata.org/Experimental/openXmapper/trunk/gwt-openlayers-server/src/main/java/org/gwtopenmaps/openlayers/server/GwtOpenLayersProxyServlet.java

也有反向代理或重写 sevlet 解决方案。请在这些上谷歌。

于 2013-11-26T23:15:33.740 回答