1 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 ; 22 import javax.servlet.Servlet ; 23 import java.util.EventListener ; 24 import java.io.IOException ; 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 servletClass, String pathMapping) { 49 PicoServletHandler handler = getServletHandler(); 50 return (PicoServletHolder) handler.addServletWithMapping(servletClass, pathMapping); 51 } 52 53 public Servlet addServletWithMapping(Servlet servlet, String 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 filterClass, String pathMapping, int dispatchers) { 77 PicoServletHandler handler = getServletHandler(); 78 return (PicoFilterHolder) handler.addFilterWithMapping(filterClass, pathMapping, dispatchers); 79 } 80 81 public Filter addFilterWithMapping(Filter filter, String pathMapping, int dispatchers) { 82 PicoServletHandler servletHandler = getServletHandler(); 83 servletHandler.addFilterWithMapping(new FilterHolder(filter), pathMapping, dispatchers); 84 return filter; 85 } 86 87 88 public EventListener addListener(Class listenerClass) { 89 90 DefaultPicoContainer child = new DefaultPicoContainer(parentContainer); 91 child.registerComponentImplementation(EventListener .class, listenerClass); 92 EventListener instance = (EventListener ) child.getComponentInstance(EventListener .class); 93 94 return addListener(instance); 95 96 } 97 98 public EventListener addListener(EventListener listener) { 99 context.addEventListener(listener); 100 return listener; 101 } 102 103 104 public void setStaticContext(String absolutePath) { 105 ResourceHandler resourceHandler = new ResourceHandler(); 106 resourceHandler.setResourceBase(absolutePath); 107 context.addHandler(resourceHandler); 108 } 109 110 public void setStaticContext(String absolutePath, String welcomePage) { 111 ResourceHandler resourceHandler = new ResourceHandler(); 112 resourceHandler.setResourceBase(absolutePath); 113 resourceHandler.setWelcomeFiles(new String []{welcomePage}); 114 context.addHandler(resourceHandler); 115 } 116 117 public void setDefaultHandling(final String absolutePath, String scratchDir, String 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 150 } 151 | Popular Tags |