在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跨域访问解决方案 个人在网上搜集的资料,用于传输信息,不提倡下载
本demo为通过jquery 来进行json的跨域访问的小例子。简单易懂!
通过HTTPClient界面在JSP中嵌入iframe子界面跨域时,无法获取跨域界面的属性值的问题
框架完美解决了iframe之间的跨域通讯。底层技术采用window.name转换代理实现
解决了在JSP中的AJAX不能跨域访问的问题
在JSP中访问数据库方法在JSP中访问数据库方法在JSP中访问数据库方法在JSP中访问数据库方法在JSP中访问数据库方法
目录结构:jsp导入jquery文件,老是不起作用,原因在于: 代码如下: [removed][removed] 其不能访问/WEB-INF/目录下的文件,因此需要将加载的js文件其放倒webapp目录。 test.html: 代码如下: <%@ page ...
JSP使用ajaxFileUpload.js实现跨域问题.docx
js json ajax jsp 跨域訪問的例子 我的文章里有說明的哦
JSP_重复提交_解决方法JSP_重复提交_解决方法JSP_重复提交_解决方法
1. 两个tomcat ,不同的端口模拟跨域访问 2. 前端解决方案 - JSONP 3. 后端解决方案 - CORS (使用JSP演示)
jsp中文显示问号问题解决方法.docx
JSP解决乱码JSP解决乱码JSP解决乱码JSP解决乱码JSP解决乱码
js代码高亮显示 JavaScript代码高亮 jsp js代码高亮显示 JavaScript代码高亮 jsp
使用代理解决WFS服务跨域测试代码,代理请求的位置在ky.html的第123行 代理文件是Proxy.jsp
JSP中文乱码常见3个例子及其解决方法.docx
JSP乱码 N种解决方案
后来查了网上一些人的解决方案,最彻底的解决办法就是修改jspsmartupload的源码,在upload、download方法处强制指定它的编码格式就可以了。这是修改后的jar包,可以直接拿来用,但在初始化SmartUpload类的时候需要...
jsp(Tomcat)中errorPage不能使用的原因解决方法,Jsp技术文章,JSP系列教程,Jsp.htm.rar
js完美解决jsp文本框限制只能输入数字、小数问题,只需 ;" oncontextmenu="return false;" onKeyDown="keyNumDown(this, '8', '2')"> oncontextmenu="return false;" oncontextmenu="return false;":防止右键粘贴