package kornell.server; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import kornell.core.util.StringUtils; @SuppressWarnings("serial") public class APIProxyServlet extends HttpServlet{ @Override protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { String distributionURL = "http://eduvem.com"; String uri = req.getRequestURI(); StringBuilder log = new StringBuilder(); CloseableHttpClient httpclient = HttpClients.createDefault(); try { HttpGet httpget = new HttpGet(StringUtils.mkurl(distributionURL,uri)); log.append("Requesting " + uri); // Create a custom response handler ResponseHandler<String> responseHandler = new ResponseHandler<String>() { public String handleResponse( final HttpResponse response) throws ClientProtocolException, IOException { int status = response.getStatusLine().getStatusCode(); if (status >= 200 && status < 300) { HttpEntity entity = response.getEntity(); Header[] headers = response.getHeaders("Content-Type"); if(headers.length > 0) { String ctype = headers[0].toString(); //TODO: Set Correct Content Type resp.setHeader("Content-Type", ctype); } return entity != null ? EntityUtils.toString(entity) : null; } else { throw new ClientProtocolException( "Unexpected response status: " + status); } } }; String responseBody = httpclient.execute(httpget, responseHandler); if(uri.endsWith("html")){ resp.setContentType("text/html"); }else if (uri.endsWith("css")){ resp.setContentType("text/css"); }else if (uri.endsWith("js")){ resp.setContentType("application/javascript"); } resp.setCharacterEncoding("UTF-8"); System.out.println(log); resp.getWriter().print(responseBody); } finally { httpclient.close(); } } }