最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java跨域問題的處理詳解

 更新時(shí)間:2017年03月06日 08:35:33   作者:謝小飛  
這篇文章主要給大家介紹了關(guān)于Java跨域問題處理的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。

前言

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

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

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

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

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

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中處理跨域問題,通常有以下兩種常用的解決方法。

第一種解決方法

后臺(tái)代碼在被請(qǐng)求的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這個(gè)Header在W3C標(biāo)準(zhǔn)里用來檢查該跨域請(qǐng)求是否可以被通過,如果值為*則表明當(dāng)前頁面可以跨域訪問。默認(rèn)的情況下是不允許的。

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

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

第二種解決方法

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

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

$.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ù)的鍵值對(duì),可以自定義,但是callbackparam需要和后臺(tái)約定好參數(shù)名稱,因?yàn)楹笈_(tái)需要獲取到這個(gè)參數(shù)里面的值(即success_jsonpCallback)。

下面,最重要的來了,后臺(tái)怎么樣獲取和返回?cái)?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”。然后將這個(gè)值加上一對(duì)小括號(hào)。小括號(hào)里放入你需要返回的數(shù)據(jù)內(nèi)容,比如這里我返回一個(gè)JSON對(duì)象。當(dāng)然你也可以返回其他對(duì)象,比如只返回一個(gè)字符串類型數(shù)據(jù)也可以。最后前端JS返回的數(shù)據(jù)就是這樣的:

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

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Java實(shí)現(xiàn)最小生成樹MST的兩種解法

    Java實(shí)現(xiàn)最小生成樹MST的兩種解法

    最小生成樹(MST)指在連通圖的所有生成樹中,所有邊的權(quán)值和最小的生成樹。本文介紹了求最小生成樹的兩種方法:Prim算法和Kruskal算法,需要的可以參考一下
    2022-05-05
  • mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn)

    mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn)

    XML 文件在解析時(shí)會(huì)將五種特殊字符進(jìn)行轉(zhuǎn)義,本文主要介紹了mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • mybatis如何使用Criteria的and和or進(jìn)行聯(lián)合查詢

    mybatis如何使用Criteria的and和or進(jìn)行聯(lián)合查詢

    這篇文章主要介紹了mybatis如何使用Criteria的and和or進(jìn)行聯(lián)合查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springcloud?eureka切換nacos的配置方法

    springcloud?eureka切換nacos的配置方法

    這篇文章主要介紹了springcloud?eureka切換nacos,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • SpringCloud-Alibaba-Sentinel-配置持久化策略詳解

    SpringCloud-Alibaba-Sentinel-配置持久化策略詳解

    這篇文章主要介紹了SpringCloud-Alibaba-Sentinel-配置持久化策略,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • java數(shù)組與以逗號(hào)分隔開的字符串的相互轉(zhuǎn)換操作

    java數(shù)組與以逗號(hào)分隔開的字符串的相互轉(zhuǎn)換操作

    這篇文章主要介紹了java數(shù)組與以逗號(hào)分隔開的字符串的相互轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 把Java程序打包成jar文件包并執(zhí)行的方法

    把Java程序打包成jar文件包并執(zhí)行的方法

    這篇文章主要介紹了把Java程序打包成jar文件包并執(zhí)行的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10
  • Java8 Optional的詳細(xì)使用教程

    Java8 Optional的詳細(xì)使用教程

    這篇文章主要給大家介紹了關(guān)于Java8 Optional的詳細(xì)使用教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 簡(jiǎn)單易懂Java反射的setAccessible()方法

    簡(jiǎn)單易懂Java反射的setAccessible()方法

    本文主要介紹了簡(jiǎn)單易懂Java反射的setAccessible()方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Caused?by:?java.lang.NumberFormatException:?For?input?string:?“port“(問題解決)

    Caused?by:?java.lang.NumberFormatException:?For?input?s

    這篇文章主要介紹了Caused?by:?java.lang.NumberFormatException:?For?input?string:?“port“,本文給大家分享完美解決方法,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

黔西县| 读书| 柯坪县| 宁强县| 桃源县| 邮箱| 礼泉县| 永昌县| 安龙县| 盈江县| 阳谷县| 凤凰县| 温泉县| 常熟市| 札达县| 濮阳县| 伽师县| 南宁市| 康乐县| 井冈山市| 甘孜| 绵阳市| 双牌县| 塘沽区| 磐安县| 科技| 油尖旺区| 平泉县| 迁安市| 寻甸| 西峡县| 广东省| 崇文区| 仙桃市| 正安县| 阳新县| 阿拉善盟| 靖江市| 巩留县| 抚远县| 朝阳区|