arcgis api for javascript中使用proxy.jsp

来源:互联网 发布:ccs软件是什么软件 编辑:程序博客网 时间:2024/05/31 06:22

        当我们使用arcgis api for javascript 查询arcgis服务时,如果查询的参数很长时,通过get方式提交会查询不到结果,因为get方式提交的参数有长度限制,需要通过代理的方式使用post提交。

      arcgis 提供了一种解决方案就是proxy.jsp. 首先在项目页面js中引入               proxy.jspesriConfig.defaults.io.proxyUrl=http://servername:prot/arcgis_js_api/proxy.jsp  引入代理页面

esriConfig.defaults.io.alwaysUseProxy=true;         设置代理是否一直起作用

引入之后把proxy.jsp放入到项目中。

代理页面源码如下:

<%@page session="false"%><%@page import="java.net.*,java.io.* " %><%!String proxyIP="http://172.25.64.110";String[] serverUrls = {  proxyIP+":8399/rest/services" //NOTE - no comma after the last item};%><%try {  String reqUrl = request.getQueryString();  boolean allowed = false;  String token = null;  for(String surl : serverUrls) {    String[] stokens = surl.split("\\s*,\\s*");    if(reqUrl.toLowerCase().contains(stokens[0].toLowerCase())) {      allowed = true;      if(stokens.length >= 2 && stokens[1].length() > 0)        token = stokens[1];      break;    }  }  if(!allowed) {    response.setStatus(403);    return;  }  if(token != null) {    reqUrl = reqUrl + (reqUrl.indexOf("?") > -1 ? "&" : "?") + "token=" + token;  }  URL url = new URL(reqUrl);HttpURLConnection con = (HttpURLConnection)url.openConnection();con.setDoOutput(true);con.setRequestMethod(request.getMethod());// System.out.println(request.getMethod());// System.out.println(con.getRequestMethod());if(request.getContentType() != null) {  con.setRequestProperty("Content-Type", request.getContentType());}  con.setRequestProperty("Referer", request.getHeader("Referer"));int clength = request.getContentLength();if(clength > 0) {con.setDoInput(true);InputStream istream = request.getInputStream();OutputStream os = con.getOutputStream();final int length = 5000;  byte[] bytes = new byte[length];  int bytesRead = 0;  while ((bytesRead = istream.read(bytes, 0, length)) > 0) {    os.write(bytes, 0, bytesRead);  }}  else {    con.setRequestMethod("GET");  }out.clear();  out = pageContext.pushBody();OutputStream ostream = response.getOutputStream();response.setContentType(con.getContentType());InputStream in = con.getInputStream();final int length = 5000;  byte[] bytes = new byte[length];  int bytesRead = 0;  while ((bytesRead = in.read(bytes, 0, length)) > 0) {    ostream.write(bytes, 0, bytesRead);    System.out.println(new String(bytes));  }} catch(Exception e) {e.printStackTrace();response.setStatus(500);}%>


0 0
原创粉丝点击