/** Returns a dispatcher for the named servlet. */ public RequestDispatcher getRequestDispatcher(String url) { // Currently no caching since this is only used for the error-page directive at the host level if (url == null) throw new IllegalArgumentException(L.l("request dispatcher url can't be null.")); else if (!url.startsWith("/")) throw new IllegalArgumentException(L.l("request dispatcher url `{0}' must be absolute", url)); Invocation includeInvocation = new Invocation(); Invocation forwardInvocation = new Invocation(); Invocation errorInvocation = new Invocation(); Invocation dispatchInvocation = new Invocation(); Invocation requestInvocation = dispatchInvocation; InvocationDecoder decoder = new InvocationDecoder(); String rawURI = url; try { decoder.splitQuery(includeInvocation, rawURI); decoder.splitQuery(forwardInvocation, rawURI); decoder.splitQuery(errorInvocation, rawURI); decoder.splitQuery(dispatchInvocation, rawURI); buildIncludeInvocation(includeInvocation); buildForwardInvocation(forwardInvocation); buildErrorInvocation(errorInvocation); buildDispatchInvocation(dispatchInvocation); WebAppController controller = getWebAppController(includeInvocation); WebApp webApp = getWebApp(includeInvocation, controller, false); RequestDispatcher disp = new RequestDispatcherImpl( includeInvocation, forwardInvocation, errorInvocation, dispatchInvocation, requestInvocation, webApp); return disp; } catch (Exception e) { log.log(Level.FINE, e.toString(), e); return null; } }