日期:2014-05-17  浏览次数:20738 次

用jsp做代理,ajax跨域发post
我的客户端需要从公司的server上获取数据,他们提供的接口是 发送post到http://aqueduc.kelcode.com/proc/gw.php
后面跟上一些参数,然后就可以得到我想要的json数据。

我先通过在网页上直接用ajax发送post到公司的server,但是失败。在网上查的结果是js跨域访问危险地,所以不支持(IE在提示风险并继续运行的情况下可以用)。从网上得到的建议是:我可以通过jsp作为代理,从浏览器发post给proxy.jsp,再由proxy.jsp从本地server把想要发送的post请求发给公司的server,再把数据传回客户端。下面是我改写的代码。但总是得到http 500的错误。我不太会web编程。jsp也是现学的,连debug都不知道怎么弄。是不是有什么配置上的问题,还是我的代码有错误,或者是思路都是不对的。非常着急,再做不出来就要被炒了。请求大家帮忙。

这个用单纯的java写的代码给公司server发送post是可以得到正确的结果的,我已经测试过了。


[code=JScript][/code]
<SCRIPT LANGUAGE="JavaScript" type="text/javascript">
function loadJson()
{
var xmlhttp = false;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  if (XMLHttpRequest.overrideMimeType)
  {
  XMLHttpRequest.overrideMimeType("text/xml");
  }
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
if(!xmlhttp)
 {
window.alert("不能创建对象");
return false;
}  
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
  document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
  }
  else
document.getElementById("myDiv").innerHTML=xmlhttp.status+"-"+xmlhttp.readyState;
  }
xmlhttp.open("POST","proxy.jsp",true);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.send("url=http://aqueduc.kelcode.com/proc/gw.php&requestName=getIntervention&uid=UID_GATEWAY&startDate=1292223600&endDate=1408330000");
}
</script>


[code=HTML][/code]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
</head>
<body>
<button type="button" onclick="loadJson()">请求数据</button>
</body>
</html>



proxy.jsp
[code=Java][/code]
<%@ 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();
int total = 0;
while (enu.hasMoreElements()) {
String paramName=(String)enu.nextElement();
if(paramName.equals("url")){
  url=request.getParameter(paramName);
}else{
  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;
}
}
String para = params.toString();
//out.println(url);
if(url != null){
// 使用GET方式向目的服务器发送请求
URL connect = new URL(url.toString());
URLConnection connection = connect.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-type","application/x-www-form-urlencoded");