一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java跨域問題的處理詳解

Java跨域問題的處理詳解

2020-08-24 10:46謝小飛 Java教程

這篇文章主要給大家介紹了關于Java跨域問題處理的相關資料,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。

前言

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

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

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

  1. 域名相同
  2. 協議相同
  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
同一域名不同協議 不允許

 

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

第一種解決方法

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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發出請求,請求代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
$.ajax({
 url: "your url",
 type:"get or post",
 dataType:"json",
 data:{
 ....
 },
 success:function(data){
 ...
 }

第二種解決方法

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$.ajax({
 url:"your url",
 type:"get or post",
 async:false,
 dataType : "jsonp",
 //服務端用于接收callback調用的function名的參數
 jsonp:"callbackparam",
 //callback的function名稱
 jsonpCallback:"success_jsonpCallback",
 success:function(data){
 console.log(data);
 },
 error:function(data){
 console.log(data);
 }
});

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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();

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

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://xieyufei.com/2016/05/28/Java-Ajax.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 6080欧美一区二区三区四区 | 欧美福利在线播放 | 万域之王在线观看 | 毛片在线播放a | 好爽轻点太大了太深了 | 日本videosdesexo乱 | 秋霞啪啪片 | w7w7w7w7w免费| 国产精品久久久免费视频 | 贤妻良母电影日本 | 欧美亚洲免费 | 日本亚欧乱色视频在线观看 | 天天综合网网欲色 | 国产欧美成人免费观看 | 逼水真多| 天天干狠狠操 | 成人福利网站含羞草 | 亚洲黄视频在线观看 | 国产免费不卡视频 | 陈峰姚瑶全集小说无删节 | 奇米影视在线观看 | 欧美视频一区二区三区在线观看 | 天天色综合久久 | 成人性生交大片免费看软件 | 免费lulu网站 | chinaspanking调教| 国产在线麻豆波多野结衣 | 午夜精品久久久内射近拍高清 | 色花堂中文字幕98堂网址 | 双性肉文高h| 99国产情在线视频 | yellow视频在线观看免费 | 91色爱 | 99爱爱| 精品国产成人a区在线观看 精品国产91久久久久久久 | 欧美综合国产精品日韩一 | 成人国产精品一级毛片视频 | 精品国产成a人在线观看 | 奇米777四色精品综合影院 | 精品在线播放 | 亚洲精品第一国产综合高清 |