KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mortbay > servlet > Dump


1 // ========================================================================
2
// $Id: Dump.java,v 1.42 2005/12/21 23:14:38 gregwilkins Exp $
3
// Copyright 1996-2004 Mort Bay Consulting Pty. Ltd.
4
// ------------------------------------------------------------------------
5
// Licensed under the Apache License, Version 2.0 (the "License");
6
// you may not use this file except in compliance with the License.
7
// You may obtain a copy of the License at
8
// http://www.apache.org/licenses/LICENSE-2.0
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
// ========================================================================
15

16 package org.mortbay.servlet;
17 import java.io.IOException JavaDoc;
18 import java.io.OutputStream JavaDoc;
19 import java.io.PrintWriter JavaDoc;
20 import java.lang.reflect.Field JavaDoc;
21 import java.util.Enumeration JavaDoc;
22 import java.util.Locale JavaDoc;
23
24 import javax.servlet.ServletConfig JavaDoc;
25 import javax.servlet.ServletException JavaDoc;
26 import javax.servlet.ServletRequest JavaDoc;
27 import javax.servlet.ServletRequestWrapper JavaDoc;
28 import javax.servlet.UnavailableException JavaDoc;
29 import javax.servlet.http.Cookie JavaDoc;
30 import javax.servlet.http.HttpServlet JavaDoc;
31 import javax.servlet.http.HttpServletRequest JavaDoc;
32 import javax.servlet.http.HttpServletRequestWrapper JavaDoc;
33 import javax.servlet.http.HttpServletResponse JavaDoc;
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 /** Dump Servlet Request.
50  *
51  */

