Mercurial Hosting > luan
changeset 822:0048a843297a
remove Dispatcher
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 14 Sep 2016 00:58:52 -0600 |
parents | 292f2e31ab41 |
children | 9d4eab790cd2 |
files | src/org/eclipse/jetty/server/Dispatcher.java src/org/eclipse/jetty/server/Request.java src/org/eclipse/jetty/server/handler/ContextHandler.java src/org/eclipse/jetty/server/handler/ErrorHandler.java src/org/eclipse/jetty/server/handler/ResourceHandler.java |
diffstat | 5 files changed, 6 insertions(+), 601 deletions(-) [+] |
line wrap: on
line diff
--- a/src/org/eclipse/jetty/server/Dispatcher.java Wed Sep 14 00:48:03 2016 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,550 +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; - -import java.io.IOException; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; - -import javax.servlet.DispatcherType; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.eclipse.jetty.server.handler.ContextHandler; -import org.eclipse.jetty.util.Attributes; -import org.eclipse.jetty.util.LazyList; -import org.eclipse.jetty.util.MultiMap; -import org.eclipse.jetty.util.UrlEncoded; - -/* ------------------------------------------------------------ */ -/** Servlet RequestDispatcher. - * - * - */ -public class Dispatcher implements RequestDispatcher -{ - /** Dispatch include attribute names */ - public final static String __INCLUDE_PREFIX="javax.servlet.include."; - - /** Dispatch include attribute names */ - public final static String __FORWARD_PREFIX="javax.servlet.forward."; - - /** JSP attributes */ - public final static String __JSP_FILE="org.apache.catalina.jsp_file"; - - /* ------------------------------------------------------------ */ - private final ContextHandler _contextHandler; - private final String _uri; - private final String _path; - private final String _dQuery; - private final String _named; - - /* ------------------------------------------------------------ */ - /** - * @param contextHandler - * @param uri - * @param pathInContext - * @param query - */ - public Dispatcher(ContextHandler contextHandler, String uri, String pathInContext, String query) - { - _contextHandler=contextHandler; - _uri=uri; - _path=pathInContext; - _dQuery=query; - _named=null; - } - - - /* ------------------------------------------------------------ */ - /** Constructor. - * @param contextHandler - * @param name - */ - public Dispatcher(ContextHandler contextHandler,String name) - throws IllegalStateException - { - _contextHandler=contextHandler; - _named=name; - _uri=null; - _path=null; - _dQuery=null; - } - - /* ------------------------------------------------------------ */ - /* - * @see javax.servlet.RequestDispatcher#forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse) - */ - public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException - { - forward(request, response, DispatcherType.FORWARD); - } - - /* ------------------------------------------------------------ */ - /* - * @see javax.servlet.RequestDispatcher#forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse) - */ - public void error(ServletRequest request, ServletResponse response) throws ServletException, IOException - { - forward(request, response, DispatcherType.ERROR); - } - - /* ------------------------------------------------------------ */ - /* - * @see javax.servlet.RequestDispatcher#include(javax.servlet.ServletRequest, javax.servlet.ServletResponse) - */ - public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException - { - Request baseRequest=(request instanceof Request)?((Request)request):AbstractHttpConnection.getCurrentConnection().getRequest(); - - - if (!(request instanceof HttpServletRequest)) - request = new ServletRequestHttpWrapper(request); - if (!(response instanceof HttpServletResponse)) - response = new ServletResponseHttpWrapper(response); - - - // TODO - allow stream or writer???? - - final DispatcherType old_type = baseRequest.getDispatcherType(); - final Attributes old_attr=baseRequest.getAttributes(); - MultiMap old_params=baseRequest.getParameters(); - try - { - baseRequest.setDispatcherType(DispatcherType.INCLUDE); - baseRequest.getConnection().include(); - if (_named!=null) - _contextHandler.handle(_named,baseRequest, (HttpServletRequest)request, (HttpServletResponse)response); - else - { - String query=_dQuery; - - if (query!=null) - { - // force parameter extraction - if (old_params==null) - { - baseRequest.extractParameters(); - old_params=baseRequest.getParameters(); - } - - MultiMap parameters=new MultiMap(); - UrlEncoded.decodeTo(query,parameters,baseRequest.getCharacterEncoding()); - - if (old_params!=null && old_params.size()>0) - { - // Merge parameters. - Iterator iter = old_params.entrySet().iterator(); - while (iter.hasNext()) - { - Map.Entry entry = (Map.Entry)iter.next(); - String name=(String)entry.getKey(); - Object values=entry.getValue(); - for (int i=0;i<LazyList.size(values);i++) - parameters.add(name, LazyList.get(values, i)); - } - } - baseRequest.setParameters(parameters); - } - - IncludeAttributes attr = new IncludeAttributes(old_attr); - - attr._requestURI=_uri; - attr._contextPath=_contextHandler.getContextPath(); - attr._servletPath=null; // set by ServletHandler - attr._pathInfo=_path; - attr._query=query; - - baseRequest.setAttributes(attr); - - _contextHandler.handle(_path,baseRequest, (HttpServletRequest)request, (HttpServletResponse)response); - } - } - finally - { - baseRequest.setAttributes(old_attr); - baseRequest.getConnection().included(); - baseRequest.setParameters(old_params); - baseRequest.setDispatcherType(old_type); - } - } - - - /* ------------------------------------------------------------ */ - /* - * @see javax.servlet.RequestDispatcher#forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse) - */ - protected void forward(ServletRequest request, ServletResponse response, DispatcherType dispatch) throws ServletException, IOException - { - Request baseRequest=(request instanceof Request)?((Request)request):AbstractHttpConnection.getCurrentConnection().getRequest(); - Response base_response=baseRequest.getResponse(); - response.resetBuffer(); - base_response.fwdReset(); - - - if (!(request instanceof HttpServletRequest)) - request = new ServletRequestHttpWrapper(request); - if (!(response instanceof HttpServletResponse)) - response = new ServletResponseHttpWrapper(response); - - final boolean old_handled=baseRequest.isHandled(); - final String old_uri=baseRequest.getRequestURI(); - final String old_context_path=baseRequest.getContextPath(); - final String old_servlet_path=baseRequest.getServletPath(); - final String old_path_info=baseRequest.getPathInfo(); - final String old_query=baseRequest.getQueryString(); - final Attributes old_attr=baseRequest.getAttributes(); - final DispatcherType old_type=baseRequest.getDispatcherType(); - MultiMap<String> old_params=baseRequest.getParameters(); - - try - { - baseRequest.setHandled(false); - baseRequest.setDispatcherType(dispatch); - - if (_named!=null) - _contextHandler.handle(_named,baseRequest, (HttpServletRequest)request, (HttpServletResponse)response); - else - { - - // process any query string from the dispatch URL - String query=_dQuery; - if (query!=null) - { - // force parameter extraction - if (old_params==null) - { - baseRequest.extractParameters(); - old_params=baseRequest.getParameters(); - } - - baseRequest.mergeQueryString(query); - } - - ForwardAttributes attr = new ForwardAttributes(old_attr); - - //If we have already been forwarded previously, then keep using the established - //original value. Otherwise, this is the first forward and we need to establish the values. - //Note: the established value on the original request for pathInfo and - //for queryString is allowed to be null, but cannot be null for the other values. - if (old_attr.getAttribute(FORWARD_REQUEST_URI) != null) - { - attr._pathInfo=(String)old_attr.getAttribute(FORWARD_PATH_INFO); - attr._query=(String)old_attr.getAttribute(FORWARD_QUERY_STRING); - attr._requestURI=(String)old_attr.getAttribute(FORWARD_REQUEST_URI); - attr._contextPath=(String)old_attr.getAttribute(FORWARD_CONTEXT_PATH); - attr._servletPath=(String)old_attr.getAttribute(FORWARD_SERVLET_PATH); - } - else - { - attr._pathInfo=old_path_info; - attr._query=old_query; - attr._requestURI=old_uri; - attr._contextPath=old_context_path; - attr._servletPath=old_servlet_path; - } - - baseRequest.setRequestURI(_uri); - baseRequest.setContextPath(_contextHandler.getContextPath()); - baseRequest.setServletPath(null); - baseRequest.setPathInfo(_uri); - baseRequest.setAttributes(attr); - - _contextHandler.handle(_path,baseRequest, (HttpServletRequest)request, (HttpServletResponse)response); - - if (!baseRequest.getAsyncContinuation().isAsyncStarted()) - commitResponse(response,baseRequest); - } - } - finally - { - baseRequest.setHandled(old_handled); - baseRequest.setRequestURI(old_uri); - baseRequest.setContextPath(old_context_path); - baseRequest.setServletPath(old_servlet_path); - baseRequest.setPathInfo(old_path_info); - baseRequest.setAttributes(old_attr); - baseRequest.setParameters(old_params); - baseRequest.setQueryString(old_query); - baseRequest.setDispatcherType(old_type); - } - } - - - /* ------------------------------------------------------------ */ - private void commitResponse(ServletResponse response, Request baseRequest) throws IOException - { - if (baseRequest.getResponse().isWriting()) - { - try - { - response.getWriter().close(); - } - catch (IllegalStateException e) - { - response.getOutputStream().close(); - } - } - else - { - try - { - response.getOutputStream().close(); - } - catch (IllegalStateException e) - { - response.getWriter().close(); - } - } - } - - - /* ------------------------------------------------------------ */ - /* ------------------------------------------------------------ */ - /* ------------------------------------------------------------ */ - private class ForwardAttributes implements Attributes - { - final Attributes _attr; - - String _requestURI; - String _contextPath; - String _servletPath; - String _pathInfo; - String _query; - - ForwardAttributes(Attributes attributes) - { - _attr=attributes; - } - - /* ------------------------------------------------------------ */ - public Object getAttribute(String key) - { - if (Dispatcher.this._named==null) - { - if (key.equals(FORWARD_PATH_INFO)) - return _pathInfo; - if (key.equals(FORWARD_REQUEST_URI)) - return _requestURI; - if (key.equals(FORWARD_SERVLET_PATH)) - return _servletPath; - if (key.equals(FORWARD_CONTEXT_PATH)) - return _contextPath; - if (key.equals(FORWARD_QUERY_STRING)) - return _query; - } - - if (key.startsWith(__INCLUDE_PREFIX)) - return null; - - return _attr.getAttribute(key); - } - - /* ------------------------------------------------------------ */ - public Enumeration getAttributeNames() - { - HashSet set=new HashSet(); - Enumeration e=_attr.getAttributeNames(); - while(e.hasMoreElements()) - { - String name=(String)e.nextElement(); - if (!name.startsWith(__INCLUDE_PREFIX) && - !name.startsWith(__FORWARD_PREFIX)) - set.add(name); - } - - if (_named==null) - { - if (_pathInfo!=null) - set.add(FORWARD_PATH_INFO); - else - set.remove(FORWARD_PATH_INFO); - set.add(FORWARD_REQUEST_URI); - set.add(FORWARD_SERVLET_PATH); - set.add(FORWARD_CONTEXT_PATH); - if (_query!=null) - set.add(FORWARD_QUERY_STRING); - else - set.remove(FORWARD_QUERY_STRING); - } - - return Collections.enumeration(set); - } - - /* ------------------------------------------------------------ */ - public void setAttribute(String key, Object value) - { - if (_named==null && key.startsWith("javax.servlet.")) - { - if (key.equals(FORWARD_PATH_INFO)) - _pathInfo=(String)value; - else if (key.equals(FORWARD_REQUEST_URI)) - _requestURI=(String)value; - else if (key.equals(FORWARD_SERVLET_PATH)) - _servletPath=(String)value; - else if (key.equals(FORWARD_CONTEXT_PATH)) - _contextPath=(String)value; - else if (key.equals(FORWARD_QUERY_STRING)) - _query=(String)value; - - else if (value==null) - _attr.removeAttribute(key); - else - _attr.setAttribute(key,value); - } - else if (value==null) - _attr.removeAttribute(key); - else - _attr.setAttribute(key,value); - } - - /* ------------------------------------------------------------ */ - @Override - public String toString() - { - return "FORWARD+"+_attr.toString(); - } - - /* ------------------------------------------------------------ */ - public void clearAttributes() - { - throw new IllegalStateException(); - } - - /* ------------------------------------------------------------ */ - public void removeAttribute(String name) - { - setAttribute(name,null); - } - } - - /* ------------------------------------------------------------ */ - private class IncludeAttributes implements Attributes - { - final Attributes _attr; - - String _requestURI; - String _contextPath; - String _servletPath; - String _pathInfo; - String _query; - - IncludeAttributes(Attributes attributes) - { - _attr=attributes; - } - - /* ------------------------------------------------------------ */ - /* ------------------------------------------------------------ */ - /* ------------------------------------------------------------ */ - public Object getAttribute(String key) - { - if (Dispatcher.this._named==null) - { - if (key.equals(INCLUDE_PATH_INFO)) return _pathInfo; - if (key.equals(INCLUDE_SERVLET_PATH)) return _servletPath; - if (key.equals(INCLUDE_CONTEXT_PATH)) return _contextPath; - if (key.equals(INCLUDE_QUERY_STRING)) return _query; - if (key.equals(INCLUDE_REQUEST_URI)) return _requestURI; - } - else if (key.startsWith(__INCLUDE_PREFIX)) - return null; - - - return _attr.getAttribute(key); - } - - /* ------------------------------------------------------------ */ - public Enumeration getAttributeNames() - { - HashSet set=new HashSet(); - Enumeration e=_attr.getAttributeNames(); - while(e.hasMoreElements()) - { - String name=(String)e.nextElement(); - if (!name.startsWith(__INCLUDE_PREFIX)) - set.add(name); - } - - if (_named==null) - { - if (_pathInfo!=null) - set.add(INCLUDE_PATH_INFO); - else - set.remove(INCLUDE_PATH_INFO); - set.add(INCLUDE_REQUEST_URI); - set.add(INCLUDE_SERVLET_PATH); - set.add(INCLUDE_CONTEXT_PATH); - if (_query!=null) - set.add(INCLUDE_QUERY_STRING); - else - set.remove(INCLUDE_QUERY_STRING); - } - - return Collections.enumeration(set); - } - - /* ------------------------------------------------------------ */ - public void setAttribute(String key, Object value) - { - if (_named==null && key.startsWith("javax.servlet.")) - { - if (key.equals(INCLUDE_PATH_INFO)) _pathInfo=(String)value; - else if (key.equals(INCLUDE_REQUEST_URI)) _requestURI=(String)value; - else if (key.equals(INCLUDE_SERVLET_PATH)) _servletPath=(String)value; - else if (key.equals(INCLUDE_CONTEXT_PATH)) _contextPath=(String)value; - else if (key.equals(INCLUDE_QUERY_STRING)) _query=(String)value; - else if (value==null) - _attr.removeAttribute(key); - else - _attr.setAttribute(key,value); - } - else if (value==null) - _attr.removeAttribute(key); - else - _attr.setAttribute(key,value); - } - - /* ------------------------------------------------------------ */ - @Override - public String toString() - { - return "INCLUDE+"+_attr.toString(); - } - - /* ------------------------------------------------------------ */ - public void clearAttributes() - { - throw new IllegalStateException(); - } - - /* ------------------------------------------------------------ */ - public void removeAttribute(String name) - { - setAttribute(name,null); - } - } -}
--- a/src/org/eclipse/jetty/server/Request.java Wed Sep 14 00:48:03 2016 -0600 +++ b/src/org/eclipse/jetty/server/Request.java Wed Sep 14 00:58:52 2016 -0600 @@ -961,22 +961,7 @@ */ public RequestDispatcher getRequestDispatcher(String path) { - if (path == null || _context == null) - return null; - - // handle relative path - if (!path.startsWith("/")) - { - String relTo = URIUtil.addPaths(_servletPath,_pathInfo); - int slash = relTo.lastIndexOf("/"); - if (slash > 1) - relTo = relTo.substring(0,slash + 1); - else - relTo = "/"; - path = URIUtil.addPaths(relTo,path); - } - - return _context.getRequestDispatcher(path); + throw new UnsupportedOperationException(); } /* ------------------------------------------------------------ */
--- a/src/org/eclipse/jetty/server/handler/ContextHandler.java Wed Sep 14 00:48:03 2016 -0600 +++ b/src/org/eclipse/jetty/server/handler/ContextHandler.java Wed Sep 14 00:58:52 2016 -0600 @@ -65,7 +65,6 @@ import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.io.Buffer; import org.eclipse.jetty.server.AbstractHttpConnection; -import org.eclipse.jetty.server.Dispatcher; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.HandlerContainer; import org.eclipse.jetty.server.Request; @@ -1870,35 +1869,7 @@ @Override public RequestDispatcher getRequestDispatcher(String uriInContext) { - if (uriInContext == null) - return null; - - if (!uriInContext.startsWith("/")) - return null; - - try - { - String query = null; - int q = 0; - if ((q = uriInContext.indexOf('?')) > 0) - { - query = uriInContext.substring(q + 1); - uriInContext = uriInContext.substring(0,q); - } - - String pathInContext = URIUtil.canonicalPath(URIUtil.decodePath(uriInContext)); - if (pathInContext!=null) - { - String uri = URIUtil.addPaths(getContextPath(),uriInContext); - ContextHandler context = ContextHandler.this; - return new Dispatcher(context,uri,pathInContext,query); - } - } - catch (Exception e) - { - LOG.trace("",e); - } - return null; + throw new UnsupportedOperationException(); } /* ------------------------------------------------------------ */
--- a/src/org/eclipse/jetty/server/handler/ErrorHandler.java Wed Sep 14 00:48:03 2016 -0600 +++ b/src/org/eclipse/jetty/server/handler/ErrorHandler.java Wed Sep 14 00:58:52 2016 -0600 @@ -32,7 +32,6 @@ import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.server.AbstractHttpConnection; -import org.eclipse.jetty.server.Dispatcher; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.util.ByteArrayISO8859Writer; import org.slf4j.Logger;
--- a/src/org/eclipse/jetty/server/handler/ResourceHandler.java Wed Sep 14 00:48:03 2016 -0600 +++ b/src/org/eclipse/jetty/server/handler/ResourceHandler.java Wed Sep 14 00:58:52 2016 -0600 @@ -35,7 +35,7 @@ import org.eclipse.jetty.io.ByteArrayBuffer; import org.eclipse.jetty.io.WriterOutputStream; import org.eclipse.jetty.server.AbstractHttpConnection; -import org.eclipse.jetty.server.Dispatcher; +import javax.servlet.RequestDispatcher; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Response; import org.eclipse.jetty.server.handler.ContextHandler.Context; @@ -319,11 +319,11 @@ { String servletPath; String pathInfo; - Boolean included = request.getAttribute(Dispatcher.INCLUDE_REQUEST_URI) != null; + Boolean included = request.getAttribute(RequestDispatcher.INCLUDE_REQUEST_URI) != null; if (included != null && included.booleanValue()) { - servletPath = (String)request.getAttribute(Dispatcher.INCLUDE_SERVLET_PATH); - pathInfo = (String)request.getAttribute(Dispatcher.INCLUDE_PATH_INFO); + servletPath = (String)request.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH); + pathInfo = (String)request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO); if (servletPath == null && pathInfo == null) {