Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/lilacsoftware/jettyextra/AdminServlet.java


1   // ===========================================================================
2   // Copyright (c) 1996 Mort Bay Consulting Pty. Ltd. All rights reserved.
3   // $Id: AdminServlet.java,v 1.1.1.1 2001/11/05 17:41:52 tomwadzinski Exp $
4   // ---------------------------------------------------------------------------
5   
6   package com.lilacsoftware.jettyextra;
7   
8   import org.mortbay.http.*;
9   import org.mortbay.html.Break;
10  import org.mortbay.html.Composite;
11  import org.mortbay.html.Heading;
12  import org.mortbay.html.Element;
13  import org.mortbay.html.Block;
14  import org.mortbay.html.Font;
15  import org.mortbay.html.Form;
16  import org.mortbay.html.Input;
17  import org.mortbay.html.Link;
18  import org.mortbay.html.List;
19  import org.mortbay.html.Page;
20  import org.mortbay.html.TableForm;
21  import org.mortbay.html.Target;
22  import org.mortbay.jetty.servlet.ServletHandler;
23  import org.mortbay.util.Code;
24  import org.mortbay.util.Log;
25  import org.mortbay.util.LogSink;
26  import org.mortbay.util.WriterLogSink;
27  import org.mortbay.util.LifeCycle;
28  import org.mortbay.util.UrlEncoded;
29  import java.io.IOException;
30  import java.io.Writer;
31  import java.util.Collection;
32  import java.util.Iterator;
33  import java.util.Map;
34  import java.util.StringTokenizer;
35  import javax.servlet.ServletConfig;
36  import javax.servlet.ServletException;
37  import javax.servlet.http.HttpServlet;
38  import javax.servlet.http.HttpServletRequest;
39  import javax.servlet.http.HttpServletResponse;
40  import javax.servlet.http.HttpSession;
41  
42  
43  /* ------------------------------------------------------------ */
44  /** Jetty Administration Servlet.
45   *
46   * This is a minimal start to a administration servlet that allows
47   * start/stop of server components and control of debug parameters.
48   *
49   * @version $Id: AdminServlet.java,v 1.1.1.1 2001/11/05 17:41:52 tomwadzinski Exp $
50   * @author Greg Wilkins (gregw)
51   */
52  public class AdminServlet extends HttpServlet
53  {
54      private java.util.List _servers;
55      
56      /* ------------------------------------------------------------ */
57      public void init(ServletConfig config)
58           throws ServletException
59      {
60          super.init(config);
61          _servers=HttpServer.getHttpServerList();
62      }
63      
64      /* ------------------------------------------------------------ */
65      private String doAction(HttpServletRequest request,
66                              HttpServletResponse response) 
67          throws ServletException, IOException
68      {
69          String action=request.getParameter("A");
70          if ("exit all servers".equalsIgnoreCase(action))
71          {
72              new Thread(new Runnable()
73                  {
74                      public void run()
75                      {
76                          try{Thread.sleep(1000);}
77                          catch(Exception e){Code.ignore(e);}
78                          Log.event("Stopping All servers");
79                          for (int s=0;s<_servers.size();s++)
80                          {
81                              HttpServer server=(HttpServer)_servers.get(s);
82                              try{server.destroy();}
83                              catch(Exception e){Code.ignore(e);}
84                          }
85                          Log.event("Exiting JVM");
86                          System.exit(1);
87                      }
88                  }).start();
89              
90              throw new HttpException(HttpResponse.__503_Service_Unavailable);
91          }
92          
93          boolean start="start".equalsIgnoreCase(action);
94          String id=request.getParameter("ID");
95  
96          StringTokenizer tok=new StringTokenizer(id,":");
97          int tokens=tok.countTokens();
98          String target=null;
99          
100         try{
101             target=tok.nextToken();
102             HttpServer server=(HttpServer)
103                 _servers.get(Integer.parseInt(target));
104             
105             if (tokens==1)
106             {
107                 // Server stop/start
108                 if (start) server.start();
109                 else server.destroy();
110             }
111             else if (tokens==3)
112             {
113                 // Listener stop/start
114                 String l=tok.nextToken()+":"+tok.nextToken();
115                 Collection listeners=server.getListeners();
116                 Iterator i2 = listeners.iterator();
117                 while(i2.hasNext())
118                 {
119                     HttpListener listener = (HttpListener) i2.next();
120                     if (listener.toString().indexOf(l)>=0)
121                     {
122                         if (start) listener.start();
123                         else listener.destroy();
124                     }
125                 }
126             }
127             else
128             {
129                 String host=tok.nextToken();
130                 if ("null".equals(host))
131                     host=null;
132                 
133                 String contextPath=tok.nextToken();
134                 target+=":"+host+":"+contextPath;
135                 if (contextPath.length()>1)
136                     contextPath+="/*";
137                 int contextIndex=Integer.parseInt(tok.nextToken());
138                 target+=":"+contextIndex;
139                 HandlerContext
140                     context=server.getContext(host,contextPath,contextIndex);
141                 
142                 if (tokens==4)
143                 {
144                     // Context stop/start
145                     if (start) context.start();
146                     else context.stop();
147                 }
148                 else if (tokens==5)
149                 {
150                     // Handler stop/start
151                     int handlerIndex=Integer.parseInt(tok.nextToken());
152                     HttpHandler handler=context.getHandler(handlerIndex);
153                     
154                     if (start) handler.start();
155                     else handler.stop();
156                 }
157             }
158         }
159         catch(Exception e)
160         {
161             Code.warning(e);
162         }
163         catch(Error e)
164         {
165             Code.warning(e);
166         }
167         
168         return target;
169     }
170     
171     /* ------------------------------------------------------------ */
172     public void doGet(HttpServletRequest request,
173                       HttpServletResponse response) 
174         throws ServletException, IOException
175     {
176         if (request.getQueryString()!=null &&
177             request.getQueryString().length()>0)
178         {
179             String target=doAction(request,response);
180             response.sendRedirect(request.getContextPath()+
181                                   request.getServletPath()+
182                                   (request.getPathInfo()!=null
183                                    ?request.getPathInfo():"")+
184                                   (target!=null?("#"+target):""));
185             return;
186         }
187         
188         Page page= new Page();
189         page.title(getServletInfo());
190         page.addHeader("");
191         page.attribute("text","#000000");
192         page.attribute(Page.BGCOLOR,"#FFFFFF");
193         page.attribute("link","#606CC0");
194         page.attribute("vlink","#606CC0");
195         page.attribute("alink","#606CC0");
196 
197         page.add(new Block(Block.Bold).add(new Font(3,true).add(getServletInfo())));
198         page.add(Break.rule);
199         Form form=new Form(request.getContextPath()+
200                            request.getServletPath()+
201                            "?A=exit");
202         form.method("GET");
203         form.add(new Input(Input.Submit,"A","Exit All Servers"));
204         page.add(form);
205         page.add(Break.rule);
206         page.add(new Heading(3,"Components:"));
207 
208         List sList=new List(List.Ordered);
209         page.add(sList);
210         String id1;
211         
212         for(int i1=0;i1<_servers.size();i1++)
213         {
214             id1=""+i1;
215             HttpServer server=(HttpServer)_servers.get(i1);
216             Composite sItem = sList.newItem();
217             sItem.add("<B>HttpServer&nbsp;");
218             sItem.add(lifeCycle(request,id1,server));
219             sItem.add("</B>");
220             sItem.add(Break.line);
221             sItem.add("<B>Listeners:</B>");
222             List lList=new List(List.Unordered);
223             sItem.add(lList);
224 
225             Collection listeners=server.getListeners();
226             Iterator i2 = listeners.iterator();
227             while(i2.hasNext())
228             {
229                 HttpListener listener = (HttpListener) i2.next();
230                 String id2=id1+":"+listener;
231                 lList.add(lifeCycle(request,id2,listener));
232             }
233 
234             Map hostMap = server.getHostMap();
235             
236             sItem.add("<B>Contexts:</B>");
237             List hcList=new List(List.Unordered);
238             sItem.add(hcList);
239             i2=hostMap.entrySet().iterator();
240             while(i2.hasNext())
241             {
242                 Map.Entry hEntry=(Map.Entry)(i2.next());
243                 String host=(String)hEntry.getKey();
244 
245                 PathMap contexts=(PathMap)hEntry.getValue();
246                 Iterator i3=contexts.entrySet().iterator();
247                 while(i3.hasNext())
248                 {
249                     Map.Entry cEntry=(Map.Entry)(i3.next());
250                     String contextPath=(String)cEntry.getKey();
251                     java.util.List contextList=(java.util.List)cEntry.getValue();
252                     
253                     Composite hcItem = hcList.newItem();
254                     if (host!=null)
255                         hcItem.add("Host="+host+":");
256                     hcItem.add("ContextPath="+contextPath);
257                     
258                     String id3=id1+":"+host+":"+
259                         (contextPath.length()>2
260                          ?contextPath.substring(0,contextPath.length()-2)
261                          :contextPath);
262                     
263                     List cList=new List(List.Ordered);
264                     hcItem.add(cList);
265                     for (int i4=0;i4<contextList.size();i4++)
266                     {
267                         String id4=id3+":"+i4;
268                         Composite cItem = cList.newItem();
269                         HandlerContext hc=
270                             (HandlerContext)contextList.get(i4);
271                         cItem.add(lifeCycle(request,id4,hc));
272                         cItem.add("<BR>ResourceBase="+hc.getResourceBase());
273                         cItem.add("<BR>ClassPath="+hc.getClassPath());
274 
275                     
276                         List hList=new List(List.Ordered);
277                         cItem.add(hList);
278                         for(int i5=0;i5<hc.getHandlerSize();i5++)
279                         {
280                             String id5=id4+":"+i5;
281                             HttpHandler handler = hc.getHandler(i5);
282                             Composite hItem=hList.newItem();
283                             hItem.add(lifeCycle(request,
284                                                 id5,
285                                                 handler,
286                                                 handler.getName()));
287                             if (handler instanceof ServletHandler)
288                             {
289                                 hItem.add("<BR>"+
290                                           ((ServletHandler)handler)
291                                           .getServletMap());
292                             }
293                         }
294                     }
295                 }
296             }
297             sItem.add("<P>");
298         }
299 
300 
301         response.setContentType("text/html");
302         response.setHeader("Pragma", "no-cache");
303         response.setHeader("Cache-Control", "no-cache,no-store");
304         Writer writer=response.getWriter();
305         page.write(writer);
306         writer.flush();
307     }
308 
309     /* ------------------------------------------------------------ */
310     public void doPost(HttpServletRequest request,
311                         HttpServletResponse response) 
312         throws ServletException, IOException
313     {
314         String target=null;
315         response.sendRedirect(request.getContextPath()+
316                               request.getServletPath()+"/"+
317                               Long.toString(System.currentTimeMillis(),36)+
318                               (target!=null?("#"+target):""));
319     }
320     
321     /* ------------------------------------------------------------ */
322     private Element lifeCycle(HttpServletRequest request,
323                               String id,
324                               LifeCycle lc)
325     {
326         return lifeCycle(request,id,lc,lc.toString());
327     }
328     
329     /* ------------------------------------------------------------ */
330     private Element lifeCycle(HttpServletRequest request,
331                               String id,
332                               LifeCycle lc,
333                               String name)
334     {
335         Composite comp=new Composite();
336         comp.add(new Target(id));
337         Font font = new Font();
338         comp.add(font);
339         font.color(lc.isStarted()?"green":"red");
340         font.add(name);
341 
342         String action=lc.isStarted()?"Stop":"Start";
343         
344         comp.add("&nbsp;[");
345         comp.add(new Link(request.getContextPath()+
346                           request.getServletPath()+"/"+
347                           Long.toString(System.currentTimeMillis(),36)+
348                           "?A="+action+"&ID="+UrlEncoded.encodeString(id),
349                           action));
350         comp.add("]");
351         return comp;
352     }
353     
354     
355     /* ------------------------------------------------------------ */
356     public String getServletInfo()
357     {
358         return "HTTP Admin";
359     }
360 }
361 
362 
363 
364 
365 
366 
367 
368 
369 
370