欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java跨域問題的處理詳解

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

前言

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

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

答:這是由于瀏覽器同源策略的限制,現(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中處理跨域問題,通常有以下兩種常用的解決方法。

第一種解決方法

后臺代碼在被請求的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)里用來檢查該跨域請求是否可以被通過,如果值為*則表明當(dāng)前頁面可以跨域訪問。默認(rèn)的情況下是不允許的。

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

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

第二種解決方法

通過jsonp跨域請求的方式。JSONP和JSON雖然只有一個(gè)字母的區(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ù)名稱,因?yàn)楹笈_需要獲取到這個(gè)參數(shù)里面的值(即success_jsonpCallback)。

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

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

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

總結(jié)

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

相關(guān)文章

  • 關(guān)于Eureka的概念作用以及用法詳解

    關(guān)于Eureka的概念作用以及用法詳解

    這篇文章主要介紹了關(guān)于Eureka的概念作用以及用法詳解,服務(wù)治理就是提供了微服務(wù)架構(gòu)中各微服務(wù)實(shí)例的快速上線或下線且保持各服務(wù)能正常通信的能力的方案總稱,需要的朋友可以參考下
    2023-05-05
  • SpringBoot文件上傳同時(shí)接收復(fù)雜參數(shù)的過程詳解

    SpringBoot文件上傳同時(shí)接收復(fù)雜參數(shù)的過程詳解

    這篇文章主要介紹了SpringBoot文件上傳同時(shí),接收復(fù)雜參數(shù),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • JavaWeb應(yīng)用實(shí)例:用servlet實(shí)現(xiàn)oracle 基本增刪改查

    JavaWeb應(yīng)用實(shí)例:用servlet實(shí)現(xiàn)oracle 基本增刪改查

    本篇文章主要介紹了JavaWeb應(yīng)用實(shí)例:用servlet實(shí)現(xiàn)oracle 基本增刪改查,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-01-01
  • 幾種常見mybatis分頁實(shí)現(xiàn)方式

    幾種常見mybatis分頁實(shí)現(xiàn)方式

    這篇文章主要介紹了幾種常見mybatis分頁實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java中對List分段操作的實(shí)例

    java中對List分段操作的實(shí)例

    這篇文章主要介紹了java中對List分段操作的實(shí)例的相關(guān)資料,希望通過本文大家能夠掌握list的分段實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-09-09
  • maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報(bào)錯(cuò)問題

    maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報(bào)錯(cuò)問題

    本地倉庫是遠(yuǎn)程倉庫的一個(gè)緩沖和子集,當(dāng)你構(gòu)建Maven項(xiàng)目時(shí)首先會(huì)從本地倉庫查找資源,如果沒有那么Maven會(huì)從遠(yuǎn)程倉庫下載到你本地倉庫,這篇文章主要給大家介紹了關(guān)于maven安裝、使用、配置本地倉庫、idea配置maven以及解決plugins報(bào)錯(cuò)問題的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • java使用RandomAccessFile類基于指針讀寫文件實(shí)例代碼

    java使用RandomAccessFile類基于指針讀寫文件實(shí)例代碼

    這篇文章主要介紹了java使用RandomAccessFile類基于指針讀寫文件實(shí)例代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 基于Java中兩種jersey文件上傳方式

    基于Java中兩種jersey文件上傳方式

    這篇文章主要介紹了基于Java中兩種jersey文件上傳方式的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • SpringFactoriesLoader類作用詳解

    SpringFactoriesLoader類作用詳解

    SpringFactoriesLoader可以加載jar包下META-INF下的spring.factories,把相關(guān)接口的實(shí)現(xiàn)按照key,value的形式加載到內(nèi)存,一個(gè)接口的多個(gè)實(shí)現(xiàn)可以按照","進(jìn)行分割
    2022-10-10
  • Java CAS原子操作詳解

    Java CAS原子操作詳解

    在synchronized的優(yōu)化過程中我們看到大量使用了CAS操作,CAS全稱Compare And Set(或Compare And Swap),簡單來說CAS操作就是一個(gè)虛擬機(jī)實(shí)現(xiàn)的原子操作
    2023-02-02

最新評論