关于在做java的Web开发中遇到跨域访问的问题的解决方法汇总

来源:互联网 发布:软件编程语言 编辑:程序博客网 时间:2024/05/19 00:41

解决问题的关键是怎么把第二个域中的内容得到且具有简单的操作权限。 

 

1、通过域名来解决,

      将两个不同的环境的主域名配置成同一个域名,这样就不存在IE中的信任与不信任的问题,就可以互相访问了。

 

 

 

 2、抓取页面内容的方法 

      在主域中增加抓取远程页面内容的方法。

 

 

//这是要引入的包
import java.io.InputStream;
import java.net.URLConnection;
import java.net.URL;
 
//这是得到远程页面内容的方法

 /**
  * 功能:得到访问页面的内容(源代码)
  * @param url
  * @return 如果出现异常则返回null
  */
 public String getContent(String url) {
  
  StringBuffer result =new StringBuffer();
 
  try {         
       
   URL uRL = new URL(url); 
 
   URLConnection connection = uRL.openConnection();    
  
   
   connection.setDoInput(true);   
      
   connection.connect();
   
   InputStream inputstream = connection.getInputStream();
   
   java.io.BufferedReader reader = new java.io.BufferedReader(
     new java.io.InputStreamReader(inputstream));
   
   String temp = "";
   
   while ((temp = reader.readLine()) != null) {
    
    result.append(temp);
    
   }
   
   reader.close();
   
   reader = null;
   
   inputstream.close();
   
   inputstream = null;
 
  } catch (Exception e) {
   
   e.printStackTrace();
 
   result = null;   
   
  }
  
   return result==null?null:result.toString();
 }
 
  把远程页面中的内容抓取到之后,在自已的域中就可以随便操作了。
 
 
3、用动态脚本传数据,用Dom方法操作动态JS脚本请求
  
 
//创建一个脚本节点
    var oScript = document.createElement('script');
    //指定脚本src src可以指向任意域名
    //注意src不再指向静态js,而是带着查询参数指向一个动态脚本广播服务。
    oScript.src = "http://www.myurl.com/XXquery.jsp?pnudate="+Math.random()+"&"+yourQueryString;   
    //如果指定了charset 同时还可以解决xmlHttpRequest另一大困扰 乱码问题                                                                                                                           
    //oScript.charset = "utf-8";
    //通过Dom操作把这个新的节点加入到文档当中                                 
    document.getElementsByTagName("head")[0].appendChild(oScript);
 
这样只要XXquery.jsp的输出是可执行的javaScript脚本,比如:djsCallBack({jsondata});
 
 

当他从服务器返回后就会自动执行,你可以方便的用json方式来做数据传递了。
要注意,您的脚本请求最好带上时间戳,避免浏览器缓存造成取回的数据是缓存的数据的问题。
 
因为URL相同时,很有可能IE就不去执行,远程调用,而用本地缓存。


 
 
原创粉丝点击