ExportProxyServlet.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package com.mxgraph.online;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import java.net.HttpURLConnection;
  5. import java.net.URL;
  6. import java.util.Enumeration;
  7. import java.util.List;
  8. import java.util.Map;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. /**
  14. * Servlet implementation ExportProxyServlet
  15. */
  16. @SuppressWarnings("serial")
  17. public class ExportProxyServlet extends HttpServlet
  18. {
  19. private final String EXPORT_URL = "http://localhost:8000/";
  20. /**
  21. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  22. */
  23. protected void doPost(HttpServletRequest request,
  24. HttpServletResponse response) throws ServletException, IOException
  25. {
  26. try
  27. {
  28. String exportUrl = System.getenv("EXPORT_URL");
  29. if (exportUrl == null)
  30. {
  31. exportUrl = EXPORT_URL;
  32. }
  33. URL url = new URL(exportUrl);
  34. HttpURLConnection con = (HttpURLConnection) url.openConnection();
  35. con.setRequestMethod("POST");
  36. //Copy request headers to export server
  37. Enumeration<String> headerNames = request.getHeaderNames();
  38. while (headerNames.hasMoreElements())
  39. {
  40. String headerName = headerNames.nextElement();
  41. Enumeration<String> headers = request.getHeaders(headerName);
  42. while (headers.hasMoreElements())
  43. {
  44. String headerValue = headers.nextElement();
  45. con.addRequestProperty(headerName, headerValue);
  46. }
  47. }
  48. // Send post request
  49. con.setDoOutput(true);
  50. OutputStream params = con.getOutputStream();
  51. Utils.copy(request.getInputStream(), params);
  52. params.flush();
  53. params.close();
  54. //Copy response code
  55. response.setStatus(con.getResponseCode());
  56. //Copy response headers
  57. Map<String, List<String>> map = con.getHeaderFields();
  58. for (Map.Entry<String, List<String>> entry : map.entrySet())
  59. {
  60. String key = entry.getKey();
  61. if (key != null)
  62. {
  63. for (String val : entry.getValue())
  64. {
  65. response.addHeader(entry.getKey(), val);
  66. }
  67. }
  68. }
  69. //Copy response
  70. OutputStream out = response.getOutputStream();
  71. Utils.copy(con.getInputStream(), out);
  72. out.flush();
  73. out.close();
  74. }
  75. catch (Exception e)
  76. {
  77. response.setStatus(
  78. HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  79. e.printStackTrace();
  80. }
  81. }
  82. }