1. 程式人生 > >ajax跨域post請求的java代理實現

ajax跨域post請求的java代理實現

    最近開發的專案有個功能的需求如下:根據使用者提供的外部連結(outter_url),在頁面填寫好查詢條件(param)並向該url發起查詢請求,查詢返回的資料來動態生成html的table來顯示資料,同時要求請求的方法是post請求。

在開發過程中用的是jquery的非同步請求。問題出現了,網上搜了半天沒有發現實現jquery跨域進行post請求的解決方案(貌似不支援),所以自己用java程式碼來發起post跨域請求

  關於實現思路的幾點說明:

1)      專案中用的是spring,所以這個請求是在spring某個controller的方法中實現的,為了方便說明問題該方法假設為(ajaxProxy)

2)      在jsp頁面中通過jquery的ajax方法,發起一個請求,該請求的url對映到1)中所說的那個ajaxProxy方法,並把查詢條件(param)一起傳遞到ajaxProxy方法.部分程式碼如下

$.ajax({
	type : "GET",
         //對映到controller對應方法的url
         url : "<c:url value='/user/put/queryItems'/>",
        //查詢條件資料
        data : param,
	dataType : 'json',
	success : function(data) {//動態生成table,程式碼略}


3)      在ajaxProxy方法中,用HttpURLConnection連結outter_url,並設定connection的請求方法為Post,併發送查詢條件(param),該部分的程式碼實現如下:

URL connect = new URL(outer_url);

HttpURLConnection connection =(HttpURLConnection)connect.openConnection();

Connection.setRequestMethod(“Post”);

//傳送查詢條件

OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());

out.wirte(param);

out.flush();


4)      接收資料並返回資料,jsp頁面中ajax的success方法處理接收到的資料data,並把data返回就可以了,接收資料的程式碼如下

StringBuffer data = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "gb2312"));
String line;			
while ((line = reader.readLine()) != null) {		
	data.append(line);			
}

return data;

