欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java跨域請(qǐng)求的代碼,javascript 跨域請(qǐng)求

java 寫(xiě)jsonp跨域請(qǐng)求 怎樣寫(xiě)回調(diào)函數(shù)

必須是 jsonpCallback 而不是jsonpcallback

十年的和田網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整和田建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“和田網(wǎng)站設(shè)計(jì)”,“和田網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

代碼如下:

$.ajax({

url: ';tm=',

dataType: 'JSONP',

jsonpCallback: '_GroupMember_Callback',

success: function(json){

}

});

java為什么會(huì)有跨域問(wèn)題

前言

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

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

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

域名相同

協(xié)議相同

端口相同

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

URL

說(shuō)明

是否允許通信

同一域名 ? ?允許 ?

不同域名 ? ?不允許 ?

同一域名不同端口 ? ?不允許 ?

同一域名不同協(xié)議 ? ?不允許 ?

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

第一種解決方法

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

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

$.ajax({

url: "your url",

type:"get or post",

dataType:"json",

data:{

....

},

success:function(data){

...

}

第二種解決方法

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

首先來(lái)說(shuō)一下前端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)。

下面,最重要的來(lái)了,后臺(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就可以了。

JAVA跨域問(wèn)題

跨域問(wèn)題一般都在后臺(tái)程序解決,將自己的程序通過(guò)配置文件或者代碼將其允許跨域,

在有跨域安全的時(shí)候,所有前端post請(qǐng)求時(shí),會(huì)發(fā)送一個(gè)與其請(qǐng)求名字一樣的OPTIONS

此請(qǐng)求沒(méi)有任何參數(shù),此機(jī)制為post不知道是否有權(quán)限請(qǐng)求接口,發(fā)送了一個(gè)探知請(qǐng)求,探知

請(qǐng)求確認(rèn)后,允許訪問(wèn)后調(diào)用正常Post接口。 不允許就會(huì)出現(xiàn)你現(xiàn)在的問(wèn)題跨域異常。

萌新,java是開(kāi)源的,比NET好多了,多看看底層

后端解決前端跨域請(qǐng)求問(wèn)題

場(chǎng)景:前后端分離,頁(yè)面和后端項(xiàng)目部署在不同服務(wù)器,出現(xiàn)請(qǐng)求跨域問(wèn)題。

原因:CORS:跨來(lái)源資源共享(CORS)是一份瀏覽器技術(shù)的規(guī)范,提供了 Web 服務(wù)從不同網(wǎng)域傳來(lái)沙盒腳本的方法,以避開(kāi)瀏覽器的同源策略,是 JSONP 模式的現(xiàn)代版。與 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以讓網(wǎng)頁(yè)設(shè)計(jì)師用一般的 XMLHttpRequest,這種方式的錯(cuò)誤處理比JSONP要來(lái)的好,JSONP對(duì)于 RESTful 的 API 來(lái)說(shuō),發(fā)送 POST/PUT/DELET 請(qǐng)求將成為問(wèn)題,不利于接口的統(tǒng)一。但另一方面,JSONP 可以在不支持 CORS 的老舊瀏覽器上運(yùn)作。不過(guò)現(xiàn)代的瀏覽器(IE10以上)基本都支持 CORS。

預(yù)檢請(qǐng)求(option):在 CORS 中,可以使用 OPTIONS 方法發(fā)起一個(gè)預(yù)檢請(qǐng)求(一般都是瀏覽檢測(cè)到請(qǐng)求跨域時(shí),會(huì)自動(dòng)發(fā)起),以檢測(cè)實(shí)際請(qǐng)求是否可以被服務(wù)器所接受。預(yù)檢請(qǐng)求報(bào)文中的 Access-Control-Request-Method 首部字段告知服務(wù)器實(shí)際請(qǐng)求所使用的 HTTP 方法;Access-Control-Request-Headers 首部字段告知服務(wù)器實(shí)際請(qǐng)求所攜帶的自定義首部字段。服務(wù)器基于從預(yù)檢請(qǐng)求獲得的信息來(lái)判斷,是否接受接下來(lái)的實(shí)際請(qǐng)求。

解決方案:

1、創(chuàng)建一個(gè)過(guò)濾器,過(guò)濾options請(qǐng)求。

package com.biz.eisp.sci.util;

import org.apache.commons.httpclient.HttpStatus;

import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

/**

* 解決跨域問(wèn)題

*?

*/

public class CorsFilterimplements Filter {//filter 接口的自定義實(shí)現(xiàn)

public void init(FilterConfig filterConfig)throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {

HttpServletResponse response = (HttpServletResponse) servletResponse;

? ? HttpServletRequest request = (HttpServletRequest) servletRequest;

? ? response.setHeader("Access-Control-Allow-Origin", "*");

? ? if ("OPTIONS".equals(request.getMethod())){//這里通過(guò)判斷請(qǐng)求的方法,判斷此次是否是預(yù)檢請(qǐng)求,如果是,立即返回一個(gè)204狀態(tài)嗎,標(biāo)示,允許跨域;預(yù)檢后,正式請(qǐng)求,這個(gè)方法參數(shù)就是我們?cè)O(shè)置的post了

? ? ? ? response.setStatus(HttpStatus.SC_NO_CONTENT); //HttpStatus.SC_NO_CONTENT = 204

? ? ? ? response.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, OPTIONS, DELETE");//當(dāng)判定為預(yù)檢請(qǐng)求后,設(shè)定允許請(qǐng)求的方法

? ? ? ? response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with"); //當(dāng)判定為預(yù)檢請(qǐng)求后,設(shè)定允許請(qǐng)求的頭部類型

? ? ? ? response.addHeader("Access-Control-Max-Age", "1");? // 預(yù)檢有效保持時(shí)間

? ? }

filterChain.doFilter(request, response);

}

@Override

public void destroy() {

}

}

2、修改web.xml文件

filter

filter-namecors/filter-name

filter-classcom.biz.eisp.sci.util.CorsFilter/filter-class

/filter

filter-mapping

filter-namecors/filter-name

url-pattern/*?/url-pattern

/filter-mapping

3、spring-mvc.xml添加HttpRequestHandlerAdapter?http請(qǐng)求處理器適配器。

HttpRequestHandlerAdapter作為HTTP請(qǐng)求處理器適配器僅僅支持對(duì)HTTP請(qǐng)求處理器的適配。它簡(jiǎn)單的將HTTP請(qǐng)求對(duì)象和響應(yīng)對(duì)象傳遞給HTTP請(qǐng)求處理器的實(shí)現(xiàn),它并不需要返回值。它主要應(yīng)用在基于HTTP的遠(yuǎn)程調(diào)用的實(shí)現(xiàn)上。

bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/

本文題目:java跨域請(qǐng)求的代碼,javascript 跨域請(qǐng)求
文章路徑:http://chinadenli.net/article29/dsgocjh.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站動(dòng)態(tài)網(wǎng)站網(wǎng)站排名網(wǎng)頁(yè)設(shè)計(jì)公司云服務(wù)器微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司