TestServlet nach juplo-test verschoben
[percentcodec] / test / src / main / java / de / halbekunst / juplo / test / TestServlet.java
diff --git a/test/src/main/java/de/halbekunst/juplo/test/TestServlet.java b/test/src/main/java/de/halbekunst/juplo/test/TestServlet.java
new file mode 100644 (file)
index 0000000..b2b29f4
--- /dev/null
@@ -0,0 +1,79 @@
+package de.halbekunst.juplo.test;
+
+import java.io.IOException;
+import java.util.Map;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author kai
+ */
+public class TestServlet extends HttpServlet {
+  private final static Logger log = LoggerFactory.getLogger(TestServlet.class);
+
+  private static final String FORWARDED = TestServlet.class.getName() + ".FORWARDED";
+  private static final String INCLUDED = TestServlet.class.getName() + ".INCLUDED";
+
+  @Override
+  protected long getLastModified(HttpServletRequest req) {
+    try {
+      /** Der Reqeust-Parameter "lm" wird als Wert für Last-Modified zurückgegeben */
+      return Long.parseLong(req.getParameter("l"));
+    }
+    catch (Exception e) {
+      return -1l;
+    }
+  }
+
+  @Override
+  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+    /** Angeforderte Header setzen */
+    Map<String, String[]> map = request.getParameterMap();
+    for (String param : map.keySet()) {
+      if (param.equals("n") || param.equals("l") || param.equals("f") || param.equals("i"))
+        continue;
+      /**
+       * Alle Request-Parameter außer die Sonder-Parameter "n" und "lm"
+       * werden als Schlüssel/Wert-Paare für die Antwort-Header interpretiert!
+       */
+      for (String value : map.get(param))
+        response.setHeader(param, value);
+    }
+
+    int n = 0;
+    try {
+      /**
+       * Wenn der Parameter n gesetzt ist, wird ein Antwort-Body erzeugt, der
+       * exakt die Anzahl der geforderten Bytes enthält.
+       */
+      n = Integer.parseInt(request.getParameter("n"));
+    }
+    catch(Exception e) {}
+    log.debug("GET {} bytes: {}", n, request.getRequestURI());
+    ServletOutputStream out = response.getOutputStream();
+    for (int i=0; i<n; i++)
+      out.write(i%2 + 48); /** ASCII-Codes für "0" und "1" */
+
+    if (request.getParameter("i") != null && request.getAttribute(INCLUDED) == null) {
+      for (String include : request.getParameterValues("i")) {
+        RequestDispatcher dispatcher = request.getRequestDispatcher(include);
+        request.setAttribute(INCLUDED, include);
+        dispatcher.include(request, response);
+      }
+    }
+
+    if (request.getParameter("f") != null && request.getAttribute(FORWARDED) == null) {
+      String forward = request.getParameter("f");
+      request.setAttribute(FORWARDED, forward);
+      RequestDispatcher dispatcher = request.getRequestDispatcher(forward);
+      dispatcher.forward(request, response);
+    }
+  }
+}