openlayer跨域访问问题解决方案


描述:正如我们在Arcgis中遇到的问题一样,我们在访问openlayer时也会出现同样的问题,表现如下
在官网可正常访问资源这里写图片描述
在本地访问同样资源时,无法打开这里写图片描述
使用OpenLayers访问WFS服务是存在跨域问题,必须使用设置代理的方法才能正常使用,设置方法如下。
1.打开OpenLayers\examples\ 目录,找到proxy.cgi文件,将其拷贝到网络应用的\WEB-INF\cgi文件夹下
2.编辑proxy.cgi文件,在allowedHosts数组段内添加远程地址,如geoserver服务器页面是192.168.0.4:8888/geoserver/那么就添加’192.168.0.4:8888’。
3.安装python27到默认的c:/Python27/目录下,经过测试python27可以正常使用,新版本无法保证正常使用,如python33无法正常使用该代理。
4.在应用的web.xml文件内添加如下内容

<?xml version="1.0" encoding="UTF-8"?>
<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:/Python27/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> 

5.修改Tomcat的Tomcat/conf/context.xml文件,将修改为
6.运行测试。假设该应用部署为http://localhost:8080/map/。浏览器上访问:http://localhost:8080/map/cgi/proxy.cgi,正常情况下反馈的是OpenLayers的主页。
7.在js中使用代理。在script开始的地方添加OpenLayers.ProxyHost=”cgi/proxy.cgi?url=”这句话。使用该方法经过测试可以解决跨域访问问题,如将geoserver的预览图层页面代码保存下来,在script开始的地方添加OpenLayers.ProxyHost = “cgi/proxy.cgi?url=”,部署该应用后即可测试,效果应该和原页面一致。

转载自:https://blog.csdn.net/yiranaiu/article/details/44673979

You may also like...