设为首页 加入收藏

TOP

Java实现OpenLayers跨域代理程序(四)
2014-11-24 01:43:04 来源: 作者: 【 】 浏览:4
Tags:Java 实现 OpenLayers 代理 程序
if (requestMethod.equals("POST")){
transferHTTPRequestHeadersForPOST(connection, request);
int clength = request.getContentLength();//clength is for checking if there is a POST body. Is that sufficient


if(clength > 0) {
istream = request.getInputStream();
connection.setDoOutput(true);//for POST we need to write to connection
connection.setRequestProperty( "Content-Length",Integer.toString(clength)); //only valid for POST request
connectionOstream = connection.getOutputStream();
//copy the request body to remote outputStream
copy(istream, connectionOstream);
}
connectionIstream = connection.getInputStream();
}


//step 3: return output
//can output be the same for GET/POST or different return headers
//servlet may return 3 things: status code, response headers, response body
// status code and headers have to be set before response body
response.setContentType(connection.getContentType());
ostream = response.getOutputStream();
copy(connectionIstream, ostream);
}
// if not targetURL send page that targetURL is required param
} catch (Exception e){
response.setStatus(500); //what will user get default page for response code
//WMS/WFS have specific responses to errors
//response.getWriter();//will writing custom result help
e.printStackTrace();
} finally {
if(istream != null) { istream.close(); }
if(ostream != null) { ostream.close(); }
if(connectionIstream != null) { connectionIstream.close(); }
if(connectionOstream != null) { connectionOstream.close(); }
}


}


private void copy(InputStream istream, OutputStream ostream) throws Exception {
int bufferSize = 4*4*1024;//same buffer size as in Jetty utils (2*8192)
byte[] buffer = new byte[bufferSize];
int read;
while ((read = istream.read(buffer)) != -1) {
ostream.write(buffer, 0, read);
}
}


private void transferHTTPRequestHeaders(HttpURLConnection connection, HttpServletRequest request){
//TODO make sure all headers are copied to target, see for HTTP headers http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
//Do request.getProperties to get request properties
if(request.getHeader("Accept") != null){
connection.setRequestProperty("Accept", request.getHeader("Accept"));
}
if(request.getHeader("Accept-Charset") != null){
connection.setRequestProperty("Accept-Charset", request.getHeader("Accept-Charset"));
}
if(request.getHeader("Accept-Encoding") != null){
//TODO browsers accept gzipped, should proxy accept gzip and how to handle it
//connection.setRequestProperty("Accept-Encoding", request.getHeader("Accept-Encoding"));
}
if(request.getHeader("Authorization") != nul

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenLayer加载WFS图层及C#编写ASP.. 下一篇Android 应用开发者必看的 9 个 T..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: