⑴ java如何提供介面接收前端傳送的數據並寫入資料庫
//前端要調用後端的介面可以是用jsonp
前端寫法:
$.ajax({
url:"/xxx.java",
data:{type:"xxx",a:"aaa"},
async:false,
dataType:"jsonp",
jsonp:"callback",
jsonpCallback:"returnLiveViewData",
success:function(msg){
},
error:function(){
alert(請求失敗);
}
};
//後端返回結果
"returnLiveViewData({"records": [{"name": "aaa", "IP": "11.11.11.11", "node": 114, },{"name": "bob", "IP": "11.11.11.22", "node": 115, },]}
)";
⑵ ajax跨域請求如何實現
方法一、 採用jsonp (只支持get請求,後端返回的jsonp格式json,後端無需做請求放行操作)

方式三: XHR2(XMLHttpRequest Level 2)
需要設置後端請求放行
response.setHeader(「Access-Control-Allow-Origin」,」*」);
response.setHeader(「Access-Control-Allow-Methods」,」GET,POST」);
1.可以獲取伺服器端的二進制數據。
2.可以友好的提交表單數據
3.可以上傳文件(內置控制上傳進度事件邏輯)
4.使用HTML表單來初始化一個FormData對象
⑶ jsonp返回的數據是什麼格式
jsonp主要是為了解決跨域訪問問題而產生的,其返回的數據格式一般就是一個js腳本,這個腳本有以下特點:
返回的js腳本通常是服務端動態生成的。
整個腳本通常有且僅有一條語句,且是一個函數調用。
腳本中調用到的函數,是頁面上存在的一個函數,其函數名通過get參數傳遞給服務端,服務端再將其回寫到js腳本中。
函數的參數,是服務端處理後的結果數據,以json格式直接寫在腳本中。這也是jsonp得名的由來。
因為,ajax是不允許跨域訪問的,所以要從其他站點獲取數據時,就需要經過一些特殊的手段才行,jsonp就是一種成本比較低的手段(此外還有服務端代理等方式)。jsonp主要是利用了<script><img><iframe>標簽可以跨域訪問的特點。具體的步驟如下:
首先,在本地頁面上事先准備好一個用於接受返回數據的函數,比如:function showList(listdata){...};
其次,在需要的時點靜態或動態地創建一個標簽,比如:<script type="text/javascript" src="http://another.website/jsonp_call?arg1=xx&arg2=xx&callback=showList"></script>,其中:
another.website:是另外一個站點的域名或ip地址。
jsonp_call:是該站點提供的一個動態內容訪問的服務,可用php、java等任何技術實現。
arg1、arg2:是該服務所需要的參數
callback:是用於返回結果的回調函數名。
然後,another.website站點接收到這個jsonp_call的請求後,進行相應的處理,並將放回的結果封裝為一個js腳本,其內容類似這樣的形式:showList([{id:1,name:'a'}, {id:2,name:'b'}, ..., {id:n,name:'NNN'}]);
最後,結果返回到客戶端後,就會自動解析並執行這個showList函數。
這樣就完成了從「向其他站點發起請求」到「接收其他站點的應答數據」的整個過程,並且突破了ajax跨域訪問的限制。
⑷ 如何在java代碼中執行jsonp請求
首先你要知道jsonp工作原理,實質上也就是利用了一些旁門左道(瀏覽器對資源文件無限制的特點)來進行的跨域訪問,能共用的技術是http,所以在java里可以使用httpclient工具來發送http請求,並把請求做成jsonp的請求模樣就行了。
⑸ java為什麼會有跨域問題
前言
相信大家在寫前端腳本的時候經常會遇到發送數據到後台的情況,但是由於瀏覽器的限制,不同域名之間的數據是不能互相訪問的,那前端怎麼和後端如何進行數據之間的交換呢?
JavaScript由於安全性方面的考慮,不允許頁面跨域調用其他頁面的對象,那麼問題來了,什麼是跨域問題?
答:這是由於瀏覽器同源策略的限制,現在所有支持JavaScript的瀏覽器都使用了這個策略。那麼什麼是同源呢?所謂的同源是指三個方面「相同」:
域名相同
協議相同
埠相同
下面就舉幾個例子來幫助更好的理解同源策略。
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設置:
- 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發出請求,請求代碼如下所示:
- $.ajax({
- url: "your url",
- type:"get or post",
- dataType:"json",
- data:{
- ....
- },
- success:function(data){
- ...
- }
第二種解決方法
通過jsonp跨域請求的方式。JSONP和JSON雖然只有一個字母的區別,但是他們完全就是兩回事,很多人很容易把他們搞混。JSON是一種數據交換的格式,而JSONP則是一種非官方跨域數據交互協議。
首先來說一下前端JS是怎麼發送請求。代碼如下所示:
- $.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)。
下面,最重要的來了,後台怎麼樣獲取和返回數據呢。代碼如下所示:
- 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返回的數據就是這樣的:
- success_jsonpCallback({'status':'ok'})
瀏覽器會自動解析為json對象,這時候你只需要在success回調函數中直接用data.status就可以了。