js跨域调用报表
基于效率的原因,將頁面和報表部署在不同服務器上,在頁面中引入報表。此時如果想通過頁面上的按鈕對報表進行操作就會出現問題,無法調用報表的函數,IE提示沒有權限,這就是javascript的跨域問題。Javascript出于安全性考慮,是不允許跨域調用其他頁面的對象的。所以上述看似很普通的操作沒辦法實現。
這樣的需求應該是很普遍的,這也是一個經典的問題,網上相關文章很多但是沒有一個完美的解決方案,只能根據自己的需要來進行設置。
現在我們使用apache反向代理ProxyPass和mod_rewrite,實現頁面按鈕跨域調用潤乾報表函數
具體設置方法:
先安裝2.2版的apache服務器。打開配置文件conf\httpd.conf 。
先啟用相關的功能,去掉這幾項前面的“#”
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule rewrite_module modules/mod_rewrite.so
(在文件的最下面添加下面的幾個設置)
(頁面要通過apache訪問)
<IfModule mod_rewrite.c>
?RewriteEngine On
?RewriteRule ^/show/(.*)$? http://192.168.0.84:8080/show/$1
</IfModule>
(遇到/show的請求會自動跳轉。例如:apache的服務的路徑為192.168.0.1:80
當輸入http://192.168.0.1:80/show/show.jsp時,瀏覽器自動跳轉到http://192.168.0.84:8080/show/show.jsp頁面)
(報表頁面通過apache調用)
ProxyRequests Off
ProxyPass /report? balancer://name stickysession=jsessionid nofailover=On
<proxy balancer://name/>
??? BalancerMember http://192.168.28.131:8080/demo? loadfactor=1
</proxy>
(報表raq文件通過apache調用)
ProxyPass /reportFiles? balancer://name stickysession=jsessionidnofailover=On
<proxy balancer://name/>
??? BalancerMember http://192.168.28.131:8080/demo? loadfactor=1
</proxy>
(ProxyPass為代理轉發的Url,即將所有訪問/report的請求轉發到群集下面設置的服務器上。
loadfactor為各主機間的負載比例參數,可是設置不同指數
BalancerMember為群集的成員,可以設置多個,即群集服務器A或B,負載均衡服務器會根據均衡規則來將請求轉發給BalancerMember。(現在只設置一個)
例如:apache的服務的路徑為192.168.0.1:80
當程序中引用的報表路徑為http://192.168.0.1:80/report/jsp/report.jsp時,apache會引入http://192.168.28.131:8080/demo/jsp/report.jsp這個文件)
以上是Apache服務器的設置。
對于報表服務器還要做一些設置,因為經過了apache的轉發會造成路徑不對,設置固定的路徑。
在報表服務器應用中的reportConfig.xml文件中設置
<config>
? <name>appUrlPrefix</name>
? <value>http://192.168.0.84:80/report</value>
</config>
通過上面的設置,在進行訪問的時候,所有的頁面都處在同一個域中。js可以實現”跨域”調報表函數的功能。
?
總結
- 上一篇: CentOS 6.7安装Storm 0.
- 下一篇: 树莓派编译C++