綜上所述,實現跨域post請求的java實現程式碼如下

	@RequestMapping("queryItems")
	public @ResponseBody
	String ajaxProxy(String name, String startTime, String endTime,
			String tag, Model m, HttpServletRequest req) throws UnsupportedEncodingException {
	
         //拼接查詢條件,組成json格式的資料傳送	
         JSONObject node = new JSONObject();       
	 try {	
			
		  JSONObject param = new JSONObject();    
		   param.put("type", "");  
		   param.put("typevalue", "");  
		    //param.put("key", name);  
		    param.put("key", new String(name.toString().getBytes("utf-8"), "gbk"));
		    param.put("start_time", startTime);  
		    param.put("end_time", endTime);  
		    param.put("tags", tag);  
		    node.put("param", param);  
					    	  		  
		    JSONObject user = new JSONObject();
		    user.put("userid", "123");
		    node.put("user", user);
		    
		    JSONObject device = new JSONObject();
		    device.put("dnum", "123");
		    node.put("device", device);
		    
		    JSONObject developer = new JSONObject();
		    developer.put("apikey", "******");
		    developer.put("secretkey", "*****");   
		    node.put("developer", developer);
		   
		    node.put("action", action);
		    
		} catch (JSONException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}  	   
	    
		// 使用POST方式向目的伺服器傳送請求
		URL connect;
		StringBuffer data = new StringBuffer();
		try {
			connect = new URL("outter_url");
			HttpURLConnection connection = (HttpURLConnection)connect.openConnection();
			connection.setRequestMethod("POST");
			connection.setDoOutput(true);
	       
			OutputStreamWriter paramout = new OutputStreamWriter(
					connection.getOutputStream(),"UTF-8");
			paramout.write(json);
			paramout.flush();

			BufferedReader reader = new BufferedReader(new InputStreamReader(
					connection.getInputStream(), "gb2312"));
			String line;			
			while ((line = reader.readLine()) != null) {		
				data.append(line);			
			}
		
			paramout.close();
			reader.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return data.toString();
		
	}

相關推薦

ajaxpost請求java代理實現

    最近開發的專案有個功能的需求如下:根據使用者提供的外部連結(outter_url),在頁面填寫好查詢條件(param)並向該url發起查詢請求,查詢返回的資料來動態生成html的table來顯示資料,同時要求請求的方法是post請求。 在開發過程中用的是jquery

jQuery jsonp請求 ajax之---伺服器端代理實現

  ajax跨域之---伺服器端代理實現 https://www.cnblogs.com/lydialee/p/4869145.html   來源   https://www.cnblogs.com/chiangchou/p/jsonp.html

ajaxpost請求

為什麼會出現跨域問題? 首先我們要先了解一個概念--同源策略。同源策略,它是由Netscape提出的一個著名的安全策略。現在所有支援JavaScript 的瀏覽器都會使用這個策略。所謂同源是指,域名,協議,埠相同。目的是出於安全考慮,防止js指令碼隨意呼叫其他網站的資源。

SpringBoot專案ajax post請求問題的完美解決方式(詳細步

最近專案上不是很緊,想利用這段時間學學Es6的新特性,今天正好學到ES6為了解決js“回撥地獄”問題出的Promise新物件。於是就使用以前寫的SpringBoot專案做後臺,前臺就新寫一個HTML檔案。前後臺都準備好了,就著手準備用ajax試試看介面可不可以走通,於是本次文

ajax之---伺服器端代理實現

介紹一種不是通過js實現跨域的方式: 通過伺服器端代理實現。 具體的思路:由於瀏覽器有同源策略限制,(同源策略即:https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy),所以想要跨域訪問其他域下的資源,需要繞開瀏

解決ajax的辦法,代理,cors,jsonp

resource 通過 使用 -o 參考 acc log 方式 sha 1、使用php做代理去請求第三方api接口 php是可以跨域的,我們利用ajax請求本域名中的php文件,php再去請求第三方接口文件,從而達到跨域目的。 php做代理請求: aj

ajax簡單請求和複雜請求

1. 簡單請求: 滿足一下兩個條件的請求。 (1) 請求方法是以下三種方法之一: HEAD GET POST (2)HTTP的頭資訊不超出以下幾種欄位: Accept Accept-Language Content-Language Last-Event-ID

vue-resource post請求詳解

vue-resource 跨域 post請求時,需要後端工程師配合設定 Access-Control-Allow-Origin 為 * 在使用之前要下載和引入:cnpm install vue-resource --save  //這裡我使用的是淘寶的cn

關於Ajax以及Nginx反向代理的一個坑

之前專案中各種視訊播放出現問題,原因有好多,包括客戶端播放器邏輯,Android系統播放器的坑爹bug,CDN,以及視訊源的壓縮處理不當等等。 然而,關於視訊源壓縮處理,我前段時間樣衰衰,主動提出要搞一套自己伺服器的轉壓工具,代替現有的視訊製作部門使用的“狸窩”~(這個

React 採用Fetch方式傳送POST請求

主實現類: import fetch from ‘isomorphic-fetch’; export default async function post(url,method,params)

轉載: React Native 採用Fetch方式傳送POST請求

關於跨域: A上的頁面獲取B上的資源,瀏覽器會檢查伺服器B的HTTP頭(HEAD請求),如果Access-Control-Allow-Origin中有A,或者是萬用字元*,瀏覽器就會允許跨域。這叫CORS, 還有一點比較重要,限制跨域是瀏覽器的行為,而不是JS的行

React Native 採用Fetch方式傳送POST請求

Fetch以後是趨勢,勢必要取代傳統的Ajax,而且RN框架支援Fetch。下面僅做了一個跨域請求的例子,在本域請求是一樣的,而且更簡單一些。客戶端環境用的是RN寫的一個頁面,也可以用瀏覽器的console控制檯模擬。後端服務用的是NodeJs express框架。   

ajax簡單請求與複雜請求

開發網站時經常會用到跨域資源共享(簡稱cors,後面使用簡稱)來解決跨域問題,但是在使用cors的時候,http請求會被劃分為兩類,簡單請求和複雜請求,而這兩種請求的區別主要在於是否會觸發cors預檢請求。 首先我們要明白cors的原理(引自MDN): 跨域資源共享標準新增了一組 HTTP 首部欄位,允許伺服

ajax請求簡單實現Java後臺

因為官網有一個合作加盟的功能,需要一個表單錄入,但是官網除了這個功能,都是靜態頁面,所以就準備寫一個ajax跨域,儲存到之前公司專案的後臺管理系統去,第一次用ajax跨域,網上很多參考。這也是我的第一篇博文,準備以後養成這個習慣,以備後期參考。。。。。 通過自己N久找程式碼

ajax之---服務器端代理實現

通過 str 分享 介紹 hello js實現 pre ucc ref 介紹一種不是通過js實現跨域的方式: 通過服務器端代理實現。 具體的思路:由於瀏覽器有同源策略限制,(同源策略即:https://developer.mozilla.org/zh-CN/docs/Web

java Ajax請求COOKIE無法帶上的解決辦法

coo $.ajax test style dem log json bsp ros 1.web.xml加入以下節點,,一定放在第一個filter <!--目錄下所有文件可以跨域Begin--> <filter> <filter-

nginx 實現 ajax 請求

ini syn methods acc -m www eth tran 響應 原文:http://www.nginx.cn/4314.html AJAX從一個域請求另一個域會有跨域的問題。那麽如何在nginx上實現ajax跨域請求呢?要在nginx上啟用跨域

WebAPI Ajax 請求解決方法(CORS實現

custom XML header 就會 情況 取數 -o cross serve 概述 ASP.NET Web API 的好用使用過的都知道,沒有復雜的配置文件,一個簡單的ApiController加上需要的Action就能工作。 但是在使用API的時候總會遇到跨

AJAX訪問(get、post請求

1、JSONP實現跨域get請求(無論請求方式是get,post或者是put等別的請求,最終都會被預設以get請求傳送) <script type="text/javascript"> $.ajax({ url:"http://crossdomain.

利用原生js實現ajax請求資料

首先,頁面中不需要引入任何的檔案。 1、前臺html頁面 <script> //定義一個ajax var $ = { ajax:function(option){ var url = option.url; var ca