1. 程式人生 > >openlayer跨域訪問問題解決方案

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=”,部署該應用後即可測試,效果應該和原頁面一致。