最近使用openlayers显示arcims地图,因为需要调用另一个服务器的地图数据,所以需要通过proxy进行实现。
下面是Openlayers请求arcims数据的代码(摘自openlayers examples中实例):
<script type="text/javascript">
var lon = 0;
var lat = 0;
var zoom = 1;
var map, layer;
function init(){
//通过proxy访问地图数据
OpenLayers.ProxyHost = "Proxy?url=";
map = new OpenLayers.Map( 'map' );
var options = {
serviceName: "OpenLayers_Sample",
async: true
};
layer = new OpenLayers.Layer.ArcIMS( "Global Sample Map",
"http://sample.avencia.com/servlet/com.esri.esrimap.Esrimap", options );
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
map.addControl( new OpenLayers.Control.LayerSwitcher() );
下面是proxy的Java实现:
package org.proxy.servlet;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ProxyServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 4191419806910781940L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String query = null;
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
query = request.getParameter("url");
System.out.println(query);
//query = "http://www.google.cn/search?hl=zh-CN&source=hp&q=proxy&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=";
if (query == null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing URL Parameter!");
return;
}
query = URLDecoder.decode(query);
PrintWriter out = response.getWriter();
int length = request.getContentLength();
byte[] bytes = new byte[length];
//System.out.println(length);
try{
URL url = new URL(query);
BufferedInputStream in = new BufferedInputStream(url.openStream());
System.out.println(in.read(bytes,0,length));
in.close();
out.print(bytes);
out.flush();
out.close();
}catch(IOException e){
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Exception:"+e);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String query = null;
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
query = request.getParameter("url");
System.out.println(query);
//query = "http://www.google.cn/search?hl=zh-CN&source=hp&q=proxy&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=";
if (query == null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing URL Parameter!");
return;
}
query = URLDecoder.decode(query);
PrintWriter out = response.getWriter();
int length = request.getContentLength();
byte[] bytes = new byte[length];
//System.out.println(length);
try{
URL url = new URL(query);
BufferedInputStream in = new BufferedInputStream(url.openStream());
System.out.println(in.read(bytes,0,length));
in.close();
out.print(bytes);
out.flush();
out.close();
}catch(IOException e){
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Exception:"+e);
}
}
}
运行之后只换回三个字节的数据,但如果使用google的URL后却可以换回正常的数据,现在不知道问题出在哪里,等待解决。
分享到:
相关推荐
我自己用eclipse写的java代码,可以直接用eclipse导入,也可以直接用java -jar proxy_sample.jar执行 代码量很小,尽量通过注释进行说明 本例实现了InvocationHandler接口,代码具有典型性 在研究代理模式(Proxy...
NULL 博文链接:https://cn-done.iteye.com/blog/1743191
利用JAVA代理Proxy机制实现spring对ibaits的MapperScannerConfigurer功能 详细:http://blog.csdn.net/wq105032007067/article/details/8812598
JAVA动态代理,采用Proxy与InvocationHandler实现。
java实现的proxy_最终版本,可以实现htpps代理
是一个实现了代理服务的类。当有客户端连接时调用serve()方法,可以在客户和服务器端传输数据。
Websocket反向代理的Java实现。 与描述的方法类似,但使用Java实现。 这在Java应用程序服务器(例如Spring Boot)中可能很有用。 在根级别有一些nodejs脚本,可用于模仿验证代理服务器所需的功能。 常见的是脚本,...
Java 实现免费代理IP的获取方式 并动态实时校验是否有效,java文件项目内含有Jsoup的Jar包(Jsoup是加工过的,含请求),有2个主入口程序: 其一:用于请求代理IP,并立即校验是否是一个有效的代理IP,如果有效,...
用sun的JDK API实现java的动态代理类
一个可以用来制作Hypixel加速线路的工具 自己写的哦 使用方法很简单直接使用java -jar TCP-Proxy.jar启动它就可以了 原理的话是使用Java实现TCP数据转发
Java动态代理的Demo,讲述动态代理的实现与用途。
java8 看不到源码HTTP/HTTPS 转发代理 该项目包含 HTTP/HTTPS(HTTP 隧道)转发代理的 Java 实现。 需要 JDK 1.8 或更高版本。 基于蔚来 概述 nio-http-proxy包含基于 NIO 的 HTTP/HTTPS 转发代理实现,它是健壮的和...
需求描述 在正常的项目开发需求中,连接远程服务器的场景一般有二: 1 自家实现的http服务器,api接口都已经约定好;... 好吧,接下来让我们开始实现基于proxy的穿越吧! 准备工作 1
smartproxy是基于java实现的将局域网电脑的端口映射到公网。或不走公网流量使用直连客户端方式映射局域网电脑端口到另一个局域网电脑上。支持任何tcp上层协议(访问ssh、远程桌面、网站等)。 说明 本项目引用到了...
这是一个用Java编写的简单代理服务器,带有标准库,要在计算机上运行它,只需编译Java文件并输入 $ java WebProxy <$端口_运行_>
adapter bridge build chainOfResp command decorator factory iterator mediator observer proxy state visitor 设计模式,java实现,如有纰漏请指正,谢谢
详解设计模式中的proxy代理模式及在Java程序中的实现共14页.pdf.zip
代理服务器 BrowserMob Proxy,BrowserMob Proxy 简称 BMP,可以这么说,BMP 绝对是为 Selenium 为生的,Selenium + BMP 的完美搭配,可以实现很多你绝对想象不出来的功能
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
有23种设计模式,全部java实现,包括Proxy,singleton,interpreter,factoryMothod等常见设计模式