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);
}
%>
时间: 2024-10-28 21:54:16

arcgis api for javascript中使用proxy.jsp的相关文章

ArcGIS API for JavaScript中Symbol符号篇

ArcGIS API for JavaScript中Symbol简介: Symbol定义了arcgis中graphics图层内几何图形(geometry)的显示样式 ArcGIS API for JavaScript中Symbol分为四大类:继承关系如下图所示: 1.点符号(MarkerSymbol):点符号(point)的显示样式 2.线符号(LineSymbol):线符号(line)的显示样式 3.面符号(FillSymbol):面符号(polygon)的显示样式 4.文本符号(TextSy

关于ArcGIS API for JavaScript中basemap的总结介绍(一)

实际上basemap这个概念并不只在arcgis中才有,在Python中有一个matplotlib basemap toolkit(https://pypi.python.org/pypi/basemap),是用来实现地理信息可视化的.其中,matplotlib是Python常用的数据绘制包,basemap是matplotlib的一个子包,用来进行地图绘制.本文所指的basemap是指esri提供的基础底图图层. 正式使用basemap是在前一阵做webgis开发的时候,需要在自己的矢量图层下面

本人arcgis api for javascript中常见错误总结

1. 2.对象不支持"replace"属性或方法 解决办法:一般在ie中执行js会报这样的错误,基本问题就是你引用了某个对象中不存在的方法,可能是这个方法本来存在而你写错了,或者调用这个方法的时候传入了非法的参数,但这只是粗心造成的,还有就是名字重复的原因,自定义的方法名和原有的重复. 3.iis出现HTTP 错误 403.14 - Forbidden Web问题 前提是在iis服务器里目录浏览已打勾: 在本地iis服务器里测试网站的时候出现HTTP 错误 403.14 - Forbi

ArcGIS API for JavaScript中Symbol符号篇—PictureMarkerSymbol

PictureMarkerSymbol是将点渲染成照片,效果如图: 核心代码如下: 1 featureLayer.on("mouse-over",function(evt){ 2 var point = evt.graphic.geometry; 3 var pictureSymbol; 4 switch (evt.graphic.attributes.TENDERTYPEID) { 5 case "1": 6 { 7 pictureSymbol = new Pic

初学ArcGIS API for JavaScript

初学ArcGIS API for JavaScript 对于初学者来说,关于esri提供的一些样式和dojo自带的一些样式还是需要有一定的了解,这块在<WebGIS开发从基础到实践>讲解的特别详细,在这里以笔记的形式来帮助自己加以理解和记忆. esri.css样式主要用于ESRI提供的小部件与组件,比如地图.信息框等.此外,还可以引用Dojo提供的样式表,Dojo提供了4组样式,分别是claro\tundra\soria以及nihilo,每种是一组定义用户界面的字体.颜色与大小等设置.在Arc

ArcGIS API for JavaScript Bookmarks(书签)

说明:本篇博文介绍的是ArcGIS API for JavaScript中的 Bookmarks(书签) ,书签的作用是,把地图放大到一个地方 添加书签,书签名称可以和地图名称一直,单击标签 地图会定位到刚才选中的地方.大致就是这个意思! 有关ArcGIS API for JavaScriptde的引用文件的部署 请参考我的前面的博客 原文地址:https://blog.csdn.net/xiaokui_wingfly/article/details/8500026 1.运行效果 2.html代

ArcGIS API For Javascript新版本3.11中的新特性

ArcGIS API For Javascript新版本3.11中的新特性: 更简短的引用URL:如果你正在将用以前的版本的程序更新到新版本的话,这是很重要的. To update your code for version 3.11 references, replace the following URLs accordingly: /3.10/js/dojo/ should now read /3.11/ (note the dropped "/js/dojo") 将你的源码更新

基于ArcGIS API for Javascript的地图编辑工具

转自:http://www.cnblogs.com/znlgis/p/3505646.html 最近工作上需要用ArcGIS API for Javascript来开发一个浏览器上使用的地图编辑工具,分享一下一些相关的开发经验. 我开发的地图编辑工具是根据ESRI提供的例子修改而来的,参考的例子是https://developers.arcgis.com/en/javascript/jssamples/ed_default_editingwidget.html 我们下面只说一些需要注意的问题:

ArcGIS API for JavaScript 4.2学习笔记[5] 官方API大章节概述与内容转译

内容如上,截图自ESRI官网,连接:ArcGIS API for JavaScript 4.2 [Get Started] 类似于绪论一样的东西,抽取了最需要关注的几个例子.如:加载Map和View,加载layers,使用弹出窗口,视觉化,与使用窗口小部件.(wtf居然没有分析你想搞事情啊web除了展示难道不应该有()&&*--@) [Mapping and Views] (点击进入我写的章节详细介绍) 最基础的,知道地图和视图的区别,能使用2D和3D地图,对地图的布局有一定的了解,对地图