1 
2 import java.io.IOException;
3 import java.io.PrintWriter;
4 
5 import java.util.Map;
6 
7 import javax.servlet.DispatcherType;
8 import javax.servlet.RequestDispatcher;
9 import javax.servlet.ServletConfig;
10 import javax.servlet.ServletException;
11 import javax.servlet.ServletOutputStream;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletRequestWrapper;
15 import javax.servlet.http.HttpServletResponse;
16 import javax.servlet.http.HttpServletResponseWrapper;
17 
18 public class app extends HttpServlet
19 {
20     private String id;
21 
22     private class RequestWrapper extends HttpServletRequestWrapper
23     {
RequestWrapper(HttpServletRequest r)24         public RequestWrapper(HttpServletRequest r)
25         {
26             super(r);
27         }
28     }
29 
30     private class ResponseWrapper extends HttpServletResponseWrapper
31     {
ResponseWrapper(HttpServletResponse r)32         public ResponseWrapper(HttpServletResponse r)
33         {
34             super(r);
35         }
36     }
37 
38     @Override
init(ServletConfig sc)39     public void init(ServletConfig sc)
40         throws ServletException
41     {
42         id = sc.getInitParameter("id");
43     }
44 
getRequestDispatcher(HttpServletRequest request, String str)45     private RequestDispatcher getRequestDispatcher(HttpServletRequest request, String str)
46     {
47         String disp = request.getParameter("disp");
48 
49         if (disp != null && disp.equals("ctx")) {
50             return request.getServletContext().getRequestDispatcher(str);
51         }
52 
53         if (disp != null && disp.equals("name")) {
54             return request.getServletContext().getNamedDispatcher(str);
55         }
56 
57         if (disp == null || disp.equals("req")) {
58             return request.getRequestDispatcher(str);
59         }
60 
61         return null;
62     }
63 
64     @Override
doGet(HttpServletRequest request, HttpServletResponse response)65     public void doGet(HttpServletRequest request, HttpServletResponse response)
66         throws IOException, ServletException
67     {
68         String dtype = "" + request.getDispatcherType();
69 
70         response.addHeader("X-" + dtype + "-Id", id);
71         response.addHeader("X-" + dtype + "-Request-URI", "" + request.getRequestURI());
72         response.addHeader("X-" + dtype + "-Servlet-Path", "" + request.getServletPath());
73         response.addHeader("X-" + dtype + "-Path-Info", "" + request.getPathInfo());
74         response.addHeader("X-" + dtype + "-Query-String", "" + request.getQueryString());
75         response.addHeader("X-" + dtype + "-Dispatcher-Type", "" + request.getDispatcherType());
76 
77         response.setContentType("text/plain; charset=utf-8");
78 
79         PrintWriter out = response.getWriter();
80 
81         if (id.equals("inc")) {
82             String uri = request.getParameter("uri");
83 
84             if (uri != null && request.getDispatcherType() != DispatcherType.INCLUDE) {
85                 response.addHeader("X-Include", "" + uri);
86 
87                 out.println("Before include.");
88 
89                 RequestDispatcher d = getRequestDispatcher(request, uri);
90 
91                 if (d == null) {
92                     out.println("Dispatcher is null");
93                     return;
94                 }
95 
96                 try {
97                     d.include(new RequestWrapper(request), new ResponseWrapper(response));
98                 } catch(Exception e) {
99                     response.addHeader("X-Exception", "" + e);
100                     out.println("Exception: " + e);
101                 }
102 
103                 response.addHeader("X-After-Include", "you-should-see-this");
104 
105                 out.println("After include.");
106 
107                 return;
108             }
109         }
110 
111         if (id.equals("data")) {
112             out.println("app.doGet(): #" + this + ", " + id);
113             out.println("RequestURI:  " + request.getRequestURI());
114             out.println("ServletPath: " + request.getServletPath());
115             out.println("PathInfo:    " + request.getPathInfo());
116             out.println("DispType:    " + request.getDispatcherType());
117             out.println("QueryString: " + request.getQueryString());
118 
119             Map<String, String[]> pmap = request.getParameterMap();
120 
121             for (Map.Entry<String,String[]> p : pmap.entrySet()) {
122                 out.println("- " + p.getKey() + "=" + String.join(",", p.getValue()));
123             }
124 
125             out.println(RequestDispatcher.INCLUDE_REQUEST_URI + ":  " + request.getAttribute(RequestDispatcher.INCLUDE_REQUEST_URI));
126             out.println(RequestDispatcher.INCLUDE_CONTEXT_PATH + ": " + request.getAttribute(RequestDispatcher.INCLUDE_CONTEXT_PATH));
127             out.println(RequestDispatcher.INCLUDE_SERVLET_PATH + ": " + request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH));
128             out.println(RequestDispatcher.INCLUDE_PATH_INFO + ":    " + request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO));
129             out.println(RequestDispatcher.INCLUDE_QUERY_STRING + ": " + request.getAttribute(RequestDispatcher.INCLUDE_QUERY_STRING));
130 
131             return;
132         }
133 
134         response.sendError(404);
135     }
136 }
137