在javascript中通过xmlhttprequest跨域访问其他资源会被浏览器阻止,因为跨域访问容易引起安全问题。对于要访问的资源那端不能被修改的情况(要访问的资源的服务器不能被修改的情况),可以通过jsp代理来实现跨域的访问,因为jsp没有跨域访问问题。例如www.A.html要访问www.B.html,先让A.html访问proxy.jsp,proxy.jsp在转发到B.html。
proxy.jsp源码:
<%@ page import="java.net.*,java.util.*,java.lang.*,java.io.*"%><%@ page contentType="text/xml;charset=gb2312"%><% String url = null; StringBuffer params = new StringBuffer(); Enumeration enu = request.getParameterNames(); //String str=request.getQueryString(); //System.out.println(str); int total = 0; while (enu.hasMoreElements()) { String paramName=(String)enu.nextElement(); if(paramName.equals("url")){ url=request.getParameter(paramName); }else{ //request.getParameterNames()取得的参数顺序是随机的 //若是用get方式发送的,可以用request.getQueryString()方式获得 if(total==0){ params.append(paramName).append("=").append(URLEncoder.encode(request.getParameter(paramName), "UTF-8")); } else { params.append("&").append(paramName).append("=").append(URLEncoder.encode(request.getParameter(paramName), "UTF-8")); } ++total; } } url = url + "?" + params.toString(); //out.println(url); System.out.println("url:"+url); if(url != null){ // 使用GET方式向目的服务器发送请求 URL connect = new URL(url.toString()); URLConnection connection = connect.openConnection(); connection.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while((line = reader.readLine()) != null){ out.println(line); } reader.close(); } %>
javascript端源码:
var thr; function getanswer(){ try{ alert(thr.responseText); }catch(e){ alert("getanswer error:"+e.message); } } function testone(){ try{ thr = createXMLRequestObj(); var url = "proxy.jsp?url=http://192.168.2.101:80/ScanWlan.cgi?NAME=WANG"; var param="name=wang"; //alert("first readystate:"+thr.readyState+" status:"); thr.open ("GET", url, true); thr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //上面这句不可少啊!!!!!!!!!!!!!!! thr.onreadystatechange=getanswer; if(thr==null){ alert("not create sucess"); return; } thr.send(null); }catch(e){ alert("error"+e.message); } } function createXMLRequestObj(){ var xmlReqObj = null; if (xmlReqObj == null){ try {xmlReqObj = new XMLHttpRequest();}//非IE catch (e) {xmlReqObj = null;} } if (xmlReqObj == null){ try {xmlReqObj = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {xmlReqObj = null;} } if (xmlReqObj == null){ try {xmlReqObj = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {xmlReqObj = null;} } return xmlReqObj; }
相关推荐
总结来说,JavaScript跨域访问有多种解决方案,开发者应根据具体需求和环境选择合适的方法。JSONP适合简单的GET请求,CORS更通用且安全,代理服务器适用于服务器无跨域控制能力的情况,WebSocket则适用于需要实时...
"解决JS跨域访问IFrame的解决方案"这一主题关注的就是如何克服这个限制,使得在JSP页面中嵌入的跨域IFrame能够正常通信。下面我们将详细探讨这个问题以及可能的解决方案。 首先,理解同源策略是关键。同源策略是...
"js json ajax jsp 跨域訪問的例子"这个主题涉及到JavaScript、JSON、AJAX以及JSP等关键技术,它们在处理跨域问题时各自扮演着重要角色。下面我们将详细探讨这些技术及其在跨域访问中的应用。 首先,JavaScript(JS...
总结,JavaScript和jQuery的跨域访问涉及到多种技术和策略,包括JSONP、CORS、代理服务器等。在实际应用中,开发者需要根据具体需求和安全性考虑选择合适的方法,并正确实现以保证应用的正常运行。
本文将深入探讨如何“完美解决iframe跨域问题”,并介绍其底层的`window.name`转换代理实现。 **一、iframe跨域的基本概念** 1. **什么是iframe**:iframe是一种HTML元素,允许在单个网页中嵌入另一个网页。它通过...
通过这种方式,我们可以在浏览器中安全地进行WFS服务的跨域访问。这种方法适用于开发和测试阶段,但实际部署时,应考虑使用更安全、可扩展的解决方案,如CORS(跨源资源共享)或在WFS服务端设置允许跨域的策略。
在GIS领域,特别是使用Esri的ArcGIS技术时,经常遇到...开发者可以根据自己的需求选择合适的代理服务实现,并按照文档进行配置和部署,以便解决跨域访问的问题,顺利地使用ArcGIS JavaScript API进行WebGIS应用的开发。
CORS是现代浏览器支持的一种跨域访问机制,它通过在服务器端设置特定的HTTP响应头来允许特定的跨域请求。在JSP中,可以在响应头中添加`Access-Control-Allow-Origin`字段,允许指定来源的请求: ```java ...
在JavaScript中,`window.showModalDialog`是一个古老但仍然有用的函数,用于打开一个模态...因此,对于新项目,更推荐使用现代的API,如`window.postMessage`进行跨域通信,或者考虑采用服务器端代理等其他解决方案。
标题“用代理避免ajax跨域请求(手机验证码)”指出了解决这个问题的一种策略,即利用代理服务器来规避浏览器的同源策略限制。下面我们将深入探讨这个主题。 首先,我们了解什么是跨域请求。在Web开发中,由于...
跨域问题是指由于浏览器的同源策略限制,一个域下的网页(域、协议、端口都相同)的JavaScript代码不能访问另一个域下的资源。这个策略对于安全是非常重要的,但有时候我们又需要从其他域请求数据,这个时候就需要...
而"arcgis JavaScript api proxy"是这个API中的一个重要概念,主要用于解决跨域访问的问题。 在Web开发中,由于浏览器的安全策略,JavaScript通常不能直接跨域请求数据,特别是对于ArcGIS服务,它们通常部署在不同...
标签“js 跨域 ajax”则为我们提供了文章的关键词,即JavaScript跨域和AJAX跨域。 在Web开发中,出于安全考虑,浏览器实施了同源策略(Same-Origin Policy),这一策略限制了不同源之间的文档或脚本间的交互。源...
ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。 2.有什么完美的解决方案么? 没有。解决方案有不少,但是只能是根据自己的实际情况来...
示例中的`js.jsp`就是一个简单的代理页面,它将请求转发到指定的远程URL并返回数据。 ```jsp *, java.io.*" %> URL url = new URL(request.getParameter("json") + "&houseid=1"); HttpURLConnection hurl = ...
这种方法允许JSP和Vue应用独立运行,但需要在Vue项目中设置路由来访问JSP页面。 无论是采用哪种方式,在将JSP页面嵌入Vue项目中时,需要注意以下几点: - 确保JSP页面能够被Vue项目访问,可能是通过配置跨域资源...
除了上述方法,还可以通过使用代理服务器、iframe、WebSocket等技术来解决跨域问题。然而,这些方法通常需要更复杂的配置和实现。 标签中的“ajax”是指使用JavaScript进行异步数据交换的技术,通常与jQuery、axios...
Pushlet Proxy则用于解决跨域访问的问题,确保Pushlet Server和Pushlet Client之间的通信不受防火墙或代理服务器的阻碍。 2. **工作原理** 当客户端连接到Pushlet Server后,服务器会保持这个连接并等待事件发生。...
本文主要探讨了在JSP页面交互中,父页面获取子页面内容的两种方法,当子页面需要保持隐藏状态时,如何有效获取其内容而不影响父页面的性能和用户体验。 第一种方法是通过Ajax技术进行异步请求。Ajax(Asynchronous ...