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

📄 uriutil.java

📁 是离开的肌肤了卡机是离开的就富利卡及是了的开发及拉考试及的福利科技阿斯利康的肌肤莱卡及时的离开福建阿斯顿发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// ========================================================================// Copyright 2004-2005 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.util;import java.io.UnsupportedEncodingException;/* ------------------------------------------------------------ *//** URI Holder. * This class assists with the decoding and encoding or HTTP URI's. * It differs from the java.net.URL class as it does not provide * communications ability, but it does assist with query string * formatting. * <P>UTF-8 encoding is used by default for % encoded characters. This * may be overridden with the org.mortbay.util.URI.charset system property. * @see UrlEncoded * @author Greg Wilkins (gregw) */public class URIUtil    implements Cloneable{    public static final String SLASH="/";    public static final String HTTP="http";    public static final String HTTP_COLON="http:";    public static final String HTTPS="https";    public static final String HTTPS_COLON="https:";    // Use UTF-8 as per http://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars    public static final String __CHARSET=System.getProperty("org.mortbay.util.URI.charset",StringUtil.__UTF8);        private URIUtil()    {}        /* ------------------------------------------------------------ */    /** Encode a URI path.     * This is the same encoding offered by URLEncoder, except that     * the '/' character is not encoded.     * @param path The path the encode     * @return The encoded path     */    public static String encodePath(String path)    {        if (path==null || path.length()==0)            return path;                StringBuffer buf = encodePath(null,path);        return buf==null?path:buf.toString();    }            /* ------------------------------------------------------------ */    /** Encode a URI path.     * @param path The path the encode     * @param buf StringBuffer to encode path into (or null)     * @return The StringBuffer or null if no substitutions required.     */    public static StringBuffer encodePath(StringBuffer buf, String path)    {        if (buf==null)        {        loop:            for (int i=0;i<path.length();i++)            {                char c=path.charAt(i);                switch(c)                {                    case '%':                    case '?':                    case ';':                    case '#':                    case '\'':                    case '"':                    case '<':                    case '>':                    case ' ':                        buf=new StringBuffer(path.length()<<1);                        break loop;                }            }            if (buf==null)                return null;        }                synchronized(buf)        {            for (int i=0;i<path.length();i++)            {                char c=path.charAt(i);                       switch(c)                {                  case '%':                      buf.append("%25");                      continue;                  case '?':                      buf.append("%3F");                      continue;                  case ';':                      buf.append("%3B");                      continue;                  case '#':                      buf.append("%23");                      continue;                  case '"':                      buf.append("%22");                      continue;                  case '\'':                      buf.append("%27");                      continue;                  case '<':                      buf.append("%3C");                      continue;                  case '>':                      buf.append("%3E");                      continue;                  case ' ':                      buf.append("%20");                      continue;                  default:                      buf.append(c);                      continue;                }            }        }        return buf;    }        /* ------------------------------------------------------------ */    /** Encode a URI path.     * @param path The path the encode     * @param buf StringBuffer to encode path into (or null)     * @param encode String of characters to encode. % is always encoded.     * @return The StringBuffer or null if no substitutions required.     */    public static StringBuffer encodeString(StringBuffer buf,                                            String path,                                            String encode)    {        if (buf==null)        {        loop:            for (int i=0;i<path.length();i++)            {                char c=path.charAt(i);                if (c=='%' || encode.indexOf(c)>=0)                {                        buf=new StringBuffer(path.length()<<1);                    break loop;                }            }            if (buf==null)                return null;        }                synchronized(buf)        {            for (int i=0;i<path.length();i++)            {                char c=path.charAt(i);                if (c=='%' || encode.indexOf(c)>=0)                {                    buf.append('%');                    StringUtil.append(buf,(byte)(0xff&c),16);                }                else                    buf.append(c);            }        }        return buf;    }        /* ------------------------------------------------------------ */    /* Decode a URI path.     * @param path The path the encode     * @param buf StringBuffer to encode path into     */    public static String decodePath(String path)    {        if (path==null)            return null;        char[] chars=null;        int n=0;        byte[] bytes=null;        int b=0;                int len=path.length();                for (int i=0;i<len;i++)        {            char c = path.charAt(i);            if (c=='%' && (i+2)<len)            {                if (chars==null)                {                    chars=new char[len];                    bytes=new byte[len];                    path.getChars(0,i,chars,0);                }                bytes[b++]=(byte)(0xff&TypeUtil.parseInt(path,i+1,2,16));                i+=2;                continue;            }            else if (bytes==null)            {                n++;                continue;            }                        if (b>0)            {                String s;                try                {                    s=new String(bytes,0,b,__CHARSET);                }                catch (UnsupportedEncodingException e)                {                           s=new String(bytes,0,b);                }                s.getChars(0,s.length(),chars,n);                n+=s.length();                b=0;            }                        chars[n++]=c;        }        if (chars==null)            return path;        if (b>0)        {            String s;            try            {                s=new String(bytes,0,b,__CHARSET);            }            catch (UnsupportedEncodingException e)            {                       s=new String(bytes,0,b);            }            s.getChars(0,s.length(),chars,n);            n+=s.length();        }                return new String(chars,0,n);    }        /* ------------------------------------------------------------ */    /* Decode a URI path.     * @param path The path the encode     * @param buf StringBuffer to encode path into     */    public static String decodePath(byte[] buf, int offset, int length)    {        byte[] bytes=null;        int n=0;                for (int i=0;i<length;i++)        {            byte b = buf[i + offset];                        if (b=='%' && (i+2)<length)            {                b=(byte)(0xff&TypeUtil.parseInt(buf,i+offset+1,2,16));                i+=2;            }            else if (bytes==null)            {                n++;                continue;            }                        if (bytes==null)            {                bytes=new byte[length];                for (int j=0;j<n;j++)                    bytes[j]=buf[j + offset];            }                        bytes[n++]=b;        }        if (bytes==null)            return StringUtil.toString(buf,offset,length,__CHARSET);        return StringUtil.toString(bytes,0,n,__CHARSET);    }        /* ------------------------------------------------------------ */    /** Add two URI path segments.     * Handles null and empty paths, path and query params (eg ?a=b or     * ;JSESSIONID=xxx) and avoids duplicate '/'     * @param p1 URI path segment (should be encoded)

⌨️ 快捷键说明

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