OpenLayers跨域请求WFS服务在Tomcat环境下的实现

由于项目的地图数据放在不同的服务器上面,因此进行POI搜索和路径导航的时候需要进行跨域检索,容器环境用的是Tomcat 7.0.53.配置跨域请求的步骤为:

1. 下载Proxy.cgi,或者到Openlayers的安装目录中,安装盘符\OpenLayers-2.13.1\examples中查找,或者直接拷贝本文下面的代码到proxy.cgi文件中。并修改allowedHosts,添加需要访问的远程服务器地址:端口和本地IP地址:端口。最后把proxy.cgi文件放在CGI文件夹中,拷贝到网站WEB-INF目录下,如图所示

OpenLayers跨域请求WFS服务在Tomcat环境下的实现_第1张图片

下面是proxy.cgi源码,其中192.168.1.18:8090','192.168.1.50:8080','192.168.1.49:8080','192.168.1.18:8080','localhost:8090'是本文添加的远程服务器地址和本地地址。

#!/usr/bin/envpython
 
 
"""Thisis a blind proxy that we use to get around browser
restrictionsthat prevent the Javascript from loading pages not on the
sameserver as the Javascript.  This hasseveral problems: it's less
efficient,it might break some sites, and it's a security risk because
peoplecan use this proxy to browse the web and possibly do bad stuff
withit.  It only loads pages via http andhttps, but it can load any
contenttype. It supports GET and POST requests."""
 
importurllib2
importcgi
importsys, os
 
#Designed to prevent Open Proxy type stuff.
 
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','192.168.1.18:8090','192.168.1.50:8080','192.168.1.49:8080','192.168.1.18:8080','localhost:8090']
 
method= os.environ["REQUEST_METHOD"]
 
ifmethod == "POST":
    qs = os.environ["QUERY_STRING"]
    d = cgi.parse_qs(qs)
    if d.has_key("url"):
        url = d["url"][0]
    else:
        url ="http://www.openlayers.org"
else:
    fs = cgi.FieldStorage()
    url = fs.getvalue('url',"http://www.openlayers.org")
 
try:
    host = url.split("/")[2]
    if allowedHosts and not host inallowedHosts:
        print "Status: 502 BadGateway"
        print "Content-Type:text/plain"
        print
        print "This proxy does not allowyou to access that location (%s)." % (host,)
        print
        print os.environ
 
    elif url.startswith("http://") orurl.startswith("https://"):
   
        if method == "POST":
            length =int(os.environ["CONTENT_LENGTH"])
            headers ={"Content-Type": os.environ["CONTENT_TYPE"]}
            body = sys.stdin.read(length)
            r = urllib2.Request(url, body,headers)
            y = urllib2.urlopen(r)
        else:
            y = urllib2.urlopen(url)
       
        # print content type header
        i = y.info()
        if i.has_key("Content-Type"):
            print "Content-Type: %s"% (i["Content-Type"])
        else:
            print "Content-Type:text/plain"
        print
       
        print y.read()
       
        y.close()
    else:
        print "Content-Type:text/plain"
        print
        print "Illegal request."
 
exceptException, E:
    print "Status: 500 UnexpectedError"
    print "Content-Type: text/plain"
    print
    print "Some unexpected error occurred.Error text was:", E


2. 修改tomcat配置文件web.xml,很多代码的该文件中是存在的,只不过是添加了注释,把注释去掉即可。修改如下

   

 
        cgi
        org.apache.catalina.servlets.CGIServlet
        
          debug
          0
        
        
          cgiPathPrefix
          WEB-INF/cgi
        
		
			executable
			C:/Python27/python.exe
		
		
			passShellEnvironment
			true
		
         5
    



  


  
  
  
  

    
    
        default
        /
    

	
		cgi
		/cgi/*
	

其中有一个节点要注意,该节点配置了Python的路径,如果电脑没有安装python需要安装,并且配置好路径。

        executable

        C:/Python27/python.exe

  

3. 修改tomcat配置目录中content.xml文件,在Content节点中添加privileged="true"属性。





 
    
   WEB-INF/web.xml
 
    
    
 
    
    
 

4. 配置完成,开始你的跨域访问吧。


你可能感兴趣的:(OpenLayers跨域请求WFS服务在Tomcat环境下的实现)