真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java項目中如何解決跨域問題

Java項目中如何解決跨域問題?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)從2013年成立,先為秦都等服務(wù)建站,秦都等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為秦都企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

前言

相信大家在寫前端腳本的時候經(jīng)常會遇到發(fā)送數(shù)據(jù)到后臺的情況,但是由于瀏覽器的限制,不同域名之間的數(shù)據(jù)是不能互相訪問的,那前端怎么和后端如何進行數(shù)據(jù)之間的交換呢?

JavaScript由于安全性方面的考慮,不允許頁面跨域調(diào)用其他頁面的對象,那么問題來了,什么是跨域問題?

答:這是由于瀏覽器同源策略的限制,現(xiàn)在所有支持JavaScript的瀏覽器都使用了這個策略。那么什么是同源呢?所謂的同源是指三個方面“相同”:

  1. 域名相同
  2. 協(xié)議相同
  3. 端口相同
     

下面就舉幾個例子來幫助更好的理解同源策略。

URL說明是否允許通信
http://www.a.com/a.js 
     http://www.a.com/b.js
同一域名允許
http://www.a.com/a.js 
     http://www.b.com/a.js
不同域名不允許
http://www.a.com:8000/a.js
     http://www.a.com/b.js
同一域名不同端口不允許
https://www.a.com/a.js 
     http://www.a.com/b.js
同一域名不同協(xié)議不允許

在JAVA中處理跨域問題,通常有以下兩種常用的解決方法。

第一種解決方法

后臺代碼在被請求的Servlet中添加Header設(shè)置:

response.setHeader("Access-Control-Allow-Origin", "*");
PrintWriter out =null;
try
{
 out = response.getWriter();
} catch (IOException e)
{
 // TODO Auto-generated catch block
 e.printStackTrace();
}
out.print("{'status':'ok'}");
out.flush();
out.close();

Access-Control-Allow-Origin這個Header在W3C標準里用來檢查該跨域請求是否可以被通過,如果值為*則表明當前頁面可以跨域訪問。默認的情況下是不允許的。

在前端JS中需要向Servlet發(fā)出請求,請求代碼如下所示:

$.ajax({
 url: "your url",
 type:"get or post",
 dataType:"json",
 data:{
 ....
 },
 success:function(data){
 ...
 }

第二種解決方法

通過jsonp跨域請求的方式。JSONP和JSON雖然只有一個字母的區(qū)別,但是他們完全就是兩回事,很多人很容易把他們搞混。JSON是一種數(shù)據(jù)交換的格式,而JSONP則是一種非官方跨域數(shù)據(jù)交互協(xié)議。

首先來說一下前端JS是怎么發(fā)送請求。代碼如下所示:

$.ajax({
 url:"your url",
 type:"get or post",
 async:false,
 dataType : "jsonp",
 //服務(wù)端用于接收callback調(diào)用的function名的參數(shù)
 jsonp:"callbackparam",
 //callback的function名稱
 jsonpCallback:"success_jsonpCallback",
 success:function(data){
 console.log(data);
 },
 error:function(data){
 console.log(data);
 }
});

這里的callbackparam和success_jsonpCallback可以理解為發(fā)送的data數(shù)據(jù)的鍵值對,可以自定義,但是callbackparam需要和后臺約定好參數(shù)名稱,因為后臺需要獲取到這個參數(shù)里面的值(即success_jsonpCallback)。

下面,最重要的來了,后臺怎么樣獲取和返回數(shù)據(jù)呢。代碼如下所示:

PrintWriter out =null;
String callback=req.getParameter("callbackparam");
String json=callback+"({'status':'ok'})";
try
{
 out = resp.getWriter();
} catch (IOException e)
{
 // TODO Auto-generated catch block
 e.printStackTrace();
}
out.print(json);
out.flush();
out.close();

首先需要獲取參數(shù)名為callbackparam的值,這里獲取到的值就是“success_jsonpCallback”。然后將這個值加上一對小括號。小括號里放入你需要返回的數(shù)據(jù)內(nèi)容,比如這里我返回一個JSON對象。當然你也可以返回其他對象,比如只返回一個字符串類型數(shù)據(jù)也可以。最后前端JS返回的數(shù)據(jù)就是這樣的:

success_jsonpCallback({'status':'ok'})

瀏覽器會自動解析為json對象,這時候你只需要在success回調(diào)函數(shù)中直接用data.status就可以了。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


分享題目:Java項目中如何解決跨域問題
文章URL:http://weahome.cn/article/jgpppc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部