dispatcher.java

来自「jetty SERVER連接資料庫用的軟體」· Java 代码 · 共 580 行 · 第 1/2 页

JAVA
580
字号
                                                        query = query + overridden_query_string;                        }                        else                         {                            query=query+"&"+old_query;                        }                   }                    base_request.setParameters(parameters);                    base_request.setQueryString(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 ((String)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;                }                                                                 base_request.setRequestURI(_uri);                base_request.setContextPath(_contextHandler.getContextPath());                base_request.setAttributes(attr);                base_request.setQueryString(query);                                _contextHandler.handle(_path, (HttpServletRequest)request, (HttpServletResponse)response, dispatch);                                if (base_request.getConnection().getResponse().isWriting())                {                    try {response.getWriter().close();}                    catch(IllegalStateException e) { response.getOutputStream().close(); }                }                else                {                    try {response.getOutputStream().close();}                    catch(IllegalStateException e) { response.getWriter().close(); }                }            }        }        finally        {            base_request.setRequestURI(old_uri);            base_request.setContextPath(old_context_path);            base_request.setServletPath(old_servlet_path);            base_request.setPathInfo(old_path_info);            base_request.setAttributes(old_attr);            base_request.setParameters(old_params);            base_request.setQueryString(old_query);        }    }    /* ------------------------------------------------------------ */    /* ------------------------------------------------------------ */    /* ------------------------------------------------------------ */    private class ForwardAttributes implements Attributes    {        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) || key.equals(__INCLUDE_JETTY) )                return null;            if (key.equals(__FORWARD_JETTY))                 return Boolean.TRUE;                        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);        }                /* ------------------------------------------------------------ */        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    {        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;                        if (key.equals(__INCLUDE_JETTY))                 return Boolean.TRUE;                        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);        }                /* ------------------------------------------------------------ */        public String toString()         {            return "INCLUDE+"+_attr.toString();        }        /* ------------------------------------------------------------ */        public void clearAttributes()        {            throw new IllegalStateException();        }        /* ------------------------------------------------------------ */        public void removeAttribute(String name)        {            setAttribute(name,null);        }    }};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?