使用服务端HTTP Client实现前jquery post跨域请求
来源:互联网 发布:vscode rails 编辑:程序博客网 时间:2024/06/05 23:51
在网上查了很久,由于浏览器和协议的限制(更多的是安全的考虑),jquery无法实现跨域的post请求,今天要给大家介绍的方案是通过在同域的服务器端创建一个Controller,将post要请求的外域的url及其参数传到同域的Controller,服务器端使用HTTP Client再去请求接受到的url及其参数,并将返回的getResponseBodyAsString结果返回给post的result。
虽然网上也有人说通过jquery jsonp的形式去请求,但是我请求的url返回内容如果不是json对象,那还是达不到解决问题的目的,第一篇处女博客,废话不多说,上代码!
前段的js代码如下:
this._loadportletContent = function(co,uri){if(uri){if(uri == "default"){$(co).html("该Portlet定义文件存在问题,请联系系统管理员,给您带来的不便深表歉意!");}else{$.post("portlet/getportlet",{url : uri,},function(result){$(co).html(result);}).error(function(){$(co).html("Portlet加载失败,请重新登录后再试,给您带来的不便深表歉意!");});}}else{$(co).html("该Portlet定义文件存在问题,请联系系统管理员,给您带来的不便深表歉意!");}};
代码解释:
1.参数co是一个div对象,请求的外域url返回结果(html页面,text,json等,anyway)将会写入这个div
2.uri,我将要通过post请求的外域url
3.$.post后的第一个url参数portlet/getportlet,是要请求的同域Controller的相对地址,它接受一个参数url实际就是2中的外域uri
=========================================================
后端Controller是用java写的,代码如下:
package com.joywintech.portal.portal.controller;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.http.protocol.HTTP;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.joywintech.common.util.ResponseUtils;@Controller@RequestMapping("/portlet")public class PortletController {private ResponseUtils responseutil;@RequestMapping("getportlet")public void getPortlet(HttpServletRequest request,HttpServletResponse response) throws HttpException, IOException{String url = request.getParameter("url");PostMethod pe = new PostMethod(url){ @Override public boolean getFollowRedirects() { return true; }};pe.setRequestHeader("Connection", "close");HttpClient client = new HttpClient();client.getParams().setParameter(HTTP.CONTENT_ENCODING, "UTF-8"); int code = client.executeMethod(pe);if(code != 200) { responseutil.renderJson(response, "{\"message\":\"200\"}"); }String respbody = pe.getResponseBodyAsString();InputStream in = pe.getResponseBodyAsStream(); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] data = new byte[32768]; int count = -1; while((count = in.read(data,0,32768)) != -1) outStream.write(data, 0, count); data = null; String respStr = new String(outStream.toByteArray(),"GB2312"); responseutil.renderHtml(response, respStr);}}
0 0
- 使用服务端HTTP Client实现前jquery post跨域请求
- golang使用http client发起get和post请求示例
- golang使用http client发起get和post请求示例
- httpcomponents-client-4.3.5实现http的post请求和get请求方法
- js使用XMLHttpRequest实现跨域请求 POST请求
- Web Service系列之实例之使用http.client发送SOAP POST请求
- C++实现Http Post请求
- C++实现Http Post请求
- C++实现Http Post请求
- java实现http post请求
- java 实现http POST请求
- jquery实现post异步请求
- 前后端分离,实现post请求
- org.apache.http.client.HttpClient get/post请求
- Jquery Ajax客户端跨域请求 以及服务端Python代码实现
- C#实现http协议GET、POST请求
- C#实现http协议GET、POST请求
- C# 实现http协议GET、POST请求
- 使用Xcode和Instruments调试解决iOS内存泄露
- iOS项目的目录结构和开发流程
- Oracle 数据库用户管理
- emacs pinky
- ubuntu13.10的grub修复安装!
- 使用服务端HTTP Client实现前jquery post跨域请求
- malloc和free函数详解
- struts2请求的URL的搜索路径的顺序概述
- ACCESS数据库防下载方法
- IOS第一个程序helloworld
- 删除重复字符 C++
- LeetCode - Remove Duplicates from Sorted Array
- http://blog.csdn.net/augusdi/article/details/8803099
- 项目部署到Tomcat报错