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

相关文章
|
23天前
|
缓存 JavaScript 数据安全/隐私保护
js开发:请解释什么是ES6的Proxy,以及它的用途。
`ES6`的`Proxy`对象用于创建一个代理,能拦截并自定义目标对象的访问和操作,应用于数据绑定、访问控制、函数调用的拦截与修改以及异步操作处理。
17 3
|
28天前
|
JavaScript 前端开发 API
常用JavaScript 数组 API大全
常用JavaScript 数组 API大全
32 0
|
1月前
|
API
egg.js 24.2写第一个api接口
egg.js 24.2写第一个api接口
71 0
|
3月前
|
JSON JavaScript 前端开发
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)(下)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
49 2
|
3月前
|
分布式计算 JavaScript 前端开发
JS中数组22种常用API总结,slice、splice、map、reduce、shift、filter、indexOf......
JS中数组22种常用API总结,slice、splice、map、reduce、shift、filter、indexOf......
|
2月前
|
Web App开发 JavaScript NoSQL
深入浅出:构建基于Node.js的RESTful API
在当今快速发展的互联网时代,RESTful API已成为前后端分离架构中不可或缺的一部分。本文旨在为初学者和中级开发人员提供一个清晰、简洁的指南,详细介绍如何使用Node.js构建一个高效、可维护的RESTful API。通过结合实际案例,本文将从API设计理念出发,深入讲解如何利用Express框架及MongoDB数据库实现API的增删改查功能,同时探讨如何通过JWT进行安全认证,确保数据传输的安全性。此外,文章还将简要介绍如何使用Swagger生成API文档,使得API的测试和维护更加便捷。无论你是希望提升现有项目的API设计,还是想从零开始构建一个新项目,本文都将为你提供一条清晰的道路
|
28天前
|
JavaScript 前端开发 API
JavaScript循环遍历常用的7种方法以及常用的数组 API
JavaScript循环遍历常用的7种方法以及常用的数组 API
34 0
|
1月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express构建RESTful API
使用Node.js和Express构建RESTful API
14 0
|
2月前
|
NoSQL JavaScript 前端开发
深入浅出:使用Node.js和MongoDB构建RESTful API
在当今的软件开发领域,构建高效、可扩展的Web服务已成为开发者的重要任务之一。本文将引导读者通过现代JavaScript环境——Node.js,搭配流行的NoSQL数据库MongoDB,一步步构建一个RESTful API。不同于常规的摘要,我们将采用故事化的方式,通过一个虚构的应用“BookFinder”的开发旅程,带领读者理解API设计、数据库交互及安全性考量等关键知识点。无论你是前端工程师希望深化后端知识,还是后端新手寻求实践机会,本文都将提供你所需的指南和启示。
|
2月前
|
JSON 前端开发 JavaScript
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
35 0
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)