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

相关文章
|
8月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
JavaScript 前端开发 API
Vue.js 3:探索组合式API带来的新变革
Vue.js 3:探索组合式API带来的新变革
388 84
|
9月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
11月前
|
JavaScript 前端开发 安全
盘点原生JS中目前最没用的几个功能API
在JavaScript的发展历程中,许多功能与API曾风光无限,但随着技术进步和语言演化,部分功能逐渐被淘汰或被更高效的替代方案取代。例如,`with`语句使代码作用域复杂、可读性差;`void`操作符功能冗余且影响可读性;`eval`函数存在严重安全风险和性能问题;`unescape`和`escape`函数已被`decodeURIComponent`和`encodeURIComponent`取代;`arguments`对象则被ES6的剩余参数语法替代。这些变化体现了JavaScript不断优化的趋势,开发者应紧跟技术步伐,学习新技能,适应新技术环境。
218 10
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
278 12
|
JavaScript 前端开发 API
Vue.js 3:深入探索组合式API的实践与应用
Vue.js 3:深入探索组合式API的实践与应用
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
JavaScript 前端开发 API
Vue.js 3中的Composition API:提升你的组件开发体验
Vue.js 3中的Composition API:提升你的组件开发体验
374 1