Mercurial Hosting > luan
changeset 833:83765eb09bef
remove ContextHandlerCollection
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 16 Sep 2016 00:41:20 -0600 |
parents | 2afcb04f56a4 |
children | 175577dab6d8 |
files | src/org/eclipse/jetty/server/handler/ContextHandler.java src/org/eclipse/jetty/server/handler/ContextHandlerCollection.java |
diffstat | 2 files changed, 0 insertions(+), 339 deletions(-) [+] |
line wrap: on
line diff
diff -r 2afcb04f56a4 -r 83765eb09bef src/org/eclipse/jetty/server/handler/ContextHandler.java --- a/src/org/eclipse/jetty/server/handler/ContextHandler.java Fri Sep 16 00:35:35 2016 -0600 +++ b/src/org/eclipse/jetty/server/handler/ContextHandler.java Fri Sep 16 00:41:20 2016 -0600 @@ -1282,13 +1282,6 @@ if (contextPath != null && contextPath.length() > 1 && contextPath.endsWith("/")) throw new IllegalArgumentException("ends with /"); _contextPath = contextPath; - - if (getServer() != null && (getServer().isStarting() || getServer().isStarted())) - { - Handler[] contextCollections = getServer().getChildHandlersByClass(ContextHandlerCollection.class); - for (int h = 0; contextCollections != null && h < contextCollections.length; h++) - ((ContextHandlerCollection)contextCollections[h]).mapContexts(); - } } /* ------------------------------------------------------------ */
diff -r 2afcb04f56a4 -r 83765eb09bef src/org/eclipse/jetty/server/handler/ContextHandlerCollection.java --- a/src/org/eclipse/jetty/server/handler/ContextHandlerCollection.java Fri Sep 16 00:35:35 2016 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,332 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.server.handler; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.eclipse.jetty.http.PathMap; -import org.eclipse.jetty.server.AsyncContinuation; -import org.eclipse.jetty.server.Handler; -import org.eclipse.jetty.server.HandlerContainer; -import org.eclipse.jetty.server.Request; -import org.eclipse.jetty.util.LazyList; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/* ------------------------------------------------------------ */ -/** ContextHandlerCollection. - * - * This {@link org.eclipse.jetty.server.handler.HandlerCollection} is creates a - * {@link org.eclipse.jetty.http.PathMap} to it's contained handlers based - * on the context path and virtual hosts of any contained {@link org.eclipse.jetty.server.handler.ContextHandler}s. - * The contexts do not need to be directly contained, only children of the contained handlers. - * Multiple contexts may have the same context path and they are called in order until one - * handles the request. - * - * @org.apache.xbean.XBean element="contexts" - */ -public class ContextHandlerCollection extends HandlerCollection -{ - private static final Logger LOG = LoggerFactory.getLogger(ContextHandlerCollection.class); - - private volatile PathMap _contextMap; - private Class<? extends ContextHandler> _contextClass = ContextHandler.class; - - /* ------------------------------------------------------------ */ - public ContextHandlerCollection() - { - super(true); - } - - - /* ------------------------------------------------------------ */ - /** - * Remap the context paths. - */ - public void mapContexts() - { - PathMap contextMap = new PathMap(); - Handler[] branches = getHandlers(); - - - for (int b=0;branches!=null && b<branches.length;b++) - { - Handler[] handlers=null; - - if (branches[b] instanceof ContextHandler) - { - handlers = new Handler[]{ branches[b] }; - } - else if (branches[b] instanceof HandlerContainer) - { - handlers = ((HandlerContainer)branches[b]).getChildHandlersByClass(ContextHandler.class); - } - else - continue; - - for (int i=0;i<handlers.length;i++) - { - ContextHandler handler=(ContextHandler)handlers[i]; - - String contextPath=handler.getContextPath(); - - if (contextPath==null || contextPath.indexOf(',')>=0 || contextPath.startsWith("*")) - throw new IllegalArgumentException ("Illegal context spec:"+contextPath); - - if(!contextPath.startsWith("/")) - contextPath='/'+contextPath; - - if (contextPath.length()>1) - { - if (contextPath.endsWith("/")) - contextPath+="*"; - else if (!contextPath.endsWith("/*")) - contextPath+="/*"; - } - - Object contexts=contextMap.get(contextPath); - String[] vhosts=handler.getVirtualHosts(); - - - if (vhosts!=null && vhosts.length>0) - { - Map hosts; - - if (contexts instanceof Map) - hosts=(Map)contexts; - else - { - hosts=new HashMap(); - hosts.put("*",contexts); - contextMap.put(contextPath, hosts); - } - - for (int j=0;j<vhosts.length;j++) - { - String vhost=vhosts[j]; - contexts=hosts.get(vhost); - contexts=LazyList.add(contexts,branches[b]); - hosts.put(vhost,contexts); - } - } - else if (contexts instanceof Map) - { - Map hosts=(Map)contexts; - contexts=hosts.get("*"); - contexts= LazyList.add(contexts, branches[b]); - hosts.put("*",contexts); - } - else - { - contexts= LazyList.add(contexts, branches[b]); - contextMap.put(contextPath, contexts); - } - } - } - _contextMap=contextMap; - - } - - - - /* ------------------------------------------------------------ */ - /* - * @see org.eclipse.jetty.server.server.handler.HandlerCollection#setHandlers(org.eclipse.jetty.server.server.Handler[]) - */ - @Override - public void setHandlers(Handler[] handlers) - { - _contextMap=null; - super.setHandlers(handlers); - if (isStarted()) - mapContexts(); - } - - /* ------------------------------------------------------------ */ - @Override - protected void doStart() throws Exception - { - mapContexts(); - super.doStart(); - } - - - /* ------------------------------------------------------------ */ - /* - * @see org.eclipse.jetty.server.server.Handler#handle(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, int) - */ - @Override - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException - { - Handler[] handlers = getHandlers(); - if (handlers==null || handlers.length==0) - return; - - AsyncContinuation async = baseRequest.getAsyncContinuation(); - if (async.isAsync()) - { - ContextHandler context=async.getContextHandler(); - if (context!=null) - { - context.handle(target,baseRequest,request, response); - return; - } - } - - // data structure which maps a request to a context; first-best match wins - // { context path => - // { virtual host => context } - // } - PathMap map = _contextMap; - if (map!=null && target!=null && target.startsWith("/")) - { - // first, get all contexts matched by context path - Object contexts = map.getLazyMatches(target); - - for (int i=0; i<LazyList.size(contexts); i++) - { - // then, match against the virtualhost of each context - Map.Entry entry = (Map.Entry)LazyList.get(contexts, i); - Object list = entry.getValue(); - - if (list instanceof Map) - { - Map hosts = (Map)list; - String host = normalizeHostname(request.getServerName()); - - // explicitly-defined virtual hosts, most specific - list=hosts.get(host); - for (int j=0; j<LazyList.size(list); j++) - { - Handler handler = (Handler)LazyList.get(list,j); - handler.handle(target,baseRequest, request, response); - if (baseRequest.isHandled()) - return; - } - - // wildcard for one level of names - list=hosts.get("*."+host.substring(host.indexOf(".")+1)); - for (int j=0; j<LazyList.size(list); j++) - { - Handler handler = (Handler)LazyList.get(list,j); - handler.handle(target,baseRequest, request, response); - if (baseRequest.isHandled()) - return; - } - - // no virtualhosts defined for the context, least specific - // will handle any request that does not match to a specific virtual host above - list=hosts.get("*"); - for (int j=0; j<LazyList.size(list); j++) - { - Handler handler = (Handler)LazyList.get(list,j); - handler.handle(target,baseRequest, request, response); - if (baseRequest.isHandled()) - return; - } - } - else - { - for (int j=0; j<LazyList.size(list); j++) - { - Handler handler = (Handler)LazyList.get(list,j); - handler.handle(target,baseRequest, request, response); - if (baseRequest.isHandled()) - return; - } - } - } - } - else - { - // This may not work in all circumstances... but then I think it should never be called - for (int i=0;i<handlers.length;i++) - { - handlers[i].handle(target,baseRequest, request, response); - if ( baseRequest.isHandled()) - return; - } - } - } - - - /* ------------------------------------------------------------ */ - /** Add a context handler. - * @param contextPath The context path to add - * @return the ContextHandler just added - */ - public ContextHandler addContext(String contextPath,String resourceBase) - { - try - { - ContextHandler context = _contextClass.newInstance(); - context.setContextPath(contextPath); - context.setResourceBase(resourceBase); - addHandler(context); - return context; - } - catch (Exception e) - { - LOG.debug("",e); - throw new Error(e); - } - } - - - - /* ------------------------------------------------------------ */ - /** - * @return The class to use to add new Contexts - */ - public Class getContextClass() - { - return _contextClass; - } - - - /* ------------------------------------------------------------ */ - /** - * @param contextClass The class to use to add new Contexts - */ - public void setContextClass(Class contextClass) - { - if (contextClass ==null || !(ContextHandler.class.isAssignableFrom(contextClass))) - throw new IllegalArgumentException(); - _contextClass = contextClass; - } - - /* ------------------------------------------------------------ */ - private String normalizeHostname( String host ) - { - if ( host == null ) - return null; - - if ( host.endsWith( "." ) ) - return host.substring( 0, host.length() -1); - - return host; - } - -}