52 public class Dump extends HttpServlet JavaDoc
53 {
54     private static Log log= LogFactory.getLog(Dump.class);
55
56     /* ------------------------------------------------------------ */
57     String JavaDoc pageType;
58
59     /* ------------------------------------------------------------ */
60     public void init(ServletConfig JavaDoc config) throws ServletException JavaDoc
61     {
62         super.init(config);
63     }
64
65     /* ------------------------------------------------------------ */
66     public void doPost(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws ServletException JavaDoc, IOException JavaDoc
67     {
68         doGet(request, response);
69     }
70
71     /* ------------------------------------------------------------ */
72     public void doGet(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws ServletException JavaDoc, IOException JavaDoc
73     {
74         request.setAttribute("Dump", this);
75         request.setCharacterEncoding("ISO_8859_1");
76         getServletContext().setAttribute("Dump",this);
77         
78         String JavaDoc info= request.getPathInfo();
79         if (info != null && info.endsWith("Exception"))
80         {
81             try
82             {
83                 throw (Throwable JavaDoc) (Loader.loadClass(this.getClass(), info.substring(1)).newInstance());
84             }
85             catch (Throwable JavaDoc th)
86             {
87                 throw new ServletException JavaDoc(th);
88             }
89         }
90
91         String JavaDoc 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 JavaDoc 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 JavaDoc length= request.getParameter("length");
110         if (length != null && length.length() > 0)
111         {
112             response.setContentLength(Integer.parseInt(length));
113         }
114
115         String JavaDoc 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 JavaDoc locale_name= info.substring(info.indexOf("Locale/") + 7);
127                 Field JavaDoc f= java.util.Locale JavaDoc.class.getField(locale_name);
128                 response.setLocale((Locale JavaDoc)f.get(null));
129             }
130             catch (Exception JavaDoc e)
131             {
132                 LogSupport.ignore(log, e);
133                 response.setLocale(Locale.getDefault());
134             }
135         }
136
137         String JavaDoc cn= request.getParameter("cookie");
138         String JavaDoc cv=request.getParameter("value");
139         String JavaDoc v=request.getParameter("version");
140         if (cn!=null && cv!=null)
141         {
142             Cookie JavaDoc cookie= new Cookie JavaDoc(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 JavaDoc pi= request.getPathInfo();
154         if (pi != null && pi.startsWith("/ex"))
155         {
156             OutputStream JavaDoc out= response.getOutputStream();
157             out.write("</H1>This text should be reset</H1>".getBytes());
158             if ("/ex0".equals(pi))
159                 throw new ServletException JavaDoc("test ex0", new Throwable JavaDoc());
160             if ("/ex1".equals(pi))
161                 throw new IOException JavaDoc("test ex1");
162             if ("/ex2".equals(pi))
163                 throw new UnavailableException JavaDoc("test ex2");
164             if ("/ex3".equals(pi))
165                 throw new HttpException(501);
166         }
167
168         PrintWriter JavaDoc 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:&nbsp;").cell().right();
181             table.addCell("" + request.getMethod());
182             table.newRow();
183             table.addHeading("getContentLength:&nbsp;").cell().right();
184             table.addCell(Integer.toString(request.getContentLength()));
185             table.newRow();
186             table.addHeading("getContentType:&nbsp;").cell().right();
187             table.addCell("" + request.getContentType());
188             table.newRow();
189             table.addHeading("getCharacterEncoding:&nbsp;").cell().right();
190             table.addCell("" + request.getCharacterEncoding());
191             table.newRow();
192             table.addHeading("getRequestURI:&nbsp;").cell().right();
193             table.addCell("" + request.getRequestURI());
194             table.newRow();
195             table.addHeading("getRequestURL:&nbsp;").cell().right();
196             table.addCell("" + request.getRequestURL());
197             table.newRow();
198             table.addHeading("getContextPath:&nbsp;").cell().right();
199             table.addCell("" + request.getContextPath());
200             table.newRow();
201             table.addHeading("getServletPath:&nbsp;").cell().right();
202             table.addCell("" + request.getServletPath());
203             table.newRow();
204             table.addHeading("getPathInfo:&nbsp;").cell().right();
205             table.addCell("" + request.getPathInfo());
206             table.newRow();
207             table.addHeading("getPathTranslated:&nbsp;").cell().right();
208             table.addCell("" + request.getPathTranslated());
209             table.newRow();
210             table.addHeading("getQueryString:&nbsp;").cell().right();
211             table.addCell("" + request.getQueryString());
212
213             table.newRow();
214             table.addHeading("getProtocol:&nbsp;").cell().right();
215             table.addCell("" + request.getProtocol());
216             table.newRow();
217             table.addHeading("getScheme:&nbsp;").cell().right();
218             table.addCell("" + request.getScheme());
219             table.newRow();
220             table.addHeading("getServerName:&nbsp;").cell().right();
221             table.addCell("" + request.getServerName());
222             table.newRow();
223             table.addHeading("getServerPort:&nbsp;").cell().right();
224             table.addCell("" + Integer.toString(request.getServerPort()));
225             table.newRow();
226             table.addHeading("getLocalName:&nbsp;").cell().right();
227             table.addCell("" + request.getLocalName());
228             table.newRow();
229             table.addHeading("getLocalAddr:&nbsp;").cell().right();
230             table.addCell("" + request.getLocalAddr());
231             table.newRow();
232             table.addHeading("getLocalPort:&nbsp;").cell().right();
233             table.addCell("" + Integer.toString(request.getLocalPort()));
234             table.newRow();
235             table.addHeading("getRemoteUser:&nbsp;").cell().right();
236             table.addCell("" + request.getRemoteUser());
237             table.newRow();
238             table.addHeading("getRemoteAddr:&nbsp;").cell().right();
239             table.addCell("" + request.getRemoteAddr());
240             table.newRow();
241             table.addHeading("getRemoteHost:&nbsp;").cell().right();
242             table.addCell("" + request.getRemoteHost());
243             table.newRow();
244             table.addHeading("getRemotePort:&nbsp;").cell().right();
245             table.addCell("" + request.getRemotePort());
246             table.newRow();
247             table.addHeading("getRequestedSessionId:&nbsp;").cell().right();
248             table.addCell("" + request.getRequestedSessionId());
249             table.newRow();
250             table.addHeading("isSecure():&nbsp;").cell().right();
251             table.addCell("" + request.isSecure());
252
253             table.newRow();
254             table.addHeading("isUserInRole(admin):&nbsp;").cell().right();
255             table.addCell("" + request.isUserInRole("admin"));
256
257             table.newRow();
258             table.addHeading("getLocale:&nbsp;").cell().right();
259             table.addCell("" + request.getLocale());
260
261             Enumeration JavaDoc locales= request.getLocales();
262             while (locales.hasMoreElements())
263             {
264                 table.newRow();
265                 table.addHeading("getLocales:&nbsp;").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 JavaDoc h= request.getHeaderNames();
278             String JavaDoc name;
279             while (h.hasMoreElements())
280             {
281                 name= (String JavaDoc)h.nextElement();
282
283                 Enumeration JavaDoc h2= request.getHeaders(name);
284                 while (h2.hasMoreElements())
285                 {
286                     String JavaDoc hv= (String JavaDoc)h2.nextElement();
287                     table.newRow();
288                     table.addHeading(name + ":&nbsp;").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 JavaDoc)h.nextElement();
305                 table.newRow();
306                 table.addHeading(name + ":&nbsp;").cell().right();
307                 table.addCell(request.getParameter(name));
308                 String JavaDoc[] values= request.getParameterValues(name);
309                 if (values == null)
310                 {
311                     table.newRow();
312                     table.addHeading(name + " Values:&nbsp;").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 + "]:&nbsp;").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 JavaDoc[] cookies = request.getCookies();
336             for (int i=0; cookies!=null && i<cookies.length;i++)
337             {
338                 Cookie JavaDoc cookie = cookies[i];
339
340                 table.newRow();
341                 table.addHeading(cookie.getName() + ":&nbsp;").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 JavaDoc a= request.getAttributeNames();
355             while (a.hasMoreElements())
356             {
357                 name= (String JavaDoc)a.nextElement();
358                 table.newRow();
359                 table.addHeading(name + ":&nbsp;").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 JavaDoc)a.nextElement();
376                 table.newRow();
377                 table.addHeading(name + ":&nbsp;").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 JavaDoc)a.nextElement();
393                 table.newRow();
394                 table.addHeading(name + ":&nbsp;").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 JavaDoc)a.nextElement();
410                 table.newRow();
411                 table.addHeading(name + ":&nbsp;").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 JavaDoc[] 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 + ":&nbsp;").cell().attribute("VALIGN", "TOP").right();
435                     table.addCell("<pre>" + multi.getString(parts[p]) + "</pre>");
436                 }
437             }
438
439             String JavaDoc 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():&nbsp;").cell().right();
453                 table.addCell("" + this.getClass().getResource(res));
454
455                 table.newRow();
456                 table.addHeading("this.getClass().getClassLoader():&nbsp;").cell().right();
457                 table.addCell("" + this.getClass().getClassLoader().getResource(res));
458
459                 table.newRow();
460                 table.addHeading("Thread.currentThread().getContextClassLoader():&nbsp;").cell().right();
461                 table.addCell("" + Thread.currentThread().getContextClassLoader().getResource(res));
462
463                 table.newRow();
464                 table.addHeading("getServletContext():&nbsp;").cell().right();
465                 try{table.addCell("" + getServletContext().getResource(res));}
466                 catch(Exception JavaDoc e) {table.addCell("" +e);}
467             }
468             
469
470             /* ------------------------------------------------------------ */
471             page.add(Break.para);
472             page.add(new Heading(1, "Request Wrappers"));
473             ServletRequest JavaDoc rw=request;
474             int w=0;
475             while (rw !=null)
476             {
477                 page.add((w++)+": "+rw.getClass().getName()+"<br/>");
478                 if (rw instanceof HttpServletRequestWrapper JavaDoc)
479                     rw=((HttpServletRequestWrapper JavaDoc)rw).getRequest();
480                 else if (rw instanceof ServletRequestWrapper JavaDoc)
481                     rw=((ServletRequestWrapper JavaDoc)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&uuml;rst<br/>");
490             page.add("Decimal (252) 8859-1: D&#252;rst<br/>");
491             page.add("Hex (xFC) 8859-1: D&#xFC;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 JavaDoc e)
531         {
532             log.warn(LogSupport.EXCEPTION, e);
533         }
534
535         page.write(pout);
536
537         String JavaDoc 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 JavaDoc("test ex4", new Throwable JavaDoc());
555             if ("/ex5".equals(pi))
556                 throw new IOException JavaDoc("test ex5");
557             if ("/ex6".equals(pi))
558                 throw new UnavailableException JavaDoc("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 JavaDoc 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 JavaDoc getURI(HttpServletRequest JavaDoc request)
581     {
582         String JavaDoc uri= (String JavaDoc)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 JavaDoc toString(Object JavaDoc o)
590     {
591         if (o == null)
592             return null;
593
594         if (o.getClass().isArray())
595         {
596             StringBuffer JavaDoc sb= new StringBuffer JavaDoc();
597             Object JavaDoc[] array= (Object JavaDoc[])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