• arcgis api for javascript中使用proxy.jsp


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

    arcgis 提供了一种解决方案就是proxy.jsp. 

    首先在项目页面js中引入 proxy.jsp:esriConfig.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[] serverUrls = {
      "http://servername:8399/arcgis/rest/services"//对什么服务起作用,可以配置多个用","分割。
    };
    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(reqUrl.endsWith(".png")) allowed = true;
      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());
            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);
    	}
    } catch(Exception e) {
    	response.setStatus(500);
    }
    %>
  • 相关阅读:
    MySQL创建临时表
    mysql存储过程之事务篇
    sqlserver 和MySQL的一些函数的区别
    JBoss7 如何用脚本 启动 和 停止
    Mysql [Err] 1118
    Mysql [Err] 1118
    Javascript两个感叹号的用法(!!)
    Mac上PyCharm运行多进程报错的解决方案
    Mac iTerm2使用lrzsz上传和下载文件
    Linux使用socks代理
  • 原文地址:https://www.cnblogs.com/telwanggs/p/4929564.html
Copyright © 2020-2023  润新知