comparison flys-client/src/main/java/de/intevation/flys/client/server/ProxyServlet.java @ 3498:92239b53823f

ProxyServlet: Use block instead of byte wise copy. flys-client/trunk@5222 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 16 Aug 2012 16:38:21 +0000
parents 88feb3347aa5
children
comparison
equal deleted inserted replaced
3497:88feb3347aa5 3498:92239b53823f
1 package de.intevation.flys.client.server; 1 package de.intevation.flys.client.server;
2 2
3 import java.io.BufferedInputStream;
4 import java.io.InputStream; 3 import java.io.InputStream;
5 import java.io.IOException; 4 import java.io.IOException;
6 import java.io.OutputStream; 5 import java.io.OutputStream;
7 import java.util.Enumeration; 6 import java.util.Enumeration;
8 7
41 @Override 40 @Override
42 public void doPost(HttpServletRequest req, HttpServletResponse resp) { 41 public void doPost(HttpServletRequest req, HttpServletResponse resp) {
43 } 42 }
44 43
45 @Override 44 @Override
46 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 45 public void doGet(HttpServletRequest req, HttpServletResponse resp)
46 throws IOException {
47 HttpClient httpclient = new DefaultHttpClient(); 47 HttpClient httpclient = new DefaultHttpClient();
48 48
49 String requesturi = req.getRequestURI(); 49 String requesturi = req.getRequestURI();
50 String query = req.getQueryString(); 50 String query = req.getQueryString();
51 51
52 HttpGet httpget = new HttpGet(this.remoteurl + "?" + query); 52 HttpGet httpget = new HttpGet(this.remoteurl + "?" + query);
53 53
54 boolean debug = logger.isDebugEnabled();
55
54 for (Enumeration e = req.getHeaderNames(); e.hasMoreElements();) { 56 for (Enumeration e = req.getHeaderNames(); e.hasMoreElements();) {
55 String name = (String)e.nextElement(); 57 String name = (String)e.nextElement();
56 for (Enumeration f = req.getHeaders(name); f.hasMoreElements();) { 58 for (Enumeration f = req.getHeaders(name); f.hasMoreElements();) {
57 String value = (String)f.nextElement(); 59 String value = (String)f.nextElement();
58 logger.debug("Adding request header " + name + " : " + value); 60 if (debug) {
61 logger.debug(
62 "Adding request header " + name + " : " + value);
63 }
59 httpget.addHeader(name, value); 64 httpget.addHeader(name, value);
60 } 65 }
61 } 66 }
62 67
63 HttpResponse response = httpclient.execute(httpget); 68 HttpResponse response = httpclient.execute(httpget);
64 69
65 StatusLine statusline = response.getStatusLine(); 70 StatusLine statusline = response.getStatusLine();
66 logger.debug("Response statuscode " + statusline.getStatusCode()); 71 if (debug) {
72 logger.debug("Response statuscode " + statusline.getStatusCode());
73 }
67 resp.setStatus(statusline.getStatusCode()); 74 resp.setStatus(statusline.getStatusCode());
68 75
69 Header[] headers = response.getAllHeaders(); 76 Header[] headers = response.getAllHeaders();
70 for(Header header : headers) { 77 for(Header header : headers) {
71 logger.debug("Adding response header " + header.getName() + " : " + header.getValue()); 78 if (debug) {
79 logger.debug(
80 "Adding response header " + header.getName() +
81 " : " + header.getValue());
82 }
72 resp.setHeader(header.getName(), header.getValue()); 83 resp.setHeader(header.getName(), header.getValue());
73 } 84 }
74 85
75 HttpEntity entity = response.getEntity(); 86 HttpEntity entity = response.getEntity();
76 if (entity != null) { 87 if (entity != null) {
77 InputStream instream = entity.getContent(); 88 InputStream instream = entity.getContent();
78 BufferedInputStream binstream = new BufferedInputStream(instream); 89 byte [] buf = new byte[4096];
79 try { 90 try {
80 OutputStream outstream = resp.getOutputStream(); 91 OutputStream outstream = resp.getOutputStream();
81 int read; 92 try {
82 while ( ( read = binstream.read() ) != -1 ) { 93 int read;
83 outstream.write(read); 94 while ((read = instream.read(buf)) >= 0) {
95 outstream.write(buf, 0, read);
96 }
97 outstream.flush();
84 } 98 }
85 outstream.close(); 99 finally {
100 outstream.close();
101 }
86 } 102 }
87 finally { 103 finally {
88 instream.close(); 104 instream.close();
89 } 105 }
90 } 106 }

http://dive4elements.wald.intevation.org