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