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跨域请求详解
跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...
随机推荐
- this & super
/* 当本类的成员和局部变量同名用this区分. 当子父类中的成员变量同名用super区分父类. this和super的用法很相似. this:代表一个本类对象的引用. super:代表一个父 ...
- 一些有趣的erlang项目
这里会收集一些erlang项目,有需可以转. erlang-bookmarks Scaling Erlang High Performance Erlang - Finding Bottlenecks ...
- DNS测试工具的使用(了解)
dig命令, host命令, nslookup命令,rndc命令 dig命令(直接测试DNS性能,不会查询/etc/hosts文件) dig [-t RR_TYPE] name [@SERVER] [ ...
- 201621123037 《Java程序设计》第10周学习总结
作业10-异常 标签(空格分隔): Java 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7 ...
- HttpClient出现大量time_wait问题
在高并发短连接的TCP服务器上,当服务器处理完请求后立刻主动正常关闭连接.这个场景下会出现大量socket处于TIME_WAIT状态.如果客户端的并发量持续很高,此时部分客户端就会显示连接不上.我来解 ...
- MySQL 分组排序问题
SQL好久不写了,有些生疏了,一个分组排序问题想了快半天,整理下. 学生表 CREATE TABLE `t_student` ( `id` bigint(20) NOT NULL AUTO_INCRE ...
- linux 上传下载
xshell yum就是傻瓜式的安装软件,你要装什么,yum什么就行了,红帽系统才有yum,乌班图和debian是没有的 输入命令:sudo yum -y install lrzsz rz 上传 从 ...
- 三年java面试题
前言: 楼主毕业三年,从大学时期就开始一直从事java web方面的开发.我在去年的今天有一篇帖子:两年java面试经验.经历了一年的上班,成长了很多.今年因为某些原因辞职了.从2月底辞职,到3月初, ...
- C++之面向对象编程20170912
/*************************************************************************************************** ...
- VirtualBox安装虚拟机全过程
使用Virtual Box安装虚拟机,虚拟机操作系统使用CentOS7进行安装,安装完成后解决网络设置的问题. 一.虚拟机新建过程 1.点击新建. 2.设置内存大小,点击下一步. 3.选择虚拟硬盘,点 ...