1 16 package org.mortbay.servlet; 17 import java.io.IOException ; 18 import java.io.OutputStream ; 19 import java.io.PrintWriter ; 20 import java.lang.reflect.Field ; 21 import java.util.Enumeration ; 22 import java.util.Locale ; 23 24 import javax.servlet.ServletConfig ; 25 import javax.servlet.ServletException ; 26 import javax.servlet.ServletRequest ; 27 import javax.servlet.ServletRequestWrapper ; 28 import javax.servlet.UnavailableException ; 29 import javax.servlet.http.Cookie ; 30 import javax.servlet.http.HttpServlet ; 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.http.HttpServletRequestWrapper ; 33 import javax.servlet.http.HttpServletResponse ; 34 35 import org.apache.commons.logging.Log; 36 import org.mortbay.log.LogFactory; 37 import org.mortbay.html.Break; 38 import org.mortbay.html.Font; 39 import org.mortbay.html.Heading; 40 import org.mortbay.html.Page; 41 import org.mortbay.html.Select; 42 import org.mortbay.html.Table; 43 import org.mortbay.html.TableForm; 44 import org.mortbay.http.HttpException; 45 import org.mortbay.util.Loader; 46 import org.mortbay.util.LogSupport; 47 48 49 52 public class Dump extends HttpServlet 53 { 54 private static Log log= LogFactory.getLog(Dump.class); 55 56 57 String pageType; 58 59 60 public void init(ServletConfig config) throws ServletException 61 { 62 super.init(config); 63 } 64 65 66 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException 67 { 68 doGet(request, response); 69 } 70 71 72 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException 73 { 74 request.setAttribute("Dump", this); 75 request.setCharacterEncoding("ISO_8859_1"); 76 getServletContext().setAttribute("Dump",this); 77 78 String info= request.getPathInfo(); 79 if (info != null && info.endsWith("Exception")) 80 { 81 try 82 { 83 throw (Throwable ) (Loader.loadClass(this.getClass(), info.substring(1)).newInstance()); 84 } 85 catch (Throwable th) 86 { 87 throw new ServletException (th); 88 } 89 } 90 91 String redirect= request.getParameter("redirect"); 92 if (redirect != null && redirect.length() > 0) 93 { 94 response.getOutputStream().println("THIS SHOULD NOT BE SEEN!"); 95 response.sendRedirect(redirect); 96 response.getOutputStream().println("THIS SHOULD NOT BE SEEN!"); 97 return; 98 } 99 100 String error= request.getParameter("error"); 101 if (error != null && error.length() > 0) 102 { 103 response.getOutputStream().println("THIS SHOULD NOT BE SEEN!"); 104 response.sendError(Integer.parseInt(error)); 105 response.getOutputStream().println("THIS SHOULD NOT BE SEEN!"); 106 return; 107 } 108 109 String length= request.getParameter("length"); 110 if (length != null && length.length() > 0) 111 { 112 response.setContentLength(Integer.parseInt(length)); 113 } 114 115 String buffer= request.getParameter("buffer"); 116 if (buffer != null && buffer.length() > 0) 117 response.setBufferSize(Integer.parseInt(buffer)); 118 119 request.setCharacterEncoding("UTF-8"); 120 response.setContentType("text/html"); 121 122 if (info != null && info.indexOf("Locale/") >= 0) 123 { 124 try 125 { 126 String locale_name= info.substring(info.indexOf("Locale/") + 7); 127 Field f= java.util.Locale .class.getField(locale_name); 128 response.setLocale((Locale )f.get(null)); 129 } 130 catch (Exception e) 131 { 132 LogSupport.ignore(log, e); 133 response.setLocale(Locale.getDefault()); 134 } 135 } 136 137 String cn= request.getParameter("cookie"); 138 String cv=request.getParameter("value"); 139 String v=request.getParameter("version"); 140 if (cn!=null && cv!=null) 141 { 142 Cookie cookie= new Cookie (cn, cv); 143 cookie.setComment("Cookie from dump servlet"); 144 if (v!=null) 145 { 146 cookie.setMaxAge(300); 147 cookie.setPath("/"); 148 cookie.setVersion(Integer.parseInt(v)); 149 } 150 response.addCookie(cookie); 151 } 152 153 String pi= request.getPathInfo(); 154 if (pi != null && pi.startsWith("/ex")) 155 { 156 OutputStream out= response.getOutputStream(); 157 out.write("</H1>This text should be reset</H1>".getBytes()); 158 if ("/ex0".equals(pi)) 159 throw new ServletException ("test ex0", new Throwable ()); 160 if ("/ex1".equals(pi)) 161 throw new IOException ("test ex1"); 162 if ("/ex2".equals(pi)) 163 throw new UnavailableException ("test ex2"); 164 if ("/ex3".equals(pi)) 165 throw new HttpException(501); 166 } 167 168 PrintWriter pout= response.getWriter(); 169 Page page= null; 170 171 try 172 { 173 page= new Page(); 174 page.title("Dump Servlet"); 175 176 page.add(new Heading(1, "Dump Servlet")); 177 Table table= new Table(0).cellPadding(0).cellSpacing(0); 178 page.add(table); 179 table.newRow(); 180 table.addHeading("getMethod: ").cell().right(); 181 table.addCell("" + request.getMethod()); 182 table.newRow(); 183 table.addHeading("getContentLength: ").cell().right(); 184 table.addCell(Integer.toString(request.getContentLength())); 185 table.newRow(); 186 table.addHeading("getContentType: ").cell().right(); 187 table.addCell("" + request.getContentType()); 188 table.newRow(); 189 table.addHeading("getCharacterEncoding: ").cell().right(); 190 table.addCell("" + request.getCharacterEncoding()); 191 table.newRow(); 192 table.addHeading("getRequestURI: ").cell().right(); 193 table.addCell("" + request.getRequestURI()); 194 table.newRow(); 195 table.addHeading("getRequestURL: ").cell().right(); 196 table.addCell("" + request.getRequestURL()); 197 table.newRow(); 198 table.addHeading("getContextPath: ").cell().right(); 199 table.addCell("" + request.getContextPath()); 200 table.newRow(); 201 table.addHeading("getServletPath: ").cell().right(); 202 table.addCell("" + request.getServletPath()); 203 table.newRow(); 204 table.addHeading("getPathInfo: ").cell().right(); 205 table.addCell("" + request.getPathInfo()); 206 table.newRow(); 207 table.addHeading("getPathTranslated: ").cell().right(); 208 table.addCell("" + request.getPathTranslated()); 209 table.newRow(); 210 table.addHeading("getQueryString: ").cell().right(); 211 table.addCell("" + request.getQueryString()); 212 213 table.newRow(); 214 table.addHeading("getProtocol: ").cell().right(); 215 table.addCell("" + request.getProtocol()); 216 table.newRow(); 217 table.addHeading("getScheme: ").cell().right(); 218 table.addCell("" + request.getScheme()); 219 table.newRow(); 220 table.addHeading("getServerName: ").cell().right(); 221 table.addCell("" + request.getServerName()); 222 table.newRow(); 223 table.addHeading("getServerPort: ").cell().right(); 224 table.addCell("" + Integer.toString(request.getServerPort())); 225 table.newRow(); 226 table.addHeading("getLocalName: ").cell().right(); 227 table.addCell("" + request.getLocalName()); 228 table.newRow(); 229 table.addHeading("getLocalAddr: ").cell().right(); 230 table.addCell("" + request.getLocalAddr()); 231 table.newRow(); 232 table.addHeading("getLocalPort: ").cell().right(); 233 table.addCell("" + Integer.toString(request.getLocalPort())); 234 table.newRow(); 235 table.addHeading("getRemoteUser: ").cell().right(); 236 table.addCell("" + request.getRemoteUser()); 237 table.newRow(); 238 table.addHeading("getRemoteAddr: ").cell().right(); 239 table.addCell("" + request.getRemoteAddr()); 240 table.newRow(); 241 table.addHeading("getRemoteHost: ").cell().right(); 242 table.addCell("" + request.getRemoteHost()); 243 table.newRow(); 244 table.addHeading("getRemotePort: ").cell().right(); 245 table.addCell("" + request.getRemotePort()); 246 table.newRow(); 247 table.addHeading("getRequestedSessionId: ").cell().right(); 248 table.addCell("" + request.getRequestedSessionId()); 249 table.newRow(); 250 table.addHeading("isSecure(): ").cell().right(); 251 table.addCell("" + request.isSecure()); 252 253 table.newRow(); 254 table.addHeading("isUserInRole(admin): ").cell().right(); 255 table.addCell("" + request.isUserInRole("admin")); 256 257 table.newRow(); 258 table.addHeading("getLocale: ").cell().right(); 259 table.addCell("" + request.getLocale()); 260 261 Enumeration locales= request.getLocales(); 262 while (locales.hasMoreElements()) 263 { 264 table.newRow(); 265 table.addHeading("getLocales: ").cell().right(); 266 table.addCell(locales.nextElement()); 267 } 268 269 table.newRow(); 270 table 271 .newHeading() 272 .cell() 273 .nest(new Font(2, true)) 274 .add("<BR>Other HTTP Headers") 275 .attribute("COLSPAN", "2") 276 .left(); 277 Enumeration h= request.getHeaderNames(); 278 String name; 279 while (h.hasMoreElements()) 280 { 281 name= (String )h.nextElement(); 282 283 Enumeration h2= request.getHeaders(name); 284 while (h2.hasMoreElements()) 285 { 286 String hv= (String )h2.nextElement(); 287 table.newRow(); 288 table.addHeading(name + ": ").cell().right(); 289 table.addCell(hv); 290 } 291 } 292 293 table.newRow(); 294 table 295 .newHeading() 296 .cell() 297 .nest(new Font(2, true)) 298 .add("<BR>Request Parameters") 299 .attribute("COLSPAN", "2") 300 .left(); 301 h= request.getParameterNames(); 302 while (h.hasMoreElements()) 303 { 304 name= (String )h.nextElement(); 305 table.newRow(); 306 table.addHeading(name + ": ").cell().right(); 307 table.addCell(request.getParameter(name)); 308 String [] values= request.getParameterValues(name); 309 if (values == null) 310 { 311 table.newRow(); 312 table.addHeading(name + " Values: ").cell().right(); 313 table.addCell("NULL!!!!!!!!!"); 314 } 315 else 316 if (values.length > 1) 317 { 318 for (int i= 0; i < values.length; i++) 319 { 320 table.newRow(); 321 table.addHeading(name + "[" + i + "]: ").cell().right(); 322 table.addCell(values[i]); 323 } 324 } 325 } 326 327 table.newRow(); 328 table 329 .newHeading() 330 .cell() 331 .nest(new Font(2, true)) 332 .add("<BR>Cookies") 333 .attribute("COLSPAN", "2") 334 .left(); 335 Cookie [] cookies = request.getCookies(); 336 for (int i=0; cookies!=null && i<cookies.length;i++) 337 { 338 Cookie cookie = cookies[i]; 339 340 table.newRow(); 341 table.addHeading(cookie.getName() + ": ").cell().attribute("VALIGN", "TOP").right(); 342 table.addCell(cookie.getValue()); 343 } 344 345 346 table.newRow(); 347 table 348 .newHeading() 349 .cell() 350 .nest(new Font(2, true)) 351 .add("<BR>Request Attributes") 352 .attribute("COLSPAN", "2") 353 .left(); 354 Enumeration a= request.getAttributeNames(); 355 while (a.hasMoreElements()) 356 { 357 name= (String )a.nextElement(); 358 table.newRow(); 359 table.addHeading(name + ": ").cell().attribute("VALIGN", "TOP").right(); 360 table.addCell("<pre>" + toString(request.getAttribute(name)) + "</pre>"); 361 } 362 363 364 table.newRow(); 365 table 366 .newHeading() 367 .cell() 368 .nest(new Font(2, true)) 369 .add("<BR>Servlet InitParameters") 370 .attribute("COLSPAN", "2") 371 .left(); 372 a= getInitParameterNames(); 373 while (a.hasMoreElements()) 374 { 375 name= (String )a.nextElement(); 376 table.newRow(); 377 table.addHeading(name + ": ").cell().attribute("VALIGN", "TOP").right(); 378 table.addCell("<pre>" + toString(getInitParameter(name)) + "</pre>"); 379 } 380 381 table.newRow(); 382 table 383 .newHeading() 384 .cell() 385 .nest(new Font(2, true)) 386 .add("<BR>Context InitParameters") 387 .attribute("COLSPAN", "2") 388 .left(); 389 a= getServletContext().getInitParameterNames(); 390 while (a.hasMoreElements()) 391 { 392 name= (String )a.nextElement(); 393 table.newRow(); 394 table.addHeading(name + ": ").cell().attribute("VALIGN", "TOP").right(); 395 table.addCell("<pre>" + toString(getServletContext().getInitParameter(name)) + "</pre>"); 396 } 397 398 table.newRow(); 399 table 400 .newHeading() 401 .cell() 402 .nest(new Font(2, true)) 403 .add("<BR>Context Attributes") 404 .attribute("COLSPAN", "2") 405 .left(); 406 a= getServletContext().getAttributeNames(); 407 while (a.hasMoreElements()) 408 { 409 name= (String )a.nextElement(); 410 table.newRow(); 411 table.addHeading(name + ": ").cell().attribute("VALIGN", "TOP").right(); 412 table.addCell("<pre>" + toString(getServletContext().getAttribute(name)) + "</pre>"); 413 } 414 415 if (request.getContentType() != null 416 && request.getContentType().startsWith("multipart/form-data") 417 && request.getContentLength() < 1000000) 418 { 419 MultiPartRequest multi= new MultiPartRequest(request); 420 String [] parts= multi.getPartNames(); 421 422 table.newRow(); 423 table 424 .newHeading() 425 .cell() 426 .nest(new Font(2, true)) 427 .add("<BR>Multi-part content") 428 .attribute("COLSPAN", "2") 429 .left(); 430 for (int p= 0; p < parts.length; p++) 431 { 432 name= parts[p]; 433 table.newRow(); 434 table.addHeading(name + ": ").cell().attribute("VALIGN", "TOP").right(); 435 table.addCell("<pre>" + multi.getString(parts[p]) + "</pre>"); 436 } 437 } 438 439 String res= request.getParameter("resource"); 440 if (res != null && res.length() > 0) 441 { 442 table.newRow(); 443 table 444 .newHeading() 445 .cell() 446 .nest(new Font(2, true)) 447 .add("<BR>Get Resource: " + res) 448 .attribute("COLSPAN", "2") 449 .left(); 450 451 table.newRow(); 452 table.addHeading("this.getClass(): ").cell().right(); 453 table.addCell("" + this.getClass().getResource(res)); 454 455 table.newRow(); 456 table.addHeading("this.getClass().getClassLoader(): ").cell().right(); 457 table.addCell("" + this.getClass().getClassLoader().getResource(res)); 458 459 table.newRow(); 460 table.addHeading("Thread.currentThread().getContextClassLoader(): ").cell().right(); 461 table.addCell("" + Thread.currentThread().getContextClassLoader().getResource(res)); 462 463 table.newRow(); 464 table.addHeading("getServletContext(): ").cell().right(); 465 try{table.addCell("" + getServletContext().getResource(res));} 466 catch(Exception e) {table.addCell("" +e);} 467 } 468 469 470 471 page.add(Break.para); 472 page.add(new Heading(1, "Request Wrappers")); 473 ServletRequest rw=request; 474 int w=0; 475 while (rw !=null) 476 { 477 page.add((w++)+": "+rw.getClass().getName()+"<br/>"); 478 if (rw instanceof HttpServletRequestWrapper ) 479 rw=((HttpServletRequestWrapper )rw).getRequest(); 480 else if (rw instanceof ServletRequestWrapper ) 481 rw=((ServletRequestWrapper )rw).getRequest(); 482 else 483 rw=null; 484 } 485 486 page.add(Break.para); 487 page.add(new Heading(1, "International Characters")); 488 page.add("Directly encoced: Dürst<br/>"); 489 page.add("HTML reference: Dürst<br/>"); 490 page.add("Decimal (252) 8859-1: Dürst<br/>"); 491 page.add("Hex (xFC) 8859-1: Dürst<br/>"); 492 page.add( 493 "Javascript unicode (00FC) : <script language='javascript'>document.write(\"D\u00FCrst\");</script><br/>"); 494 page.add(Break.para); 495 page.add(new Heading(1, "Form to generate GET content")); 496 TableForm tf= new TableForm(response.encodeURL(getURI(request))); 497 tf.method("GET"); 498 tf.addTextField("TextField", "TextField", 20, "value"); 499 tf.addButton("Action", "Submit"); 500 page.add(tf); 501 502 page.add(Break.para); 503 page.add(new Heading(1, "Form to generate POST content")); 504 tf= new TableForm(response.encodeURL(getURI(request))); 505 tf.method("POST"); 506 tf.addTextField("TextField", "TextField", 20, "value"); 507 Select select= tf.addSelect("Select", "Select", true, 3); 508 select.add("ValueA"); 509 select.add("ValueB1,ValueB2"); 510 select.add("ValueC"); 511 tf.addButton("Action", "Submit"); 512 page.add(tf); 513 514 page.add(new Heading(1, "Form to upload content")); 515 tf= new TableForm(response.encodeURL(getURI(request))); 516 tf.method("POST"); 517 tf.attribute("enctype", "multipart/form-data"); 518 tf.addFileField("file", "file"); 519 tf.addButton("Upload", "Upload"); 520 page.add(tf); 521 522 page.add(new Heading(1, "Form to get Resource")); 523 tf= new TableForm(response.encodeURL(getURI(request))); 524 tf.method("POST"); 525 tf.addTextField("resource", "resource", 20, ""); 526 tf.addButton("Action", "getResource"); 527 page.add(tf); 528 529 } 530 catch (Exception e) 531 { 532 log.warn(LogSupport.EXCEPTION, e); 533 } 534 535 page.write(pout); 536 537 String data= request.getParameter("data"); 538 if (data != null && data.length() > 0) 539 { 540 int d= Integer.parseInt(data); 541 while (d > 0) 542 { 543 pout.println("1234567890123456789012345678901234567890123456789\n"); 544 d= d - 50; 545 546 } 547 } 548 549 pout.close(); 550 551 if (pi != null) 552 { 553 if ("/ex4".equals(pi)) 554 throw new ServletException ("test ex4", new Throwable ()); 555 if ("/ex5".equals(pi)) 556 throw new IOException ("test ex5"); 557 if ("/ex6".equals(pi)) 558 throw new UnavailableException ("test ex6"); 559 if ("/ex7".equals(pi)) 560 throw new HttpException(501); 561 } 562 563 request.getInputStream().close(); 564 565 } 566 567 568 public String getServletInfo() 569 { 570 return "Dump Servlet"; 571 } 572 573 574 public synchronized void destroy() 575 { 576 log.debug("Destroyed"); 577 } 578 579 580 private String getURI(HttpServletRequest request) 581 { 582 String uri= (String )request.getAttribute("javax.servlet.forward.request_uri"); 583 if (uri == null) 584 uri= request.getRequestURI(); 585 return uri; 586 } 587 588 589 private static String toString(Object o) 590 { 591 if (o == null) 592 return null; 593 594 if (o.getClass().isArray()) 595 { 596 StringBuffer sb= new StringBuffer (); 597 Object [] array= (Object [])o; 598 for (int i= 0; i < array.length; i++) 599 { 600 if (i > 0) 601 sb.append("\n"); 602 sb.append(array.getClass().getComponentType().getName()); 603 sb.append("["); 604 sb.append(i); 605 sb.append("]="); 606 sb.append(toString(array[i])); 607 } 608 return sb.toString(); 609 } 610 else 611 return o.toString(); 612 } 613 614 } 615 | Popular Tags |