Tomcat 下配置OpenLayers proxy.cgi代理
摘要:在OpenLayers访问WFS服务时,会遇到跨域的问题而导致服务无法访问。此时,需要在应用程序中设置代理,通过代理进行访问。本文介绍在tomcat进行proxy.cgi文件配置,以及在调用代理过程中如何设置其访问路径。
1.获取代理文件proxy.cgi
如果你下载了openLayers包,在OpenLayers-2.13.1\examples文件夹下,可以发现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
Tomcat 下配置OpenLayers proxy.cgi代理的更多相关文章
- CAS (3) —— Mac下配置CAS客户端经代理访问Tomcat CAS
CAS (3) -- Mac下配置CAS客户端经代理访问Tomcat CAS tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1.9 ...
- Tomcat 下配置一个ip绑定多个域名
原文:http://pkblog.blog.sohu.com/68921246.html 在网上找了半天也没找到相关的资料,都说的太含糊.本人对tomcat下配置 一ip对多域名的方法详细如下,按下面 ...
- 【CAS单点登录视频教程】 第04集 -- tomcat下配置https环境
目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAuthenticati ...
- 在Tomcat下配置Solr 4.x 版本
solr是一款非常优秀的全文检索服务器,最新版本在配置和前台页面上都做了较大的改动, 所以对用惯了老版本的朋友们来说,再重新配置新版本的solr,无疑又是一件痛苦的事情. 配置环境:windows ...
- tomcat下配置https环境
在网上搜了一下,内容不是非常完好. 现进行整理,做个学习笔记,以备以后使用. (1)进入到jdk下的bin文件夹 (2)输入例如以下指令"keytool -v -genkey -alias ...
- Springmvc +JNDI 在Tomcat下 配置数据源(转)
一. 简介 jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务 ...
- tomcat 下配置ajax 跨域 tomcat font face 跨域 java跨域
tomcat ajax跨域和css字体 font face 跨域一样适用 CORS介绍 它在维基百科上的定义是:跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式 ...
- tomcat下配置https环境(windows环境)
在网上搜了一下,内容不是很完善.现进行整理,做个学习笔记,以备以后使用. (1)进入到jdk下的bin目录 (2)输入如下指令“keytool -v -genkey -alias tomcat -ke ...
- tomcat下配置https方式
[本地HTTPS]①.<Connector SSLEnabled="true" clientAuth="false" keystoreFile=" ...
随机推荐
- java:IO-读写大文件
import java.io.*; class Test { public static void main(String args[]){ FileInputStream fin =null; Fi ...
- C++:常类型Const
常类型:使用类型修饰符const说明的类型,常类型的变量或对象成员的值在程序运行期间是不可改变的. 3.10.1 常引用 如果在说明引用时用const修饰,则被说明的引用为常引用.如果用常引用做形参, ...
- 关于java -version版本问题
因为安装了Oracle,而Oracel会自带JDK,安装完成后,会自动把自己的JDK设置在最前面(path变量里). 这就是为什么结果与事实不相同的原因. 解决方法: 进入系统环境变量,找到path变 ...
- 车牌识别LPR(七)-- 字符特征
第七篇:字符特征 选择的字符特征应该满足以下条件: (1)选取的字符特征具有较强的鲁棒性,不受字符变形.弯曲等影响. (2)两个字符的字符特征不能完全相同,但部分相同是允许的,即选择的字符特征是唯一的 ...
- (三)CSS高级语法
选择器分组 可以对选择器进行分组,被分组的选择器可以分享相同的声明,用逗号将需要分组的选择器分开.例如: h1,h2,h3,h4,h5,h6 { color: green; } 继承以及其问题一般,子 ...
- Android的底层库libutils介绍
第一部分 libutils概述 libutils是Android的底层库,这个库以C++实现,它提供的API也是C++的.Android的层次的C语言程序和库,大都基于libutils开发. libu ...
- 自定义tab bar控件 学习资料
http://blog.csdn.net/zoeice/article/details/8068671 import java.util.Vector; import android.content. ...
- NLP基本任务-nltk_data文本分割
将文本分割为句子 nltk.sent_tokenize(text,language) text:需要分割的文本 language:语言种类 czech捷克语 danish丹麦语 dutch荷兰语 en ...
- 函数rec_get_nth_field_offs_old
/************************************************************//** The following function is used to ...
- angularjs指令中的compile与link函数详解(转)
http://www.jb51.net/article/58229.htm 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link, ...