⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpuri.java

📁 jetty SERVER連接資料庫用的軟體
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//========================================================================//Copyright 2006 Mort Bay Consulting Pty. Ltd.//------------------------------------------------------------------------//Licensed under the Apache License, Version 2.0 (the "License");//you may not use this file except in compliance with the License.//You may obtain a copy of the License at //http://www.apache.org/licenses/LICENSE-2.0//Unless required by applicable law or agreed to in writing, software//distributed under the License is distributed on an "AS IS" BASIS,//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.//See the License for the specific language governing permissions and//limitations under the License.//========================================================================package org.mortbay.jetty;import java.io.UnsupportedEncodingException;import org.mortbay.util.MultiMap;import org.mortbay.util.StringUtil;import org.mortbay.util.TypeUtil;import org.mortbay.util.URIUtil;import org.mortbay.util.UrlEncoded;import org.mortbay.util.Utf8StringBuffer;/* ------------------------------------------------------------ *//** Http URI. * Parse a HTTP URI from a string or byte array.  Given a URI * <code>http://user@host:port/path/info;param?query#fragment</code> * this class will split it into the following undecoded optional elements:<ul> * <li>{@link #getScheme()} - http:</li> * <li>{@link #getAuthority()} - //name@host:port</li> * <li>{@link #getHost()} - host</li> * <li>{@link #getPort()} - port</li> * <li>{@link #getPath()} - /path/info</li> * <li>{@link #getParam()} - param</li> * <li>{@link #getQuery()} - query</li> * <li>{@link #getFragment()} - fragment</li> * </ul> *  */public class HttpURI{    private static byte[] __empty={};     private final static int     START=0,    AUTH_OR_PATH=1,    SCHEME_OR_PATH=2,    AUTH=4,    IPV6=5,    PORT=6,    PATH=7,    PARAM=8,    QUERY=9,    ASTERISK=10;        boolean _partial=false;    byte[] _raw=__empty;    String _rawString;    int _scheme;    int _authority;    int _host;    int _port;    int _path;    int _param;    int _query;    int _fragment;    int _end;        Utf8StringBuffer _utf8b = new Utf8StringBuffer(64);        public HttpURI()    {            }         /* ------------------------------------------------------------ */    /**     * @param parsePartialAuth If True, parse auth without prior scheme, else treat all URIs starting with / as paths     */    public HttpURI(boolean parsePartialAuth)    {        _partial=parsePartialAuth;    }        public HttpURI(String raw)    {        _rawString=raw;        byte[] b = raw.getBytes();        parse(b,0,b.length);    }        public HttpURI(byte[] raw,int offset, int length)    {        parse2(raw,offset,length);    }        public void parse(String raw)    {        byte[] b = raw.getBytes();        parse2(b,0,b.length);        _rawString=raw;    }        public void parse(byte[] raw,int offset, int length)    {        _rawString=null;        parse2(raw,offset,length);    }        private void parse2(byte[] raw,int offset, int length)    {        _raw=raw;        int i=offset;        int e=offset+length;        int state=START;        int m=offset;        _end=offset+length;        _scheme=offset;        _authority=offset;        _host=offset;        _port=offset;        _path=offset;        _param=_end;        _query=_end;        _fragment=_end;        while (i<e)        {            char c=(char)(0xff&_raw[i]);            int s=i++;                        state: switch (state)            {                case START:                {                    m=s;                    switch(c)                    {                        case '/':                            state=AUTH_OR_PATH;                            break;                        case ';':                            _param=s;                            state=PARAM;                            break;                        case '?':                            _param=s;                            _query=s;                            state=QUERY;                            break;                        case '#':                            _param=s;                            _query=s;                            _fragment=s;                            break;                        case '*':                            _path=s;                            state=ASTERISK;                            break;                                                    default:                            if (Character.isLetterOrDigit(c))                                state=SCHEME_OR_PATH;                            else                                throw new IllegalArgumentException(StringUtil.toString(_raw,offset,length,URIUtil.__CHARSET));                    }                                        continue;                }                case AUTH_OR_PATH:                {                    if ((_partial||_scheme!=_authority) && c=='/')                    {                        _host=i;                        _port=_end;                        _path=_end;                        state=AUTH;                    }                    else if (c==';' || c=='?' || c=='#')                    {                        i--;                        state=PATH;                    }                      else                    {                        _host=m;                        _port=m;                        state=PATH;                    }                      continue;                }                                case SCHEME_OR_PATH:                {                    // short cut for http and https                    if (length>6 && c=='t')                    {                        if (_raw[offset+3]==':')                        {                            s=offset+3;                            i=offset+4;                            c=':';                        }                        else if (_raw[offset+4]==':')                        {                            s=offset+4;                            i=offset+5;                            c=':';                        }                        else if (_raw[offset+5]==':')                        {                            s=offset+5;                            i=offset+6;                            c=':';                        }                    }                                        switch (c)                    {                        case ':':                        {                            m = i++;                            _authority = m;                            _path = m;                            c = (char)(0xff & _raw[i]);                            if (c == '/')                                state = AUTH_OR_PATH;                            else                            {                                _host = m;                                _port = m;                                state = PATH;                            }                            break;                        }                                                case '/':                        {                            state = PATH;                            break;                        }                                                case ';':                        {                            _param = s;                            state = PARAM;                            break;                        }                                                case '?':                        {                            _param = s;                            _query = s;                            state = QUERY;                            break;                        }                                                case '#':                        {                            _param = s;                            _query = s;                            _fragment = s;                            break;                        }                    }                    continue;                }                                case AUTH:                {                    switch (c)                    {                        case '/':                        {                            m = s;                            _path = m;                            _port = _path;                            state = PATH;                            break;                        }                        case '@':                        {                            _host = i;                            break;                        }                        case ':':                        {                            _port = s;                            state = PORT;                            break;                        }

⌨️ 快捷键说明

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