Projekt von de.halbekunst.juplo nach de.juplo verschoben und aufgeräumt
[percentcodec] / accelerator / src / test / java / de / juplo / accelerator / TestServlet.java
1 package de.juplo.accelerator;
2
3 import java.io.IOException;
4 import java.util.Map;
5 import javax.servlet.RequestDispatcher;
6 import javax.servlet.ServletException;
7 import javax.servlet.ServletOutputStream;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import org.junit.Ignore;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14
15 /**
16  *
17  * @author kai
18  */
19 @Ignore
20 public class TestServlet extends HttpServlet {
21   private final static Logger log = LoggerFactory.getLogger(TestServlet.class);
22
23   private static final String FORWARDED = TestServlet.class.getName() + ".FORWARDED";
24   private static final String INCLUDED = TestServlet.class.getName() + ".INCLUDED";
25
26   @Override
27   protected long getLastModified(HttpServletRequest req) {
28     try {
29       /** Der Reqeust-Parameter "lm" wird als Wert für Last-Modified zurückgegeben */
30       return Long.parseLong(req.getParameter("l"));
31     }
32     catch (Exception e) {
33       return -1l;
34     }
35   }
36
37   @Override
38   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
39     /** Angeforderte Header setzen */
40     Map<String, String[]> map = request.getParameterMap();
41     for (String param : map.keySet()) {
42       if (param.equals("n") || param.equals("l") || param.equals("f") || param.equals("i"))
43         continue;
44       /**
45        * Alle Request-Parameter außer die Sonder-Parameter "n" und "lm"
46        * werden als Schlüssel/Wert-Paare für die Antwort-Header interpretiert!
47        */
48       for (String value : map.get(param))
49         response.setHeader(param, value);
50     }
51
52     int n = 0;
53     try {
54       /**
55        * Wenn der Parameter n gesetzt ist, wird ein Antwort-Body erzeugt, der
56        * exakt die Anzahl der geforderten Bytes enthält.
57        */
58       n = Integer.parseInt(request.getParameter("n"));
59     }
60     catch(Exception e) {}
61     log.debug("GET {} bytes: {}", n, request.getRequestURI());
62     ServletOutputStream out = response.getOutputStream();
63     for (int i=0; i<n; i++)
64       out.write(i%2 + 48); /** ASCII-Codes für "0" und "1" */
65
66     if (request.getParameter("i") != null && request.getAttribute(INCLUDED) == null) {
67       for (String include : request.getParameterValues("i")) {
68         RequestDispatcher dispatcher = request.getRequestDispatcher(include);
69         request.setAttribute(INCLUDED, include);
70         dispatcher.include(request, response);
71       }
72     }
73
74     if (request.getParameter("f") != null && request.getAttribute(FORWARDED) == null) {
75       String forward = request.getParameter("f");
76       request.setAttribute(FORWARDED, forward);
77       RequestDispatcher dispatcher = request.getRequestDispatcher(forward);
78       dispatcher.forward(request, response);
79     }
80   }
81 }