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放入到项目中。

代理页面源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<%@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 );
}
%>



本文转自 stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1342865

相关文章
|
16天前
|
缓存 JavaScript 前端开发
深入浅出:使用Node.js构建RESTful API
【9月更文挑战第3天】在数字化浪潮中,后端开发如同搭建一座连接用户与数据的桥梁。本文将带领读者从零开始,一步步用Node.js搭建一个功能完备的RESTful API。我们将探索如何设计API的结构、处理HTTP请求以及实现数据的CRUD操作,最终通过一个简单的实例,展示如何在真实世界中应用这些知识。无论你是初学者还是有一定经验的开发者,这篇文章都会为你揭示后端开发的奥秘,让你轻松入门并掌握这一技能。
39 3
|
1天前
|
JavaScript 前端开发 API
JavaScript 验证 API
JavaScript 验证 API
8 2
|
20天前
|
JavaScript NoSQL API
深入浅出:使用Node.js构建RESTful API
【8月更文挑战第31天】本文将引导读者了解如何利用Node.js搭建一个高效、易于扩展的RESTful API。通过简单易懂的语言和逐步深入的内容组织,我们将一起探索Node.js在后端开发中的实际应用,包括环境配置、路由设计、数据处理与连接数据库等关键步骤。文章末尾,你将获得完整的项目代码示例,助你快速启动自己的API项目。
|
20天前
|
JavaScript 前端开发 API
深入浅出:使用Node.js搭建RESTful API的实践之旅
【8月更文挑战第31天】本文将带你踏上一次Node.js的探险之旅,通过实际动手构建一个RESTful API,我们将探索Node.js的强大功能和灵活性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的实践经验和深刻的技术洞见。
|
27天前
|
JavaScript 前端开发 中间件
深入浅出Node.js:从零开始构建RESTful API
【8月更文挑战第24天】在数字化时代的浪潮中,后端开发作为支撑现代网络服务的骨架,扮演着至关重要的角色。本文将通过Node.js这一高效灵活的JavaScript运行环境,引领你步入后端开发的神秘世界。我们将从基础概念出发,逐步深入到实战操作,最终构建一个功能完备的RESTful API。无论你是编程新手还是前端开发者,这篇文章都将为你揭示后端开发的奥秘,让你轻松掌握使用Node.js进行API开发的实用技巧。
|
1月前
|
存储 JavaScript API
Node.js中的异步API
【8月更文挑战第16天】
27 1
|
17天前
|
JSON JavaScript 中间件
深入浅出Node.js: 从零开始构建RESTful API
【8月更文挑战第34天】 在数字时代的浪潮中,掌握如何构建高效、可靠的后端服务是每一位开发者的必备技能。本文将通过浅显易懂的语言和实际代码示例,带领初学者走进Node.js的世界,一步步搭建起自己的RESTful API。无论你是编程新手,还是想扩展技术栈的老手,这篇文章都将是你的良师益友。让我们一起探索Node.js的魅力,开启后端开发之旅!
|
1月前
|
JavaScript 前端开发 API
复习JavaScript中的数组API
这段代码介绍了JavaScript数组的几种实用方法:`fill`用于用固定值覆盖指定范围内的元素;`find`查找符合条件的第一个元素;`findIndex`获取该元素的索引;`sort`对数组排序,需提供比较函数以正确排序数字;结合`slice`与`sort`可在不改动原数组的情况下进行排序;`reverse`反转数组元素;利用`map`可创建新数组并替换其中的特定元素,同时保持原数组不变。
11 1
|
1月前
|
XML JavaScript 前端开发
JavaScript中的DOM解析器DOMParser api的讲解
`DOMParser`能将XML或HTML源码字符串解析成DOM `Document`。通过`new DOMParser()`创建实例,使用`.parseFromString(string, type)`方法进行解析,其中`string`为待解析的字符串,`type`指定解析类型如`text/html`或`text/xml`等,返回一个`Document`对象。例如,可解析包含`&lt;p&gt;666&lt;/p&gt;`的字符串并获取其文本内容`666`。
81 1
|
20天前
|
JSON JavaScript 中间件
深入浅出Node.js: 从零开始构建RESTful API
【8月更文挑战第31天】 在数字时代的浪潮中,掌握如何构建高效、可靠的后端服务是每一位开发者的必备技能。本文将通过浅显易懂的语言和实际代码示例,带领初学者走进Node.js的世界,一步步搭建起自己的RESTful API。无论你是编程新手,还是想扩展技术栈的老手,这篇文章都将是你的良师益友。让我们一起探索Node.js的魅力,开启后端开发之旅!