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