KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nanocontainer > webcontainer > PicoContextHandler


1 /*****************************************************************************
2  * Copyright (C) NanoContainer Organization. All rights reserved. *
3  * ------------------------------------------------------------------------- *
4  * The software in this package is published under the terms of the BSD *
5  * style license a copy of which has been included with this distribution in *
6  * the LICENSE.txt file. *
7  * *
8  *****************************************************************************/

9
10 package org.nanocontainer.webcontainer;
11
12 import org.mortbay.jetty.Server;
13 import org.mortbay.jetty.Handler;
14 import org.mortbay.jetty.handler.ContextHandler;
15 import org.mortbay.jetty.handler.ResourceHandler;
16 import org.mortbay.jetty.handler.ErrorHandler;
17 import org.mortbay.jetty.servlet.*;
18 import org.picocontainer.PicoContainer;
19 import org.picocontainer.defaults.DefaultPicoContainer;
20
21 import javax.servlet.Filter JavaDoc;
22 import javax.servlet.Servlet JavaDoc;
23 import java.util.EventListener JavaDoc;
24 import java.io.IOException JavaDoc;
25
26 public class PicoContextHandler {
27
28     private final ContextHandler context;
29     private final Server server;
30     private final PicoContainer parentContainer;
31     private final boolean withSessionHandler;
32     private PicoServletHandler servletHandler;
33
34     public static final int DEFAULT = 0;
35     public static final int REQUEST = 1;
36     public static final int FORWARD = 2;
37     public static final int INCLUDE = 4;
38     public static final int ERROR = 8;
39     public static final int ALL = 15;
40
41     public PicoContextHandler(ContextHandler context, Server server, PicoContainer parentContainer, boolean sessionManager) {
42         this.context = context;
43         this.server = server;
44         this.parentContainer = parentContainer;
45         this.withSessionHandler = sessionManager;
46     }
47
48     public PicoServletHolder addServletWithMapping(Class JavaDoc servletClass, String JavaDoc pathMapping) {
49         PicoServletHandler handler = getServletHandler();
50         return (PicoServletHolder) handler.addServletWithMapping(servletClass, pathMapping);
51     }
52
53     public Servlet JavaDoc addServletWithMapping(Servlet JavaDoc servlet, String JavaDoc pathMapping) {
54         PicoServletHandler handler = getServletHandler();
55         handler.addServletWithMapping(new ServletHolder(servlet), pathMapping);
56         return servlet;
57     }
58
59
60     private synchronized PicoServletHandler getServletHandler() {
61         if (servletHandler == null) {
62             servletHandler = new PicoServletHandler(parentContainer);
63             servletHandler.setServer(server);
64             if (withSessionHandler) {
65                 SessionHandler sessionHandler = new SessionHandler();
66                 sessionHandler.setServer(server);
67                 context.addHandler(sessionHandler);
68                 sessionHandler.addHandler(servletHandler);
69             } else {
70                 context.addHandler(servletHandler);
71             }
72         }
73         return servletHandler;
74     }
75
76     public PicoFilterHolder addFilterWithMapping(Class JavaDoc filterClass, String JavaDoc pathMapping, int dispatchers) {
77         PicoServletHandler handler = getServletHandler();
78         return (PicoFilterHolder) handler.addFilterWithMapping(filterClass, pathMapping, dispatchers);
79     }
80
81     public Filter JavaDoc addFilterWithMapping(Filter JavaDoc filter, String JavaDoc pathMapping, int dispatchers) {
82         PicoServletHandler servletHandler = getServletHandler();
83         servletHandler.addFilterWithMapping(new FilterHolder(filter), pathMapping, dispatchers);
84         return filter;
85     }
86
87
88     public EventListener JavaDoc addListener(Class JavaDoc listenerClass) {
89
90         DefaultPicoContainer child = new DefaultPicoContainer(parentContainer);
91         child.registerComponentImplementation(EventListener JavaDoc.class, listenerClass);
92         EventListener JavaDoc instance = (EventListener JavaDoc) child.getComponentInstance(EventListener JavaDoc.class);
93
94         return addListener(instance);
95
96     }
97
98     public EventListener JavaDoc addListener(EventListener JavaDoc listener) {
99         context.addEventListener(listener);
100         return listener;
101     }
102
103
104     public void setStaticContext(String JavaDoc absolutePath) {
105         ResourceHandler resourceHandler = new ResourceHandler();
106         resourceHandler.setResourceBase(absolutePath);
107         context.addHandler(resourceHandler);
108     }
109
110     public void setStaticContext(String JavaDoc absolutePath, String JavaDoc welcomePage) {
111         ResourceHandler resourceHandler = new ResourceHandler();
112         resourceHandler.setResourceBase(absolutePath);
113         resourceHandler.setWelcomeFiles(new String JavaDoc[]{welcomePage});
114         context.addHandler(resourceHandler);
115     }
116
117     public void setDefaultHandling(final String JavaDoc absolutePath, String JavaDoc scratchDir, String JavaDoc pageSuffix) {
118         context.setResourceBase(absolutePath);
119         PicoServletHandler handler = getServletHandler();
120         ServletHolder jspHolder = new PicoServletHolder(parentContainer);
121         jspHolder.setName("jsp");
122         jspHolder.setClassName("org.apache.jasper.servlet.JspServlet");
123         jspHolder.setInitParameter("scratchdir", scratchDir);
124         jspHolder.setInitParameter("logVerbosityLevel", "DEBUG");
125         jspHolder.setInitParameter("fork", "false");
126         jspHolder.setInitParameter("xpoweredBy", "false");
127         jspHolder.setForcedPath(null);
128         jspHolder.setInitOrder(0);
129
130
131         handler.addServletWithMapping(jspHolder, pageSuffix);
132         handler.addServletWithMapping(DefaultServlet.class.getName(), "/");
133
134     }
135
136     public void addErrorHandler() {
137         addErrorHandler(new ErrorPageErrorHandler());
138     }
139
140     public void addErrorHandler(ErrorHandler handler) {
141         context.setErrorHandler(handler);
142     }
143
144     // protected void handleErrorPage(HttpServletRequest request, Writer writer, int code, String message)
145
// throws IOException
146
// {
147
// writeErrorPage(request, writer, code, message, _showStacks);
148
// }
149

150 }
151
Popular Tags