JQuery和Servlet来实现跨域请求
在网上看到很多的JQuery跨域请求的文章,比较有意思。这里我发表一个Servlet与JQuery配置实现跨域的代码,供大家参考。不足之处请指教
原理:JavaScript的Ajax不可以跨域,但是可以通过向本地的一个Servlet发出请求,由Servlet完成跨域。再把远程的结构返回给客户端。这样Ajax就可以跨域了。在后面,再发一个PHP版本的,请大家关注啊。下面是代码
JS代码:
注意:在Post方式时,param1和param2为向远程发送的参数值,可以有多个。
1
2
3
4
5
6
7
8
9
10
11
12
|
//GET方式 function reqeustCrossDomainProxyGet(){ var param = { 'requesturl' :url, 'typedata' : 'JSON' }; var data = getCrossDomainProxyRemote(param, "json" ); } //Post方式 function reqeustCrossDomainProxyPost(param1,param2){ var url = apiServer+ "/api/lucene/query" ; var param = { 'requesturl' :url, 'typedata' : 'JSON' , 'param1' :param1, 'param2' :param2}; var data = getCrossDomainProxyRemote(param, "json" ); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/** * JS向本址的一个Servlet发送POST请求,所有关于远程请求的参数。 * 在此处参POST方式发送给Servlet * @param param 远程请求参数 * @param rtype JS返回类型(暂时没有用到) * @return */ function getCrossDomainProxyRemote(param,rtype){ var url = "/cross/proxy" ; //Servlet的URL地址 var returndata; $.ajax({ url: url,type: 'POST' ,dataType: rtype,timeout: 40000,data:param, async: false , error: function (response,error) {alert(response.status);}, success: function (data){returndata=data;} }); return returndata; } |
Java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
public class CorssDomainProxy extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this .doPost(req, resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { boolean requestType = false ; //标记远程请求类型,默认为GET方式 PrintWriter out = resp.getWriter(); Enumeration keys = req.getParameterNames(); //取出客户端传入的所有参数名 ArrayList<String> params = new ArrayList<String>(); String url= null ; while (keys.hasMoreElements()){ String key = (String) keys.nextElement(); /** * 如果请求参数内有如下几种表示,这此参数不参与远程请求 */ if (key.equals( "requesturl" )){ //判断参数是否是,远程请求地址 url = req.getParameter(key); } else if (key.equals( "typedata" )){ //判断请求数据类型,暂时没有用到 } else if (key.equals( "returntype" )){ //判断请求返回类型,暂时没有用到 } else { params.add(key); //其它加入参数列表,此处为参与远程请求的参数 requestType = true ; //修改标记,表求远程请求为POST方式 } } HttpClient client = new HttpClient(); HttpMethod method = null ; if (requestType){ //判断请求方式,并实例化HttpMethod对象,true:POST,false:GET method = new UTF8PostMethod(url); for (String name : params){ //迭代POST参数,加入到请求中 String _value = req.getParameter(name); ((PostMethod)method).setParameter(name,_value); } } else { method = new GetMethod(url); } client.executeMethod(method); //执行请求 String bodystr = method.getResponseBodyAsString(); //返回结果 out.println(bodystr); //将结果返回给客户端 } /** * 内部类,转换URL字符串为UTF-8 * @author Administrator * */ private static class UTF8PostMethod extends PostMethod { public UTF8PostMethod(String url) { super (url); } @Override public String getRequestCharSet() { return "UTF-8" ; } } } |
JQuery和Servlet来实现跨域请求的更多相关文章
- 巧妙利用JQuery和Servlet来实现跨域请求
在网上看到很多的JQuery跨域请求的文章,比较有意思.这里我发表一个Servlet与JQuery配置实现跨域的代码,供大家参考.不足之处请指教 原理:JavaScript的Ajax不可以跨域,但是可 ...
- 关于试用jquery的jsonp实现ajax跨域请求数据的问题
我们在开发过程中遇到要获取另一个系统数据时,就造成跨域问题,这就是下文要说的解决办法: 先我们熟悉下json和jsonp的区别: 使用AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交 ...
- jquery中$.get()如何让跨域请求携带cookie?
在这个get请求前面加上这个就好了~~~~
- jQuery Ajax 简单的实现跨域请求
html 代码清单: <script type="text/javascript" src="http://www.youxiaju.com/js/jquery-1 ...
- jQuery的jsop,jsonp跨域请求
https://www.cnblogs.com/chiangchou/p/jsonp.html
- jQuery jsonp跨域请求
跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...
- jquery Ajax跨域请求
这是jquery api文档对跨域请求的解析:如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用JSONP类型.使用这种类型的话,会创建一个查询字符串参数 callbac ...
- ajax-解决跨域请求(基于js,jQuery的josnp,设置响应头的cors)
同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的 ...
- jQuery jsonp跨域请求详解
跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...
随机推荐
- asp.net如何实现负载均衡方案讨论
请注意,本文内容分多次修改,如需阅读,请阅读完整,因为早期的观点是不太合理的,后面由于水平进步,已经做了修改! 我的目标是我一个人搭建一个负载均衡网站.不接受这是网络部,或者运维,或者系统部的事情,所 ...
- BETA阶段冲刺集合
冲刺开始: https://www.cnblogs.com/LZTZ/p/9097296.html 第一天: https://www.cnblogs.com/LZTZ/p/9097303.html 第 ...
- WebSphere Application Server诊断和调优
近段时间,我们项目中用到的WebSphere应用服务器(WAS),但在客户的production环境下极不稳定,经常宕机.给客户造成非常不好的影响,同时,也给项目组很大压力.为此,我们花了近一个月时间 ...
- Robot 模拟操作键盘 实现复制粘贴功能;
1.代码逻辑 : a.封装一个粘贴的方法体:setAndctrlVClipboardData(String string);参数string是需要粘贴的内容 : b.声明一个StringSelecti ...
- [学习]WireShark 的过滤功能
1. 打开 wireShark 过滤显示 协议 比如显示arp协议 过滤栏输入arp即可 支持的协议类型 TCP UDP HTTP FTP ICMP SMTP等等 2. 过滤ip地址 ip.addr ...
- 教你配置使用阿里云 Maven 库,体验秒下 jar 包的快感
鉴于国内的网络环境,从默认 Maven 库下载 jar 包是非常的痛苦. 速度慢就不说了,还经常是下不下来,然后一运行就是各种 ClassNotFoundException,然后你得找到残留文件删掉重 ...
- Delphi ADOQuery多个参数重复 改编技巧
今天看了多年前的一个帖子,发现回答不合理,有些还将其归为delphi的bug.其实主要是没有灵活应用参数. ADOQUERY查询时,这样不行,结果不正确. WITH ADOQUERY1 DO BEGI ...
- sublime text3 php开发必要的插件
一.安装Sublime Text 3 官网 http://www.sublimetext.com/3 一定要选择ST3,而不是ST2,3比2好用,真的,后面你就知道了. 选择对应的版本安装.完事后,要 ...
- TCP的拥塞控制 (三)
1. Multiple Packet Losses Fast Retransmit/Fast Recovery机制可以很好地处理单个packet丢失的问题,但当大量packet同时丢包时(一个RT ...
- 【JQuery】数据
一.前言 接着前一章的内容,继续本章的学习 二.内容 queue 显示或操作在匹配元素上执行的函数队列 .queue(queueName) 操作在匹配元素上执行的函数队列 .queue( ...